Merge branch 'master' of https://github.com/redmatrix/hubzilla into contextual-help

This commit is contained in:
Andrew Manning 2016-03-23 21:17:23 -04:00
commit 59827b6dfd
31 changed files with 3170 additions and 3298 deletions

View File

@ -47,7 +47,7 @@ require_once('include/account.php');
define ( 'PLATFORM_NAME', 'hubzilla' );
define ( 'RED_VERSION', trim(file_get_contents('version.inc')));
define ( 'STD_VERSION', '1.3.1' );
define ( 'STD_VERSION', '1.3.2' );
define ( 'ZOT_REVISION', 1 );
define ( 'DB_UPDATE_VERSION', 1165 );
@ -271,9 +271,11 @@ define ( 'MENU_BOOKMARK', 0x0002 );
* Network and protocol family types
*/
define ( 'NETWORK_DFRN', 'friendica-over-diaspora'); // Friendica, Mistpark, other DFRN implementations
define ( 'NETWORK_FRND', 'friendica-over-diaspora'); // Friendica, Mistpark, other DFRN implementations
define ( 'NETWORK_DFRN', 'dfrn'); // Friendica, Mistpark, other DFRN implementations
define ( 'NETWORK_ZOT', 'zot'); // Zot!
define ( 'NETWORK_OSTATUS', 'stat'); // status.net, identi.ca, GNU-social, other OStatus implementations
define ( 'NETWORK_GNUSOCIAL', 'gnusoc'); // status.net, identi.ca, GNU-social, other OStatus implementations
define ( 'NETWORK_FEED', 'rss'); // RSS/Atom feeds with no known "post/notify" protocol
define ( 'NETWORK_DIASPORA', 'diaspora'); // Diaspora
define ( 'NETWORK_MAIL', 'mail'); // IMAP/POP

View File

@ -73,16 +73,18 @@ function contact_poll_interval($current, $disabled = false) {
function network_to_name($s) {
$nets = array(
NETWORK_DFRN => t('Friendica'),
NETWORK_OSTATUS => t('OStatus'),
NETWORK_FEED => t('RSS/Atom'),
NETWORK_MAIL => t('Email'),
NETWORK_DIASPORA => t('Diaspora'),
NETWORK_FACEBOOK => t('Facebook'),
NETWORK_ZOT => t('Zot'),
NETWORK_LINKEDIN => t('LinkedIn'),
NETWORK_XMPP => t('XMPP/IM'),
NETWORK_MYSPACE => t('MySpace'),
NETWORK_DFRN => t('Friendica'),
NETWORK_FRND => t('Friendica'),
NETWORK_OSTATUS => t('OStatus'),
NETWORK_GNUSOCIAL => t('GNU-Social'),
NETWORK_FEED => t('RSS/Atom'),
NETWORK_MAIL => t('Email'),
NETWORK_DIASPORA => t('Diaspora'),
NETWORK_FACEBOOK => t('Facebook'),
NETWORK_ZOT => t('Zot'),
NETWORK_LINKEDIN => t('LinkedIn'),
NETWORK_XMPP => t('XMPP/IM'),
NETWORK_MYSPACE => t('MySpace'),
);
call_hooks('network_to_name', $nets);

View File

@ -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'));
}

View File

@ -134,26 +134,29 @@ function new_contact($uid,$url,$channel,$interactive = false, $confirm = false)
$their_perms = 0;
$xchan_hash = '';
$r = q("select * from xchan where xchan_hash = '%s' or xchan_url = '%s' limit 1",
dbesc($url),
dbesc($url)
);
if(! $r) {
// attempt network auto-discovery
if(strpos($url,'@') && (! $is_http)) {
$d = discover_by_webbie($url);
}
elseif($is_http) {
if(get_config('system','feed_contacts'))
$d = discover_by_webbie($url);
if((! $d) && ($is_http)) {
// try RSS discovery
if(get_config('system','feed_contacts')) {
$d = discover_by_url($url);
}
else {
$result['message'] = t('Protocol disabled.');
return $result;
}
}
if($d) {
$r = q("select * from xchan where xchan_hash = '%s' or xchan_url = '%s' limit 1",
dbesc($url),
@ -161,6 +164,9 @@ function new_contact($uid,$url,$channel,$interactive = false, $confirm = false)
);
}
}
// if discovery was a success we should have an xchan record in $r
if($r) {
$xchan = $r[0];
$xchan_hash = $r[0]['xchan_hash'];
@ -187,28 +193,13 @@ function new_contact($uid,$url,$channel,$interactive = false, $confirm = false)
}
$singleton = intval($x['singleton']);
if((local_channel()) && $uid == local_channel()) {
$aid = get_account_id();
$hash = get_observer_hash();
$ch = $a->get_channel();
$default_group = $ch['channel_default_group'];
}
else {
$r = q("select * from channel where channel_id = %d limit 1",
intval($uid)
);
if(! $r) {
$result['message'] = t('local account not found.');
return $result;
}
$aid = $r[0]['channel_account_id'];
$hash = $r[0]['channel_hash'];
$default_group = $r[0]['channel_default_group'];
}
$aid = $channel['channel_account_id'];
$hash = get_observer_hash();
$default_group = $channel['channel_default_group'];
if($xchan['xchan_network'] === 'rss') {
if($is_http) {
// check service class feed limits
$r = q("select count(*) as total from abook where abook_account = %d and abook_feed = 1 ",
intval($aid)
@ -232,7 +223,6 @@ function new_contact($uid,$url,$channel,$interactive = false, $confirm = false)
intval($uid)
);
if($r) {
$abook_instance = $r[0]['abook_instance'];
@ -282,7 +272,7 @@ function new_contact($uid,$url,$channel,$interactive = false, $confirm = false)
proc_run('php', 'include/notifier.php', 'permission_create', $result['abook']['abook_id']);
}
$arr = array('channel_id' => $uid, 'abook' => $result['abook']);
$arr = array('channel_id' => $uid, 'channel' => $channel, 'abook' => $result['abook']);
call_hooks('follow', $arr);

View File

@ -211,6 +211,22 @@ function group_get_members($gid) {
return $ret;
}
function group_get_members_xchan($gid) {
$ret = array();
if(intval($gid)) {
$r = q("SELECT xchan FROM group_member WHERE gid = %d AND uid = %d",
intval($gid),
intval(local_channel())
);
if(count($r)) {
foreach($r as $rr) {
$ret[] = $rr['xchan'];
}
}
}
return $ret;
}
function mini_group_select($uid,$group = '') {
$grps = array();

View File

@ -4214,7 +4214,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 +4232,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";

View File

@ -185,9 +185,11 @@ function z_post_url($url,$params, $redirects = 0, $opts = array()) {
if($ciphers)
@curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, $ciphers);
if(x($opts,'headers'))
if(x($opts,'headers')) {
@curl_setopt($ch, CURLOPT_HTTPHEADER, $opts['headers']);
logger('headers: ' . print_r($opts['headers'],true) . 'redir: ' . $redirects);
}
if(x($opts,'nobody'))
@curl_setopt($ch, CURLOPT_NOBODY, $opts['nobody']);
@ -236,6 +238,21 @@ function z_post_url($url,$params, $redirects = 0, $opts = array()) {
$base = substr($base,strlen($chunk));
}
// would somebody take lighttpd and just shoot it?
if($http_code == 417) {
curl_close($ch);
if($opts) {
if($opts['headers'])
$opts['headers'][] = 'Expect:';
else
$opts['headers'] = array('Expect:');
}
else
$opts = array('headers' => array('Expect:'));
return z_post_url($url,$params,++$redirects,$opts);
}
if($http_code == 301 || $http_code == 302 || $http_code == 303 || $http_code == 307 || $http_code == 308) {
$matches = array();
preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches);
@ -1044,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;
@ -1077,7 +1078,6 @@ function discover_by_webbie($webbie) {
$diaspora_base = '';
$diaspora_guid = '';
$diaspora_key = '';
$dfrn = false;
$webbie = strtolower($webbie);
@ -1085,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'])
@ -1098,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']);
@ -1105,6 +1112,7 @@ function discover_by_webbie($webbie) {
}
if($link['rel'] == 'salmon') {
$has_salmon = true;
$salmon = $link['href'];
}
if($link['rel'] == 'http://schemas.google.com/g/2010#updates-from') {
$atom_feed = $link['href'];
@ -1113,82 +1121,40 @@ function discover_by_webbie($webbie) {
}
}
logger('webfing: ' . print_r($x,true));
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']);
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 {
$probe_atom = false;
$probe_old = false;
$probe_hcard = false;
$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())
);
}
$address = '';
$location = '';
$nickname = '';
$fullname = '';
$avatar = '';
$pubkey = '';
$r = q("select * from hubloc where hubloc_hash = '%s' limit 1",
dbesc($addr)
);
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(! $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));
@ -1221,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) {
@ -1473,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))
@ -1549,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));
@ -1595,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;

View File

@ -1,196 +0,0 @@
<?php
require_once('include/crypto.php');
function get_salmon_key($uri,$keyhash) {
$ret = array();
logger('Fetching salmon key for ' . $uri, LOGGER_DEBUG, LOG_INFO);
$x = webfinger_rfc7033($uri,true);
logger('webfinger returns: ' . print_r($x,true), LOGGER_DATA, LOG_DEBUG);
if($x && array_key_exists('links',$x) && $x['links']) {
foreach($x['links'] as $link) {
if(array_key_exists('rel',$link) && $link['rel'] === 'magic-public-key') {
$ret[] = $link['href'];
}
}
}
else {
$arr = old_webfinger($uri);
logger('old webfinger returns: ' . print_r($arr,true), LOGGER_DATA, LOG_DEBUG);
if(is_array($arr)) {
foreach($arr as $a) {
if($a['@attributes']['rel'] === 'magic-public-key') {
$ret[] = $a['@attributes']['href'];
}
}
}
else {
return '';
}
}
// We have found at least one key URL
// If it's inline, parse it - otherwise get the key
if(count($ret)) {
for($x = 0; $x < count($ret); $x ++) {
if(substr($ret[$x],0,5) === 'data:') {
$ret[$x] = convert_salmon_key($ret[$x]);
}
}
}
logger('Key located: ' . print_r($ret,true), LOGGER_DEBUG, LOG_INFO);
if(count($ret) == 1) {
// We only found one one key so we don't care if the hash matches.
// If it's the wrong key we'll find out soon enough because
// message verification will fail. This also covers some older
// software which don't supply a keyhash. As long as they only
// have one key we'll be right.
return $ret[0];
}
else {
foreach($ret as $a) {
$hash = base64url_encode(hash('sha256',$a));
if($hash == $keyhash)
return $a;
}
}
return '';
}
function slapper($owner,$url,$slap) {
// does contact have a salmon endpoint?
if(! strlen($url))
return;
if(! $owner['channel_prvkey']) {
logger(sprintf("channel '%s' (%d) does not have a salmon private key. Send failed.",
$owner['channel_address'],$owner['channel_id']));
return;
}
logger('slapper called for ' .$url . '. Data: ' . $slap, LOGGER_DATA, LOG_DEBUG);
// create a magic envelope
$data = base64url_encode($slap);
$data_type = 'application/atom+xml';
$encoding = 'base64url';
$algorithm = 'RSA-SHA256';
$keyhash = base64url_encode(hash('sha256',salmon_key($owner['channel_pubkey'])),true);
// precomputed base64url encoding of data_type, encoding, algorithm concatenated with periods
$precomputed = '.YXBwbGljYXRpb24vYXRvbSt4bWw=.YmFzZTY0dXJs.UlNBLVNIQTI1Ng==';
$signature = base64url_encode(rsa_sign(str_replace('=','',$data . $precomputed),$owner['channel_prvkey']));
$signature2 = base64url_encode(rsa_sign($data . $precomputed,$owner['channel_prvkey']));
$signature3 = base64url_encode(rsa_sign($data,$owner['channel_prvkey']));
$salmon_tpl = get_markup_template('magicsig.tpl');
$salmon = replace_macros($salmon_tpl,array(
'$data' => $data,
'$encoding' => $encoding,
'$algorithm' => $algorithm,
'$keyhash' => $keyhash,
'$signature' => $signature
));
// slap them
$redirects = 0;
$ret = z_post_url($url,$salmon, $redirects, array('headers' => array(
'Content-type: application/magic-envelope+xml',
'Content-length: ' . strlen($salmon))
));
$return_code = $ret['return_code'];
// check for success, e.g. 2xx
if($return_code > 299) {
logger('compliant salmon failed. Falling back to status.net hack2');
// Entirely likely that their salmon implementation is
// non-compliant. Let's try once more, this time only signing
// the data, without stripping '=' chars
$salmon = replace_macros($salmon_tpl,array(
'$data' => $data,
'$encoding' => $encoding,
'$algorithm' => $algorithm,
'$keyhash' => $keyhash,
'$signature' => $signature2
));
$redirects = 0;
$ret = z_post_url($url,$salmon, $redirects, array('headers' => array(
'Content-type: application/magic-envelope+xml',
'Content-length: ' . strlen($salmon))
));
$return_code = $ret['return_code'];
if($return_code > 299) {
logger('compliant salmon failed. Falling back to status.net hack3');
// Entirely likely that their salmon implementation is
// non-compliant. Let's try once more, this time only signing
// the data, without the precomputed blob
$salmon = replace_macros($salmon_tpl,array(
'$data' => $data,
'$encoding' => $encoding,
'$algorithm' => $algorithm,
'$keyhash' => $keyhash,
'$signature' => $signature3
));
$redirects = 0;
$ret = z_post_url($url,$salmon, $redirects, array('headers' => array(
'Content-type: application/magic-envelope+xml',
'Content-length: ' . strlen($salmon))
));
$return_code = $ret['return_code'];
}
}
logger('slapper for ' . $url . ' returned ' . $return_code);
if(! $return_code)
return(-1);
if(($return_code == 503) && (stristr($ret['header'],'retry-after')))
return(-1);
return ((($return_code >= 200) && ($return_code < 300)) ? 0 : 1);
}

View File

@ -1314,7 +1314,7 @@ function widget_admin($arr) {
$aside = array(
'site' => array(z_root() . '/admin/site/', t('Site'), 'site'),
'users' => array(z_root() . '/admin/users/', t('Accounts'), 'users'),
'users' => array(z_root() . '/admin/users/', t('Accounts'), 'users', 'pending-update', t('Member registrations waiting for confirmation')),
'channels' => array(z_root() . '/admin/channels/', t('Channels'), 'channels'),
'security' => array(z_root() . '/admin/security/', t('Security'), 'security'),
'features' => array(z_root() . '/admin/features/', t('Features'), 'features'),
@ -1330,24 +1330,29 @@ function widget_admin($arr) {
$r = q("SELECT * FROM addon WHERE plugin_admin = 1");
$aside['plugins_admin'] = array();
$plugins = array();
if($r) {
foreach ($r as $h){
$plugin = $h['name'];
$aside['plugins_admin'][] = array(z_root() . '/admin/plugins/' . $plugin, $plugin, 'plugin');
$plugins[] = array(z_root() . '/admin/plugins/' . $plugin, $plugin, 'plugin');
// temp plugins with admin
$a->plugins_admin[] = $plugin;
}
}
$aside['logs'] = array(z_root() . '/admin/logs/', t('Logs'), 'logs');
$logs = array(z_root() . '/admin/logs/', t('Logs'), 'logs');
$arr = array('links' => $aside,'plugins' => $plugins,'logs' => $logs);
call_hooks('admin_aside',$arr);
$o .= replace_macros(get_markup_template('admin_aside.tpl'), array(
'$admin' => $aside,
'$admtxt' => t('Admin'),
'$plugadmtxt' => t('Plugin Features'),
'$plugins' => $plugins,
'$logtxt' => t('Logs'),
'$h_pending' => t('User registrations waiting for confirmation'),
'$logs' => $logs,
'$h_pending' => t('Member registrations waiting for confirmation'),
'$admurl'=> z_root() . '/admin/'
));

View File

@ -2278,6 +2278,12 @@ function check_location_move($sender_hash,$locations) {
dbesc($sender_hash)
);
// federation plugins may wish to notify connections
// of the move on singleton networks
$arr = array('channel' => $r[0],'locations' => $locations);
call_hooks('location_move',$arr);
}
}

View File

@ -2,6 +2,7 @@
/* ACL selector json backend */
require_once("include/acl_selectors.php");
require_once("include/group.php");
function acl_init(&$a){
@ -47,31 +48,29 @@ function acl_init(&$a){
$contacts = array();
if ($type=='' || $type=='g'){
$r = q("SELECT `groups`.`id`, `groups`.`hash`, `groups`.`name`,
%s as uids
$r = q("SELECT `groups`.`id`, `groups`.`hash`, `groups`.`name`
FROM `groups`,`group_member`
WHERE `groups`.`deleted` = 0 AND `groups`.`uid` = %d
AND `group_member`.`gid`=`groups`.`id`
$sql_extra
AND `group_member`.`gid`=`groups`.`id`
$sql_extra
GROUP BY `groups`.`id`
ORDER BY `groups`.`name`
LIMIT %d OFFSET %d",
db_concat('group_member.xchan', ','),
intval(local_channel()),
intval($count),
intval($start)
);
foreach($r as $g){
// logger('acl: group: ' . $g['name'] . ' members: ' . $g['uids']);
// logger('acl: group: ' . $g['name'] . ' members: ' . group_get_members_xchan($g['id']));
$groups[] = array(
"type" => "g",
"photo" => "images/twopeople.png",
"name" => $g['name'],
"id" => $g['id'],
"xid" => $g['hash'],
"uids" => explode(",",$g['uids']),
"uids" => group_get_members_xchan($g['id']),
"link" => ''
);
}
@ -94,7 +93,7 @@ function acl_init(&$a){
$r = q("SELECT abook_id as id, xchan_hash as hash, xchan_name as name, xchan_photo_s as micro, xchan_url as url, xchan_addr as nick, abook_their_perms, abook_flags, abook_self
FROM abook left join xchan on abook_xchan = xchan_hash
WHERE (abook_channel = %d $extra_channels_sql) AND abook_blocked = 0 and abook_pending = 0 and abook_archived = 0 and xchan_deleted = 0 $sql_extra2 order by $order_extra2 xchan_name asc" ,
WHERE (abook_channel = %d $extra_channels_sql) AND abook_blocked = 0 and abook_pending = 0 and xchan_deleted = 0 $sql_extra2 order by $order_extra2 xchan_name asc" ,
intval(local_channel())
);
@ -118,7 +117,7 @@ function acl_init(&$a){
$r2 = q("SELECT abook_id as id, xchan_hash as hash, xchan_name as name, xchan_photo_s as micro, xchan_url as url, xchan_addr as nick, abook_their_perms, abook_flags, abook_self
FROM abook left join xchan on abook_xchan = xchan_hash
WHERE abook_channel IN ($extra_channels_sql) $known_hashes_sql AND abook_blocked = 0 and abook_pending = 0 and abook_archived = 0 and abook_hidden = 0 and xchan_deleted = 0 $sql_extra2 order by $order_extra2 xchan_name asc");
WHERE abook_channel IN ($extra_channels_sql) $known_hashes_sql AND abook_blocked = 0 and abook_pending = 0 and abook_hidden = 0 and xchan_deleted = 0 $sql_extra2 order by $order_extra2 xchan_name asc");
if($r2)
$r = array_merge($r,$r2);

View File

@ -134,9 +134,7 @@ function manage_content(&$a) {
}
}
$links = array(
array( 'new_channel', t('Create a new channel'), t('Create a new channel'))
);
$create = array( 'new_channel', t('Create a new channel'), t('Create New'));
$delegates = q("select * from abook left join xchan on abook_xchan = xchan_hash where
abook_channel = %d and (abook_their_perms & %d) > 0",
@ -156,8 +154,6 @@ function manage_content(&$a) {
$delegates = null;
}
$o = replace_macros(get_markup_template('channels.tpl'), array(
'$header' => t('Channel Manager'),
'$msg_selected' => t('Current Channel'),
@ -165,17 +161,17 @@ function manage_content(&$a) {
'$desc' => t('Switch to one of your channels by selecting it.'),
'$msg_default' => t('Default Channel'),
'$msg_make_default' => t('Make Default'),
'$links' => $links,
'$create' => $create,
'$all_channels' => $channels,
'$mail_format' => t('%d new messages'),
'$intros_format' => t('%d new introductions'),
'$channel_usage_message' => $channel_usage_message,
'$delegate_header' => t('Delegated Channels'),
'$delegated_desc' => t('Delegated Channel'),
'$delegates' => $delegates,
'$locs' => t('Manage locations')
));
return $o;
}

View File

@ -106,7 +106,7 @@ function oep_display_reply($args) {
$w = (($maxwidth) ? $maxwidth : 640);
$h = (($maxheight) ? $maxheight : $w * 2 / 3);
$ret['html'] = '<div style="width: ' . $w . '; height: ' . $h . ';" >' . $o . '</div>';
$ret['html'] = '<div style="width: ' . $w . '; height: ' . $h . '; font-family: sans-serif,arial,freesans;" >' . $o . '</div>';
$ret['width'] = $w;
$ret['height'] = $h;
@ -165,7 +165,7 @@ function oep_mid_reply($args) {
$w = (($maxwidth) ? $maxwidth : 640);
$h = (($maxheight) ? $maxheight : $w * 2 / 3);
$ret['html'] = '<div style="width: ' . $w . '; height: ' . $h . ';" >' . $o . '</div>';
$ret['html'] = '<div style="width: ' . $w . '; height: ' . $h . '; font-family: sans-serif,arial,freesans;" >' . $o . '</div>';
$ret['width'] = $w;
$ret['height'] = $h;

View File

@ -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'],

File diff suppressed because it is too large Load Diff

View File

@ -1 +1 @@
2016-03-17.1338H
2016-03-23.1344H

View File

@ -1,57 +1,34 @@
#channels-selected {
color: #666666;
font-size: 0.8em;
.make-default-link,
.make-default-link:hover {
color: inherit;
text-decoration: none;
}
#channels-desc {
color: #666666;
font-size: 1.2em;
margin-top: 15px;
.new-notification {
color: #c60032;
}
.channel-photo-wrapper {
display: table-cell;
table-layout: fixed;
vertical-align: top;
}
.channel-photo-wrapper img {
border-radius: 4px;
}
.channel-notifications-wrapper {
display: table-cell;
table-layout: fixed;
vertical-align: top;
padding-left: 10px;
}
.selected-channel {
color: green;
}
#all-channels-end {
margin-bottom: 20px;
}
.channels-break {
margin-bottom: 15px;
}
.channel-selection-default {
font-size: 0.8em;
margin-bottom: 10px;
}
.channel-selection {
width: 12em;
height: 16em;
float: left;
text-align: center;
}
.channel-selection img {
display: block;
margin-left: auto;
margin-right: auto;
}
.channel-selection-name-link {
font-size: 1.2em;
margin-top: 10px;
}
.channel-selection-name-link .channel-name {
padding-top: 10px;
word-wrap: break-word;
overflow: hidden;
}
.channels-notifications-wrapper {
clear: both;
padding-top: 10px;
}
.selected-channel img {
border: 2px solid #ff0000;
}
.channels-end {
clear: both;
}

File diff suppressed because it is too large Load Diff

View File

@ -398,42 +398,6 @@ $a->strings["__ctx:noun__ Like"] = array(
0 => "Me gusta",
1 => "Me gusta",
);
$a->strings["Miscellaneous"] = "Varios";
$a->strings["YYYY-MM-DD or MM-DD"] = "AAAA-MM-DD o MM-DD";
$a->strings["Required"] = "Obligatorio";
$a->strings["never"] = "nunca";
$a->strings["less than a second ago"] = "hace un instante";
$a->strings["__ctx:e.g. 22 hours ago, 1 minute ago__ %1\$d %2\$s ago"] = "hace %1\$d %2\$s";
$a->strings["__ctx:relative_date__ year"] = array(
0 => "año",
1 => "años",
);
$a->strings["__ctx:relative_date__ month"] = array(
0 => "mes",
1 => "meses",
);
$a->strings["__ctx:relative_date__ week"] = array(
0 => "semana",
1 => "semanas",
);
$a->strings["__ctx:relative_date__ day"] = array(
0 => "día",
1 => "días",
);
$a->strings["__ctx:relative_date__ hour"] = array(
0 => "hora",
1 => "horas",
);
$a->strings["__ctx:relative_date__ minute"] = array(
0 => "minuto",
1 => "minutos",
);
$a->strings["__ctx:relative_date__ second"] = array(
0 => "segundo",
1 => "segundos",
);
$a->strings["%1\$s's birthday"] = "Cumpleaños de %1\$s";
$a->strings["Happy Birthday %1\$s"] = "Feliz cumpleaños %1\$s";
$a->strings["Invalid data packet"] = "Paquete de datos no válido";
$a->strings["Unable to verify channel signature"] = "No ha sido posible de verificar la firma del canal";
$a->strings["Unable to verify site signature for %s"] = "No ha sido posible de verificar la firma del sitio para %s";
@ -614,6 +578,7 @@ $a->strings["For Administrators"] = "Para los administradores";
$a->strings["For Developers"] = "Para los desarrolladores";
$a->strings["Site"] = "Sitio";
$a->strings["Accounts"] = "Cuentas";
$a->strings["Member registrations waiting for confirmation"] = "Inscripciones en espera de aprobación";
$a->strings["Channels"] = "Canales";
$a->strings["Security"] = "Seguridad";
$a->strings["Plugins"] = "Extensiones";
@ -623,7 +588,6 @@ $a->strings["Profile Fields"] = "Campos del perfil";
$a->strings["DB updates"] = "Actualizaciones de la base de datos";
$a->strings["Logs"] = "Informes";
$a->strings["Plugin Features"] = "Extensiones";
$a->strings["User registrations waiting for confirmation"] = "Registros de usuarios pendientes de confirmación";
$a->strings["View Photo"] = "Ver foto";
$a->strings["Edit Album"] = "Editar álbum";
$a->strings["prev"] = "anterior";
@ -731,61 +695,44 @@ $a->strings["Name:"] = "Nombre:";
$a->strings["Photo:"] = "Foto:";
$a->strings["Please visit %s to approve or reject the suggestion."] = "Por favor, visite %s para aprobar o rechazar la sugerencia.";
$a->strings["[Hubzilla:Notify]"] = "[Hubzilla:Aviso]";
$a->strings["Unable to obtain identity information from database"] = "No ha sido posible obtener información sobre la identidad desde la base de datos";
$a->strings["Empty name"] = "Nombre vacío";
$a->strings["Name too long"] = "Nombre demasiado largo";
$a->strings["No account identifier"] = "Ningún identificador de la cuenta";
$a->strings["Nickname is required."] = "Se requiere un sobrenombre (alias).";
$a->strings["Reserved nickname. Please choose another."] = "Sobrenombre en uso. Por favor, elija otro.";
$a->strings["Nickname has unsupported characters or is already being used on this site."] = "El alias contiene caracteres no admitidos o está ya en uso por otros usuarios de este sitio.";
$a->strings["Unable to retrieve created identity"] = "No ha sido posible recuperar la identidad creada";
$a->strings["Default Profile"] = "Perfil principal";
$a->strings["Requested channel is not available."] = "El canal solicitado no está disponible.";
$a->strings["Requested profile is not available."] = "El perfil solicitado no está disponible.";
$a->strings["Change profile photo"] = "Cambiar la foto del perfil";
$a->strings["Create New Profile"] = "Crear un nuevo perfil";
$a->strings["Profile Image"] = "Imagen del perfil";
$a->strings["Visible to everybody"] = "Visible para todos";
$a->strings["Edit visibility"] = "Editar visibilidad";
$a->strings["Gender:"] = "Género:";
$a->strings["Status:"] = "Estado:";
$a->strings["Homepage:"] = "Página personal:";
$a->strings["Online Now"] = "Ahora en línea";
$a->strings["g A l F d"] = "g A l d F";
$a->strings["F d"] = "d F";
$a->strings["[today]"] = "[hoy]";
$a->strings["Birthday Reminders"] = "Recordatorios de cumpleaños";
$a->strings["Birthdays this week:"] = "Cumpleaños de esta semana:";
$a->strings["[No description]"] = "[Sin descripción]";
$a->strings["Event Reminders"] = "Recordatorios de eventos";
$a->strings["Events this week:"] = "Eventos de esta semana:";
$a->strings["Full Name:"] = "Nombre completo:";
$a->strings["Like this channel"] = "Me gusta este canal";
$a->strings["j F, Y"] = "j F Y";
$a->strings["j F"] = "j F";
$a->strings["Birthday:"] = "Cumpleaños:";
$a->strings["Age:"] = "Edad:";
$a->strings["for %1\$d %2\$s"] = "por %1\$d %2\$s";
$a->strings["Sexual Preference:"] = "Orientación sexual:";
$a->strings["Hometown:"] = "Lugar de nacimiento:";
$a->strings["Tags:"] = "Etiquetas:";
$a->strings["Political Views:"] = "Posición política:";
$a->strings["Religion:"] = "Religión:";
$a->strings["About:"] = "Sobre mí:";
$a->strings["Hobbies/Interests:"] = "Aficciones/Intereses:";
$a->strings["Likes:"] = "Me gusta:";
$a->strings["Dislikes:"] = "No me gusta:";
$a->strings["Contact information and Social Networks:"] = "Información de contacto y redes sociales:";
$a->strings["My other channels:"] = "Mis otros canales:";
$a->strings["Musical interests:"] = "Intereses musicales:";
$a->strings["Books, literature:"] = "Libros, literatura:";
$a->strings["Television:"] = "Televisión:";
$a->strings["Film/dance/culture/entertainment:"] = "Cine/danza/cultura/entretenimiento:";
$a->strings["Love/Romance:"] = "Vida sentimental/amorosa:";
$a->strings["Work/employment:"] = "Trabajo:";
$a->strings["School/education:"] = "Estudios:";
$a->strings["Like this thing"] = "Me gusta esto";
$a->strings["cover photo"] = "Imagen de portada del perfil";
$a->strings["Miscellaneous"] = "Varios";
$a->strings["Birthday"] = "Cumpleaños";
$a->strings["Age: "] = "Edad:";
$a->strings["YYYY-MM-DD or MM-DD"] = "AAAA-MM-DD o MM-DD";
$a->strings["Required"] = "Obligatorio";
$a->strings["never"] = "nunca";
$a->strings["less than a second ago"] = "hace un instante";
$a->strings["__ctx:e.g. 22 hours ago, 1 minute ago__ %1\$d %2\$s ago"] = "hace %1\$d %2\$s";
$a->strings["__ctx:relative_date__ year"] = array(
0 => "año",
1 => "años",
);
$a->strings["__ctx:relative_date__ month"] = array(
0 => "mes",
1 => "meses",
);
$a->strings["__ctx:relative_date__ week"] = array(
0 => "semana",
1 => "semanas",
);
$a->strings["__ctx:relative_date__ day"] = array(
0 => "día",
1 => "días",
);
$a->strings["__ctx:relative_date__ hour"] = array(
0 => "hora",
1 => "horas",
);
$a->strings["__ctx:relative_date__ minute"] = array(
0 => "minuto",
1 => "minutos",
);
$a->strings["__ctx:relative_date__ second"] = array(
0 => "segundo",
1 => "segundos",
);
$a->strings["%1\$s's birthday"] = "Cumpleaños de %1\$s";
$a->strings["Happy Birthday %1\$s"] = "Feliz cumpleaños %1\$s";
$a->strings["Embedded content"] = "Contenido incorporado";
$a->strings["Embedding disabled"] = "Incrustación deshabilitada";
$a->strings["channel"] = "el canal";
@ -1024,6 +971,61 @@ $a->strings["male"] = "hombre";
$a->strings["%1\$s updated his %2\$s"] = "%1\$s ha actualizado su %2\$s";
$a->strings["%1\$s updated their %2\$s"] = "%1\$s ha actualizado su %2\$s";
$a->strings["profile photo"] = "foto del perfil";
$a->strings["Unable to obtain identity information from database"] = "No ha sido posible obtener información sobre la identidad desde la base de datos";
$a->strings["Empty name"] = "Nombre vacío";
$a->strings["Name too long"] = "Nombre demasiado largo";
$a->strings["No account identifier"] = "Ningún identificador de la cuenta";
$a->strings["Nickname is required."] = "Se requiere un sobrenombre (alias).";
$a->strings["Reserved nickname. Please choose another."] = "Sobrenombre en uso. Por favor, elija otro.";
$a->strings["Nickname has unsupported characters or is already being used on this site."] = "El alias contiene caracteres no admitidos o está ya en uso por otros usuarios de este sitio.";
$a->strings["Unable to retrieve created identity"] = "No ha sido posible recuperar la identidad creada";
$a->strings["Default Profile"] = "Perfil principal";
$a->strings["Requested channel is not available."] = "El canal solicitado no está disponible.";
$a->strings["Requested profile is not available."] = "El perfil solicitado no está disponible.";
$a->strings["Change profile photo"] = "Cambiar la foto del perfil";
$a->strings["Create New Profile"] = "Crear un nuevo perfil";
$a->strings["Profile Image"] = "Imagen del perfil";
$a->strings["Visible to everybody"] = "Visible para todos";
$a->strings["Edit visibility"] = "Editar visibilidad";
$a->strings["Gender:"] = "Género:";
$a->strings["Status:"] = "Estado:";
$a->strings["Homepage:"] = "Página personal:";
$a->strings["Online Now"] = "Ahora en línea";
$a->strings["g A l F d"] = "g A l d F";
$a->strings["F d"] = "d F";
$a->strings["[today]"] = "[hoy]";
$a->strings["Birthday Reminders"] = "Recordatorios de cumpleaños";
$a->strings["Birthdays this week:"] = "Cumpleaños de esta semana:";
$a->strings["[No description]"] = "[Sin descripción]";
$a->strings["Event Reminders"] = "Recordatorios de eventos";
$a->strings["Events this week:"] = "Eventos de esta semana:";
$a->strings["Full Name:"] = "Nombre completo:";
$a->strings["Like this channel"] = "Me gusta este canal";
$a->strings["j F, Y"] = "j F Y";
$a->strings["j F"] = "j F";
$a->strings["Birthday:"] = "Cumpleaños:";
$a->strings["Age:"] = "Edad:";
$a->strings["for %1\$d %2\$s"] = "por %1\$d %2\$s";
$a->strings["Sexual Preference:"] = "Orientación sexual:";
$a->strings["Hometown:"] = "Lugar de nacimiento:";
$a->strings["Tags:"] = "Etiquetas:";
$a->strings["Political Views:"] = "Posición política:";
$a->strings["Religion:"] = "Religión:";
$a->strings["About:"] = "Sobre mí:";
$a->strings["Hobbies/Interests:"] = "Aficciones/Intereses:";
$a->strings["Likes:"] = "Me gusta:";
$a->strings["Dislikes:"] = "No me gusta:";
$a->strings["Contact information and Social Networks:"] = "Información de contacto y redes sociales:";
$a->strings["My other channels:"] = "Mis otros canales:";
$a->strings["Musical interests:"] = "Intereses musicales:";
$a->strings["Books, literature:"] = "Libros, literatura:";
$a->strings["Television:"] = "Televisión:";
$a->strings["Film/dance/culture/entertainment:"] = "Cine/danza/cultura/entretenimiento:";
$a->strings["Love/Romance:"] = "Vida sentimental/amorosa:";
$a->strings["Work/employment:"] = "Trabajo:";
$a->strings["School/education:"] = "Estudios:";
$a->strings["Like this thing"] = "Me gusta esto";
$a->strings["cover photo"] = "Imagen de portada del perfil";
$a->strings["Some blurb about what to do when you're new here"] = "Algunas propuestas para el nuevo usuario sobre qué se puede hacer aquí";
$a->strings["network"] = "red";
$a->strings["RSS"] = "RSS";
@ -1800,50 +1802,48 @@ $a->strings["Sexual Preference"] = "Preferencia sexual";
$a->strings["Homepage"] = "Página personal";
$a->strings["Interests"] = "Intereses";
$a->strings["Profile updated."] = "Perfil actualizado.";
$a->strings["Hide your contact/friend list from viewers of this profile?"] = "¿Ocultar su lista de contactos a los visitantes de este perfil?";
$a->strings["Hide your connections list from viewers of this profile"] = "Ocultar la lista de conexiones a los visitantes del perfil";
$a->strings["Edit Profile Details"] = "Modificar los detalles de este perfil";
$a->strings["View this profile"] = "Ver este perfil";
$a->strings["Change Cover Photo"] = "Cambiar la imagen de portada del perfil";
$a->strings["Change Profile Photo"] = "Cambiar la foto del perfil";
$a->strings["Change cover photo"] = "Cambiar la imagen de portada del perfil";
$a->strings["Create a new profile using these settings"] = "Crear un nuevo perfil usando estos ajustes";
$a->strings["Clone this profile"] = "Clonar este perfil";
$a->strings["Delete this profile"] = "Eliminar este perfil";
$a->strings["Add profile things"] = "Añadir cosas al perfil";
$a->strings["Relation"] = "Relación";
$a->strings["Import profile from file"] = "Importar perfil desde un fichero";
$a->strings["Export profile to file"] = "Exportar perfil a un fichero";
$a->strings["Profile Name"] = "Nombre del perfil";
$a->strings["Your Full Name"] = "Nombre completo";
$a->strings["Your gender"] = "Género";
$a->strings["Marital status"] = "Estado civil";
$a->strings["Sexual preference"] = "Preferencia sexual";
$a->strings["Profile name"] = "Nombre del perfil";
$a->strings["This is your default profile."] = "Este es su perfil principal.";
$a->strings["Your full name"] = "Nombre completo";
$a->strings["Title/Description"] = "Título o descripción";
$a->strings["Your Gender"] = "Género";
$a->strings["Birthday"] = "Cumpleaños";
$a->strings["Street Address"] = "Dirección";
$a->strings["Street address"] = "Dirección";
$a->strings["Locality/City"] = "Ciudad";
$a->strings["Postal/Zip Code"] = "Código postal";
$a->strings["Country"] = "País";
$a->strings["Region/State"] = "Región o Estado";
$a->strings["<span class=\"heart\">&hearts;</span> Marital Status"] = "<span class=\"heart\">&hearts;</span> Estado sentimental";
$a->strings["Postal/Zip code"] = "Código postal";
$a->strings["Country"] = "País";
$a->strings["Who (if applicable)"] = "Quién (si es aplicable)";
$a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Por ejemplo: ana123, María González, sara@ejemplo.com";
$a->strings["Since [date]"] = "Desde [fecha]";
$a->strings["Since (date)"] = "Desde (fecha)";
$a->strings["Tell us about yourself"] = "Háblenos de usted";
$a->strings["Hometown"] = "Lugar de nacimiento";
$a->strings["Religious Views"] = "Creencias religiosas";
$a->strings["Political views"] = "Ideas políticas";
$a->strings["Religious views"] = "Creencias religiosas";
$a->strings["Keywords used in directory listings"] = "Palabras clave utilizadas en los listados de directorios";
$a->strings["Example: fishing photography software"] = "Por ejemplo: software de fotografía submarina";
$a->strings["Used in directory listings"] = "Visible en el directorio público del canal";
$a->strings["Tell us about yourself..."] = "Háblenos de usted...";
$a->strings["Hobbies/Interests"] = "Aficiones/Intereses";
$a->strings["Contact information and Social Networks"] = "Información de contacto y redes sociales";
$a->strings["My other channels"] = "Mis otros canales";
$a->strings["Musical interests"] = "Preferencias musicales";
$a->strings["Books, literature"] = "Libros, literatura";
$a->strings["Television"] = "Televisión";
$a->strings["Film/dance/culture/entertainment"] = "Cine/danza/cultura/entretenimiento";
$a->strings["Love/romance"] = "Vida sentimental/amorosa";
$a->strings["Work/employment"] = "Trabajo";
$a->strings["School/education"] = "Estudios";
$a->strings["This is your default profile."] = "Este es su perfil principal.";
$a->strings["Age: "] = "Edad:";
$a->strings["Edit/Manage Profiles"] = "Modificar/gestionar perfiles";
$a->strings["Add profile things"] = "Añadir cosas al perfil";
$a->strings["Include desirable objects in your profile"] = "Añadir objetos interesantes en su perfil";
$a->strings["Film/Dance/Culture/Entertainment"] = "Cine, danza, cultura, entretenimiento";
$a->strings["Hobbies/Interests"] = "Aficiones/Intereses";
$a->strings["Love/Romance"] = "Vida sentimental o amorosa";
$a->strings["School/Education"] = "Estudios";
$a->strings["Contact information and social networks"] = "Información de contacto y redes sociales";
$a->strings["My other channels"] = "Mis otros canales";
$a->strings["Create New"] = "Crear un nuevo perfil";
$a->strings["Invalid profile identifier."] = "Identificador del perfil no válido";
$a->strings["Profile Visibility Editor"] = "Editor de visibilidad del perfil";
$a->strings["Click on a contact to add or remove."] = "Pulsar en un contacto para añadirlo o eliminarlo.";
@ -2167,7 +2167,7 @@ $a->strings["Last background fetch: "] = "Última actualización en segundo plan
$a->strings["Current load average: "] = "Carga media actual:";
$a->strings["Running at web location"] = "Corriendo en el sitio web";
$a->strings["Please visit <a href=\"http://hubzilla.org\">hubzilla.org</a> to learn more about \$Projectname."] = "Por favor, visite <a href=\"http://hubzilla.org\">hubzilla.org</a> para más información sobre \$Projectname.";
$a->strings["Bug reports and issues: please visit"] = "Informes de errores e incidencias: por, favor visite";
$a->strings["Bug reports and issues: please visit"] = "Informes de errores e incidencias: por favor visite";
$a->strings["\$projectname issues"] = "Problemas en \$projectname";
$a->strings["Suggestions, praise, etc. - please email \"redmatrix\" at librelist - dot com"] = "Sugerencias, elogios, etc - por favor, un correo electrónico a \"redmatrix\" en librelist - punto com";
$a->strings["Site Administrators"] = "Administradores del sitio";

File diff suppressed because it is too large Load Diff

View File

@ -398,42 +398,6 @@ $a->strings["__ctx:noun__ Like"] = array(
0 => "Mi piace",
1 => "Mi piace",
);
$a->strings["Miscellaneous"] = "Altro";
$a->strings["YYYY-MM-DD or MM-DD"] = "AAAA-MM-GG oppure MM-GG";
$a->strings["Required"] = "Obbligatorio";
$a->strings["never"] = "mai";
$a->strings["less than a second ago"] = "meno di un secondo fa";
$a->strings["__ctx:e.g. 22 hours ago, 1 minute ago__ %1\$d %2\$s ago"] = "%1\$d %2\$s fa";
$a->strings["__ctx:relative_date__ year"] = array(
0 => "anno",
1 => "anni",
);
$a->strings["__ctx:relative_date__ month"] = array(
0 => "mese",
1 => "mesi",
);
$a->strings["__ctx:relative_date__ week"] = array(
0 => "settimana",
1 => "settimane",
);
$a->strings["__ctx:relative_date__ day"] = array(
0 => "giorno",
1 => "giorni",
);
$a->strings["__ctx:relative_date__ hour"] = array(
0 => "ora",
1 => "ore",
);
$a->strings["__ctx:relative_date__ minute"] = array(
0 => "minuto",
1 => "minuti",
);
$a->strings["__ctx:relative_date__ second"] = array(
0 => "secondo",
1 => "secondi",
);
$a->strings["%1\$s's birthday"] = "Compleanno di %1\$s";
$a->strings["Happy Birthday %1\$s"] = "Buon compleanno %1\$s";
$a->strings["Invalid data packet"] = "Dati ricevuti non validi";
$a->strings["Unable to verify channel signature"] = "Impossibile verificare la firma elettronica del canale";
$a->strings["Unable to verify site signature for %s"] = "Impossibile verificare la firma elettronica del sito %s";
@ -600,6 +564,7 @@ $a->strings["Chat Rooms"] = "Chat";
$a->strings["Bookmarked Chatrooms"] = "Chat nei segnalibri";
$a->strings["Suggested Chatrooms"] = "Chat suggerite";
$a->strings["photo/image"] = "foto/immagine";
$a->strings["Click to show more"] = "Clicca per mostrare tutto";
$a->strings["Rating Tools"] = "Valutazione";
$a->strings["Rate Me"] = "Valutami";
$a->strings["View Ratings"] = "Vedi le valutazioni ricevute";
@ -613,6 +578,7 @@ $a->strings["For Administrators"] = "Per gli amministratori";
$a->strings["For Developers"] = "Per sviluppatori";
$a->strings["Site"] = "Sito";
$a->strings["Accounts"] = "Account";
$a->strings["Member registrations waiting for confirmation"] = "Richieste di registrazione in attesa di conferma";
$a->strings["Channels"] = "Canali";
$a->strings["Security"] = "Sicurezza";
$a->strings["Plugins"] = "Plugin";
@ -622,7 +588,6 @@ $a->strings["Profile Fields"] = "Campi del profilo";
$a->strings["DB updates"] = "Aggiornamenti al DB";
$a->strings["Logs"] = "Log";
$a->strings["Plugin Features"] = "Plugin";
$a->strings["User registrations waiting for confirmation"] = "Registrazioni in attesa";
$a->strings["View Photo"] = "Guarda la foto";
$a->strings["Edit Album"] = "Modifica album";
$a->strings["prev"] = "prec";
@ -634,7 +599,7 @@ $a->strings["newer"] = "più nuovi";
$a->strings["No connections"] = "Nessun contatto";
$a->strings["View all %s connections"] = "Mostra tutti i %s contatti";
$a->strings["poke"] = "poke";
$a->strings["poked"] = "ha ricevuto un poke";
$a->strings["poked"] = "ha mandato un poke";
$a->strings["ping"] = "ping";
$a->strings["pinged"] = "ha effettuato un ping";
$a->strings["prod"] = "spintone";
@ -730,61 +695,44 @@ $a->strings["Name:"] = "Nome:";
$a->strings["Photo:"] = "Foto:";
$a->strings["Please visit %s to approve or reject the suggestion."] = "Visita %s per approvare o rifiutare il suggerimento.";
$a->strings["[Hubzilla:Notify]"] = "[Hubzilla]";
$a->strings["Unable to obtain identity information from database"] = "Impossibile ottenere le informazioni di identificazione dal database";
$a->strings["Empty name"] = "Nome vuoto";
$a->strings["Name too long"] = "Nome troppo lungo";
$a->strings["No account identifier"] = "Account senza identificativo";
$a->strings["Nickname is required."] = "Il nome dell'account è obbligatorio.";
$a->strings["Reserved nickname. Please choose another."] = "Nome utente riservato. Per favore scegline un altro.";
$a->strings["Nickname has unsupported characters or is already being used on this site."] = "Il nome dell'account è già in uso oppure ha dei caratteri non supportati.";
$a->strings["Unable to retrieve created identity"] = "Impossibile caricare l'identità creata";
$a->strings["Default Profile"] = "Profilo predefinito";
$a->strings["Requested channel is not available."] = "Il canale che cerchi non è disponibile.";
$a->strings["Requested profile is not available."] = "Il profilo richiesto non è disponibile.";
$a->strings["Change profile photo"] = "Cambia la foto del profilo";
$a->strings["Create New Profile"] = "Crea un nuovo profilo";
$a->strings["Profile Image"] = "Immagine del profilo";
$a->strings["Visible to everybody"] = "Visibile a tutti";
$a->strings["Edit visibility"] = "Cambia la visibilità";
$a->strings["Gender:"] = "Sesso:";
$a->strings["Status:"] = "Stato:";
$a->strings["Homepage:"] = "Home page:";
$a->strings["Online Now"] = "Online adesso";
$a->strings["g A l F d"] = "g A l d F";
$a->strings["F d"] = "d F";
$a->strings["[today]"] = "[oggi]";
$a->strings["Birthday Reminders"] = "Promemoria compleanni";
$a->strings["Birthdays this week:"] = "Compleanni questa settimana:";
$a->strings["[No description]"] = "[Nessuna descrizione]";
$a->strings["Event Reminders"] = "Promemoria";
$a->strings["Events this week:"] = "Eventi della settimana:";
$a->strings["Full Name:"] = "Nome completo:";
$a->strings["Like this channel"] = "Mi piace questo canale";
$a->strings["j F, Y"] = "j F Y";
$a->strings["j F"] = "j F";
$a->strings["Birthday:"] = "Compleanno:";
$a->strings["Age:"] = "Età:";
$a->strings["for %1\$d %2\$s"] = "per %1\$d %2\$s";
$a->strings["Sexual Preference:"] = "Preferenze sessuali:";
$a->strings["Hometown:"] = "Città dove vivo:";
$a->strings["Tags:"] = "Tag:";
$a->strings["Political Views:"] = "Orientamento politico:";
$a->strings["Religion:"] = "Religione:";
$a->strings["About:"] = "Informazioni:";
$a->strings["Hobbies/Interests:"] = "Interessi e hobby:";
$a->strings["Likes:"] = "Mi piace:";
$a->strings["Dislikes:"] = "Non mi piace:";
$a->strings["Contact information and Social Networks:"] = "Contatti e social network:";
$a->strings["My other channels:"] = "I miei altri canali:";
$a->strings["Musical interests:"] = "Gusti musicali:";
$a->strings["Books, literature:"] = "Libri, letteratura:";
$a->strings["Television:"] = "Televisione:";
$a->strings["Film/dance/culture/entertainment:"] = "Film, danza, cultura, intrattenimento:";
$a->strings["Love/Romance:"] = "Amore:";
$a->strings["Work/employment:"] = "Lavoro:";
$a->strings["School/education:"] = "Scuola:";
$a->strings["Like this thing"] = "Mi piace";
$a->strings["cover photo"] = "Copertina del canale";
$a->strings["Miscellaneous"] = "Altro";
$a->strings["Birthday"] = "Compleanno";
$a->strings["Age: "] = "Età:";
$a->strings["YYYY-MM-DD or MM-DD"] = "AAAA-MM-GG oppure MM-GG";
$a->strings["Required"] = "Obbligatorio";
$a->strings["never"] = "mai";
$a->strings["less than a second ago"] = "meno di un secondo fa";
$a->strings["__ctx:e.g. 22 hours ago, 1 minute ago__ %1\$d %2\$s ago"] = "%1\$d %2\$s fa";
$a->strings["__ctx:relative_date__ year"] = array(
0 => "anno",
1 => "anni",
);
$a->strings["__ctx:relative_date__ month"] = array(
0 => "mese",
1 => "mesi",
);
$a->strings["__ctx:relative_date__ week"] = array(
0 => "settimana",
1 => "settimane",
);
$a->strings["__ctx:relative_date__ day"] = array(
0 => "giorno",
1 => "giorni",
);
$a->strings["__ctx:relative_date__ hour"] = array(
0 => "ora",
1 => "ore",
);
$a->strings["__ctx:relative_date__ minute"] = array(
0 => "minuto",
1 => "minuti",
);
$a->strings["__ctx:relative_date__ second"] = array(
0 => "secondo",
1 => "secondi",
);
$a->strings["%1\$s's birthday"] = "Compleanno di %1\$s";
$a->strings["Happy Birthday %1\$s"] = "Buon compleanno %1\$s";
$a->strings["Embedded content"] = "Contenuti incorporati";
$a->strings["Embedding disabled"] = "Disabilita la creazione di contenuti incorporati";
$a->strings["channel"] = "il canale";
@ -1023,6 +971,61 @@ $a->strings["male"] = "maschio";
$a->strings["%1\$s updated his %2\$s"] = "Aggiornamento: %2\$s di %1\$s";
$a->strings["%1\$s updated their %2\$s"] = "Aggiornamento: %2\$s di %1\$s";
$a->strings["profile photo"] = "foto del profilo";
$a->strings["Unable to obtain identity information from database"] = "Impossibile ottenere le informazioni di identificazione dal database";
$a->strings["Empty name"] = "Nome vuoto";
$a->strings["Name too long"] = "Nome troppo lungo";
$a->strings["No account identifier"] = "Account senza identificativo";
$a->strings["Nickname is required."] = "Il nome dell'account è obbligatorio.";
$a->strings["Reserved nickname. Please choose another."] = "Nome utente riservato. Per favore scegline un altro.";
$a->strings["Nickname has unsupported characters or is already being used on this site."] = "Il nome dell'account è già in uso oppure ha dei caratteri non supportati.";
$a->strings["Unable to retrieve created identity"] = "Impossibile caricare l'identità creata";
$a->strings["Default Profile"] = "Profilo predefinito";
$a->strings["Requested channel is not available."] = "Il canale che cerchi non è disponibile.";
$a->strings["Requested profile is not available."] = "Il profilo richiesto non è disponibile.";
$a->strings["Change profile photo"] = "Cambia la foto del profilo";
$a->strings["Create New Profile"] = "Crea un nuovo profilo";
$a->strings["Profile Image"] = "Immagine del profilo";
$a->strings["Visible to everybody"] = "Visibile a tutti";
$a->strings["Edit visibility"] = "Cambia la visibilità";
$a->strings["Gender:"] = "Sesso:";
$a->strings["Status:"] = "Stato:";
$a->strings["Homepage:"] = "Home page:";
$a->strings["Online Now"] = "Online adesso";
$a->strings["g A l F d"] = "g A l d F";
$a->strings["F d"] = "d F";
$a->strings["[today]"] = "[oggi]";
$a->strings["Birthday Reminders"] = "Promemoria compleanni";
$a->strings["Birthdays this week:"] = "Compleanni questa settimana:";
$a->strings["[No description]"] = "[Nessuna descrizione]";
$a->strings["Event Reminders"] = "Promemoria";
$a->strings["Events this week:"] = "Eventi della settimana:";
$a->strings["Full Name:"] = "Nome completo:";
$a->strings["Like this channel"] = "Mi piace questo canale";
$a->strings["j F, Y"] = "j F Y";
$a->strings["j F"] = "j F";
$a->strings["Birthday:"] = "Compleanno:";
$a->strings["Age:"] = "Età:";
$a->strings["for %1\$d %2\$s"] = "per %1\$d %2\$s";
$a->strings["Sexual Preference:"] = "Preferenze sessuali:";
$a->strings["Hometown:"] = "Città dove vivo:";
$a->strings["Tags:"] = "Tag:";
$a->strings["Political Views:"] = "Orientamento politico:";
$a->strings["Religion:"] = "Religione:";
$a->strings["About:"] = "Informazioni:";
$a->strings["Hobbies/Interests:"] = "Interessi e hobby:";
$a->strings["Likes:"] = "Mi piace:";
$a->strings["Dislikes:"] = "Non mi piace:";
$a->strings["Contact information and Social Networks:"] = "Contatti e social network:";
$a->strings["My other channels:"] = "I miei altri canali:";
$a->strings["Musical interests:"] = "Gusti musicali:";
$a->strings["Books, literature:"] = "Libri, letteratura:";
$a->strings["Television:"] = "Televisione:";
$a->strings["Film/dance/culture/entertainment:"] = "Film, danza, cultura, intrattenimento:";
$a->strings["Love/Romance:"] = "Amore:";
$a->strings["Work/employment:"] = "Lavoro:";
$a->strings["School/education:"] = "Scuola:";
$a->strings["Like this thing"] = "Mi piace";
$a->strings["cover photo"] = "Copertina del canale";
$a->strings["Some blurb about what to do when you're new here"] = "Qualche suggerimento per i nuovi utenti su cosa fare";
$a->strings["network"] = "rete";
$a->strings["RSS"] = "RSS";
@ -1313,7 +1316,6 @@ $a->strings["Nothing to import."] = "Non c'è niente da importare.";
$a->strings["Unable to download data from old server"] = "Impossibile importare i dati dal vecchio hub";
$a->strings["Imported file is empty."] = "Il file da importare è vuoto.";
$a->strings["Warning: Database versions differ by %1\$d updates."] = "Attenzione: le versioni di database differiscono di %1\$d aggiornamenti.";
$a->strings["Server platform is not compatible. Operation not permitted."] = "La tecnologia del server non è compatibile. Operazione non permessa.";
$a->strings["No channel. Import failed."] = "Nessun canale. Import fallito.";
$a->strings["You must be logged in to use this feature."] = "Per questa funzionalità devi aver effettuato l'accesso.";
$a->strings["Import Channel"] = "Importa un canale";
@ -1800,50 +1802,48 @@ $a->strings["Sexual Preference"] = "Preferenze sessuali";
$a->strings["Homepage"] = "Home page";
$a->strings["Interests"] = "Interessi";
$a->strings["Profile updated."] = "Profilo aggiornato.";
$a->strings["Hide your contact/friend list from viewers of this profile?"] = "Nascondi la tua lista di contatti/amici ai visitatori di questo profilo?";
$a->strings["Hide your connections list from viewers of this profile"] = "Nascondi la tua lista di contatti ai visitatori di questo profilo";
$a->strings["Edit Profile Details"] = "Modifica i dettagli del profilo";
$a->strings["View this profile"] = "Guarda questo profilo";
$a->strings["Change Profile Photo"] = "Cambia la foto del profilo";
$a->strings["Change cover photo"] = "Cambia la copertina del canale";
$a->strings["Create a new profile using these settings"] = "Crea un nuovo profilo usando queste impostazioni";
$a->strings["Clone this profile"] = "Clona questo profilo";
$a->strings["Delete this profile"] = "Elimina questo profilo";
$a->strings["Add profile things"] = "Aggiungi oggetti al profilo";
$a->strings["Relation"] = "Relazione";
$a->strings["Import profile from file"] = "Importa il profilo da un file";
$a->strings["Export profile to file"] = "Esporta il profilo in un file";
$a->strings["Profile Name:"] = "Nome del profilo:";
$a->strings["Your Full Name:"] = "Il tuo nome completo:";
$a->strings["Title/Description:"] = "Titolo/descrizione:";
$a->strings["Your Gender:"] = "Sesso:";
$a->strings["Birthday :"] = "Compleanno:";
$a->strings["Street Address:"] = "Indirizzo (via/piazza):";
$a->strings["Locality/City:"] = "Località:";
$a->strings["Postal/Zip Code:"] = "CAP:";
$a->strings["Country:"] = "Nazione:";
$a->strings["Region/State:"] = "Regione/stato:";
$a->strings["<span class=\"heart\">&hearts;</span> Marital Status:"] = "<span class=\"heart\">&hearts;</span> Stato sentimentale:";
$a->strings["Who: (if applicable)"] = "Con chi: (se possibile)";
$a->strings["Your gender"] = "Sesso";
$a->strings["Marital status"] = "Stato civile";
$a->strings["Sexual preference"] = "Preferenze sessuali";
$a->strings["Profile name"] = "Nome del profilo";
$a->strings["This is your default profile."] = "Questo è il tuo profilo predefinito.";
$a->strings["Your full name"] = "Il tuo nome completo";
$a->strings["Title/Description"] = "Titolo/descrizione";
$a->strings["Street address"] = "Indirizzo (via/piazza)";
$a->strings["Locality/City"] = "Località";
$a->strings["Region/State"] = "Regione/stato";
$a->strings["Postal/Zip code"] = "CAP";
$a->strings["Country"] = "Nazione";
$a->strings["Who (if applicable)"] = "Con chi (se possibile)";
$a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Per esempio: cathy123, Cathy Williams, cathy@example.com";
$a->strings["Since [date]:"] = "dal [data]:";
$a->strings["Homepage URL:"] = "Indirizzo home page:";
$a->strings["Religious Views:"] = "Orientamento religioso:";
$a->strings["Keywords:"] = "Parole chiave, tag:";
$a->strings["Since (date)"] = "dal (data)";
$a->strings["Tell us about yourself"] = "Raccontaci di te...";
$a->strings["Hometown"] = "Città dove vivo";
$a->strings["Political views"] = "Orientamento politico";
$a->strings["Religious views"] = "Orientamento religioso";
$a->strings["Keywords used in directory listings"] = "Parole chiavi mostrate nell'elenco dei canali";
$a->strings["Example: fishing photography software"] = "Per esempio: pesca fotografia programmazione";
$a->strings["Used in directory listings"] = "Visibile negli elenchi pubblici di canali";
$a->strings["Tell us about yourself..."] = "Raccontaci di te...";
$a->strings["Hobbies/Interests"] = "Hobby/interessi";
$a->strings["Contact information and Social Networks"] = "Contatti personali e i tuoi social network";
$a->strings["My other channels"] = "I miei altri canali";
$a->strings["Musical interests"] = "Interessi musicali";
$a->strings["Books, literature"] = "Libri, letteratura";
$a->strings["Television"] = "Televisione";
$a->strings["Film/dance/culture/entertainment"] = "Film/danza/cultura/intrattenimento";
$a->strings["Love/romance"] = "Amore";
$a->strings["Work/employment"] = "Lavoro/impiego";
$a->strings["School/education"] = "Scuola/educazione";
$a->strings["This is your default profile."] = "Questo è il tuo profilo predefinito.";
$a->strings["Age: "] = "Età:";
$a->strings["Edit/Manage Profiles"] = "Modifica/gestisci i profili";
$a->strings["Add profile things"] = "Aggiungi oggetti al profilo";
$a->strings["Include desirable objects in your profile"] = "Aggiungi oggetti interessanti al tuo profilo";
$a->strings["Film/Dance/Culture/Entertainment"] = "Film, danza, cultura, intrattenimento";
$a->strings["Hobbies/Interests"] = "Hobby/interessi";
$a->strings["Love/Romance"] = "Amore";
$a->strings["School/Education"] = "Scuola/educazione";
$a->strings["Contact information and social networks"] = "Contatti e social network";
$a->strings["My other channels"] = "I miei altri canali";
$a->strings["Create New"] = "Crea nuovo";
$a->strings["Invalid profile identifier."] = "Indentificativo del profilo non valido.";
$a->strings["Profile Visibility Editor"] = "Modifica la visibilità del profilo";
$a->strings["Click on a contact to add or remove."] = "Clicca su un contatto per aggiungerlo o rimuoverlo.";

View File

@ -121,8 +121,10 @@ ACL.prototype.on_button_show = function(event) {
event.stopImmediatePropagation();
event.stopPropagation();
that.set_allow($(this).parent().attr('id'));
that.on_submit();
if(!$(this).parent().hasClass("grouphide")) {
that.set_allow($(this).parent().attr('id'));
that.on_submit();
}
return false;
};
@ -231,25 +233,29 @@ ACL.prototype.update_view = function() {
}
$(that.group_uids[id]).each(function(i, v) {
if(uclass == "grouphide")
$("#c"+v).removeClass("groupshow");
// we need attr selection here because the id can include an @ (diaspora/friendica xchans)
$('[id="c' + v + '"]').removeClass("groupshow");
if(uclass !== "") {
var cls = $("#c"+v).attr('class');
var cls = $('[id="c' + v + '"]').attr('class');
if( cls === undefined)
return true;
var hiding = cls.indexOf('grouphide');
if(hiding == -1)
$("#c"+v).addClass(uclass);
$('[id="c' + v + '"]').addClass(uclass);
}
});
break;
case "c":
if (that.allow_cid.indexOf(id)>=0){
btshow.removeClass("btn-default").addClass("btn-success");
bthide.removeClass("btn-danger").addClass("btn-default");
if(!$(this).hasClass("grouphide") ) {
btshow.removeClass("btn-default").addClass("btn-success");
bthide.removeClass("btn-danger").addClass("btn-default");
}
}
if (that.deny_cid.indexOf(id)>=0){
btshow.removeClass("btn-success").addClass("btn-default");
bthide.removeClass("btn-default").addClass("btn-danger");
$(this).removeClass("groupshow");
}
}
});
@ -277,7 +283,7 @@ ACL.prototype.populate = function(data) {
$(data.items).each(function(){
html = "<div class='acl-list-item {4} {7} {5}' title='{6}' id='{2}{3}'>"+that.item_tpl+"</div>";
html = html.format(this.photo, this.name, this.type, this.xid, '', this.self, this.link, this.taggable);
if (this.uids !== undefined) that.group_uids[this.id] = this.uids;
if (this.uids !== undefined) that.group_uids[this.xid] = this.uids;
//console.log(html);
that.list_content.append(html);
});
@ -287,4 +293,4 @@ ACL.prototype.populate = function(data) {
$(el).removeAttr("data-src");
});
that.update_view();
};
};

File diff suppressed because it is too large Load Diff

View File

@ -398,42 +398,6 @@ $a->strings["__ctx:noun__ Like"] = array(
0 => "vindt dit leuk",
1 => "vinden dit leuk",
);
$a->strings["Miscellaneous"] = "Diversen";
$a->strings["YYYY-MM-DD or MM-DD"] = "JJJJ-MM-DD of MM-DD";
$a->strings["Required"] = "Vereist";
$a->strings["never"] = "nooit";
$a->strings["less than a second ago"] = "minder dan een seconde geleden";
$a->strings["__ctx:e.g. 22 hours ago, 1 minute ago__ %1\$d %2\$s ago"] = "%1\$d %2\$s geleden";
$a->strings["__ctx:relative_date__ year"] = array(
0 => "jaar",
1 => "jaren",
);
$a->strings["__ctx:relative_date__ month"] = array(
0 => "maand",
1 => "maanden",
);
$a->strings["__ctx:relative_date__ week"] = array(
0 => "week",
1 => "weken",
);
$a->strings["__ctx:relative_date__ day"] = array(
0 => "dag",
1 => "dagen",
);
$a->strings["__ctx:relative_date__ hour"] = array(
0 => "uur",
1 => "uren",
);
$a->strings["__ctx:relative_date__ minute"] = array(
0 => "minuut",
1 => "minuten",
);
$a->strings["__ctx:relative_date__ second"] = array(
0 => "seconde",
1 => "seconden",
);
$a->strings["%1\$s's birthday"] = "Verjaardag van %1\$s";
$a->strings["Happy Birthday %1\$s"] = "Gefeliciteerd met je verjaardag %1\$s";
$a->strings["Invalid data packet"] = "Datapakket ongeldig";
$a->strings["Unable to verify channel signature"] = "Kanaalkenmerk kon niet worden geverifieerd. ";
$a->strings["Unable to verify site signature for %s"] = "Hubkenmerk voor %s kon niet worden geverifieerd";
@ -614,6 +578,7 @@ $a->strings["For Administrators"] = "Voor beheerders";
$a->strings["For Developers"] = "Voor ontwikkelaars";
$a->strings["Site"] = "Hub-instellingen";
$a->strings["Accounts"] = "Accounts";
$a->strings["Member registrations waiting for confirmation"] = "Accounts die op goedkeuring wachten";
$a->strings["Channels"] = "Kanalen";
$a->strings["Security"] = "Beveiliging";
$a->strings["Plugins"] = "Plugins";
@ -623,7 +588,6 @@ $a->strings["Profile Fields"] = "Profielvelden";
$a->strings["DB updates"] = "Database-updates";
$a->strings["Logs"] = "Logboeken";
$a->strings["Plugin Features"] = "Plugin-opties";
$a->strings["User registrations waiting for confirmation"] = "Accounts die op goedkeuring wachten";
$a->strings["View Photo"] = "Foto weergeven";
$a->strings["Edit Album"] = "Album bewerken";
$a->strings["prev"] = "vorige";
@ -731,61 +695,44 @@ $a->strings["Name:"] = "Naam:";
$a->strings["Photo:"] = "Foto:";
$a->strings["Please visit %s to approve or reject the suggestion."] = "Bezoek %s om het voorstel te accepteren of af te wijzen.";
$a->strings["[Hubzilla:Notify]"] = "[Hubzilla:Notificatie]";
$a->strings["Unable to obtain identity information from database"] = "Niet in staat om identiteitsinformatie uit de database te verkrijgen";
$a->strings["Empty name"] = "Ontbrekende naam";
$a->strings["Name too long"] = "Naam te lang";
$a->strings["No account identifier"] = "Geen account-identificator";
$a->strings["Nickname is required."] = "Bijnaam is verplicht";
$a->strings["Reserved nickname. Please choose another."] = "Deze naam is gereserveerd. Kies een andere.";
$a->strings["Nickname has unsupported characters or is already being used on this site."] = "Deze naam heeft niet ondersteunde karakters of is al op deze hub in gebruik.";
$a->strings["Unable to retrieve created identity"] = "Niet in staat om aangemaakte identiteit te vinden";
$a->strings["Default Profile"] = "Standaardprofiel";
$a->strings["Requested channel is not available."] = "Opgevraagd kanaal is niet beschikbaar.";
$a->strings["Requested profile is not available."] = "Opgevraagd profiel is niet beschikbaar";
$a->strings["Change profile photo"] = "Profielfoto veranderen";
$a->strings["Create New Profile"] = "Nieuw profiel aanmaken";
$a->strings["Profile Image"] = "Profielfoto";
$a->strings["Visible to everybody"] = "Voor iedereen zichtbaar";
$a->strings["Edit visibility"] = "Zichtbaarheid bewerken";
$a->strings["Gender:"] = "Geslacht:";
$a->strings["Status:"] = "Status:";
$a->strings["Homepage:"] = "Homepagina:";
$a->strings["Online Now"] = "Nu online";
$a->strings["g A l F d"] = "G:i, l d F";
$a->strings["F d"] = "d F";
$a->strings["[today]"] = "[vandaag]";
$a->strings["Birthday Reminders"] = "Verjaardagsherinneringen";
$a->strings["Birthdays this week:"] = "Verjaardagen deze week:";
$a->strings["[No description]"] = "[Geen omschrijving]";
$a->strings["Event Reminders"] = "Herinneringen";
$a->strings["Events this week:"] = "Gebeurtenissen deze week:";
$a->strings["Full Name:"] = "Volledige naam:";
$a->strings["Like this channel"] = "Vind dit kanaal leuk";
$a->strings["j F, Y"] = "F j Y";
$a->strings["j F"] = "F j";
$a->strings["Birthday:"] = "Geboortedatum:";
$a->strings["Age:"] = "Leeftijd:";
$a->strings["for %1\$d %2\$s"] = "voor %1\$d %2\$s";
$a->strings["Sexual Preference:"] = "Seksuele voorkeur:";
$a->strings["Hometown:"] = "Oorspronkelijk uit:";
$a->strings["Tags:"] = "Tags:";
$a->strings["Political Views:"] = "Politieke overtuigingen:";
$a->strings["Religion:"] = "Religie:";
$a->strings["About:"] = "Over:";
$a->strings["Hobbies/Interests:"] = "Hobby's/interesses:";
$a->strings["Likes:"] = "Houdt van:";
$a->strings["Dislikes:"] = "Houdt niet van:";
$a->strings["Contact information and Social Networks:"] = "Contactinformatie en sociale netwerken:";
$a->strings["My other channels:"] = "Mijn andere kanalen";
$a->strings["Musical interests:"] = "Muzikale interesses:";
$a->strings["Books, literature:"] = "Boeken, literatuur:";
$a->strings["Television:"] = "Televisie:";
$a->strings["Film/dance/culture/entertainment:"] = "Films/dansen/cultuur/vermaak:";
$a->strings["Love/Romance:"] = "Liefde/romantiek:";
$a->strings["Work/employment:"] = "Werk/beroep:";
$a->strings["School/education:"] = "School/opleiding:";
$a->strings["Like this thing"] = "Vind dit ding leuk";
$a->strings["cover photo"] = "omslagfoto";
$a->strings["Miscellaneous"] = "Diversen";
$a->strings["Birthday"] = "Verjaardag of geboortedatum";
$a->strings["Age: "] = "Leeftijd:";
$a->strings["YYYY-MM-DD or MM-DD"] = "JJJJ-MM-DD of MM-DD";
$a->strings["Required"] = "Vereist";
$a->strings["never"] = "nooit";
$a->strings["less than a second ago"] = "minder dan een seconde geleden";
$a->strings["__ctx:e.g. 22 hours ago, 1 minute ago__ %1\$d %2\$s ago"] = "%1\$d %2\$s geleden";
$a->strings["__ctx:relative_date__ year"] = array(
0 => "jaar",
1 => "jaren",
);
$a->strings["__ctx:relative_date__ month"] = array(
0 => "maand",
1 => "maanden",
);
$a->strings["__ctx:relative_date__ week"] = array(
0 => "week",
1 => "weken",
);
$a->strings["__ctx:relative_date__ day"] = array(
0 => "dag",
1 => "dagen",
);
$a->strings["__ctx:relative_date__ hour"] = array(
0 => "uur",
1 => "uren",
);
$a->strings["__ctx:relative_date__ minute"] = array(
0 => "minuut",
1 => "minuten",
);
$a->strings["__ctx:relative_date__ second"] = array(
0 => "seconde",
1 => "seconden",
);
$a->strings["%1\$s's birthday"] = "Verjaardag van %1\$s";
$a->strings["Happy Birthday %1\$s"] = "Gefeliciteerd met je verjaardag %1\$s";
$a->strings["Embedded content"] = "Ingesloten (embedded) inhoud";
$a->strings["Embedding disabled"] = "Insluiten (embedding) uitgeschakeld";
$a->strings["channel"] = "kanaal";
@ -1024,6 +971,61 @@ $a->strings["male"] = "man";
$a->strings["%1\$s updated his %2\$s"] = "%1\$s heeft zijn %2\$s bijgewerkt";
$a->strings["%1\$s updated their %2\$s"] = "De %2\$s van %1\$s is bijgewerkt";
$a->strings["profile photo"] = "profielfoto";
$a->strings["Unable to obtain identity information from database"] = "Niet in staat om identiteitsinformatie uit de database te verkrijgen";
$a->strings["Empty name"] = "Ontbrekende naam";
$a->strings["Name too long"] = "Naam te lang";
$a->strings["No account identifier"] = "Geen account-identificator";
$a->strings["Nickname is required."] = "Bijnaam is verplicht";
$a->strings["Reserved nickname. Please choose another."] = "Deze naam is gereserveerd. Kies een andere.";
$a->strings["Nickname has unsupported characters or is already being used on this site."] = "Deze naam heeft niet ondersteunde karakters of is al op deze hub in gebruik.";
$a->strings["Unable to retrieve created identity"] = "Niet in staat om aangemaakte identiteit te vinden";
$a->strings["Default Profile"] = "Standaardprofiel";
$a->strings["Requested channel is not available."] = "Opgevraagd kanaal is niet beschikbaar.";
$a->strings["Requested profile is not available."] = "Opgevraagd profiel is niet beschikbaar";
$a->strings["Change profile photo"] = "Profielfoto veranderen";
$a->strings["Create New Profile"] = "Nieuw profiel aanmaken";
$a->strings["Profile Image"] = "Profielfoto";
$a->strings["Visible to everybody"] = "Voor iedereen zichtbaar";
$a->strings["Edit visibility"] = "Zichtbaarheid bewerken";
$a->strings["Gender:"] = "Geslacht:";
$a->strings["Status:"] = "Status:";
$a->strings["Homepage:"] = "Homepagina:";
$a->strings["Online Now"] = "Nu online";
$a->strings["g A l F d"] = "G:i, l d F";
$a->strings["F d"] = "d F";
$a->strings["[today]"] = "[vandaag]";
$a->strings["Birthday Reminders"] = "Verjaardagsherinneringen";
$a->strings["Birthdays this week:"] = "Verjaardagen deze week:";
$a->strings["[No description]"] = "[Geen omschrijving]";
$a->strings["Event Reminders"] = "Herinneringen";
$a->strings["Events this week:"] = "Gebeurtenissen deze week:";
$a->strings["Full Name:"] = "Volledige naam:";
$a->strings["Like this channel"] = "Vind dit kanaal leuk";
$a->strings["j F, Y"] = "F j Y";
$a->strings["j F"] = "F j";
$a->strings["Birthday:"] = "Geboortedatum:";
$a->strings["Age:"] = "Leeftijd:";
$a->strings["for %1\$d %2\$s"] = "voor %1\$d %2\$s";
$a->strings["Sexual Preference:"] = "Seksuele voorkeur:";
$a->strings["Hometown:"] = "Oorspronkelijk uit:";
$a->strings["Tags:"] = "Tags:";
$a->strings["Political Views:"] = "Politieke overtuigingen:";
$a->strings["Religion:"] = "Religie:";
$a->strings["About:"] = "Over:";
$a->strings["Hobbies/Interests:"] = "Hobby's/interesses:";
$a->strings["Likes:"] = "Houdt van:";
$a->strings["Dislikes:"] = "Houdt niet van:";
$a->strings["Contact information and Social Networks:"] = "Contactinformatie en sociale netwerken:";
$a->strings["My other channels:"] = "Mijn andere kanalen";
$a->strings["Musical interests:"] = "Muzikale interesses:";
$a->strings["Books, literature:"] = "Boeken, literatuur:";
$a->strings["Television:"] = "Televisie:";
$a->strings["Film/dance/culture/entertainment:"] = "Films/dansen/cultuur/vermaak:";
$a->strings["Love/Romance:"] = "Liefde/romantiek:";
$a->strings["Work/employment:"] = "Werk/beroep:";
$a->strings["School/education:"] = "School/opleiding:";
$a->strings["Like this thing"] = "Vind dit ding leuk";
$a->strings["cover photo"] = "omslagfoto";
$a->strings["Some blurb about what to do when you're new here"] = "Welkom op \$Projectname. Klik op de tab ontdekken of klik rechtsboven op de <a href=\"directory\">kanalengids</a>, om kanalen te vinden. Rechtsboven vind je ook <a href=\"directory\">apps</a>, waar je vrijwel alle functies van \$Projectname kunt vinden. Voor <a href=\"directory\">hulp</a> met \$Projectname klik je op het vraagteken.";
$a->strings["network"] = "netwerk";
$a->strings["RSS"] = "RSS";
@ -1800,50 +1802,48 @@ $a->strings["Sexual Preference"] = "Seksuele voorkeur";
$a->strings["Homepage"] = "Homepage";
$a->strings["Interests"] = "Interesses";
$a->strings["Profile updated."] = "Profiel bijgewerkt";
$a->strings["Hide your contact/friend list from viewers of this profile?"] = "Laat de lijst met connecties niet aan bezoekers van dit profiel zien.";
$a->strings["Hide your connections list from viewers of this profile"] = "Laat de lijst met connecties niet aan bezoekers van dit profiel zien.";
$a->strings["Edit Profile Details"] = "Profiel bewerken";
$a->strings["View this profile"] = "Profiel weergeven";
$a->strings["Change Cover Photo"] = "Omslagfoto wijzigen";
$a->strings["Change Profile Photo"] = "Profielfoto wijzigen";
$a->strings["Change cover photo"] = "Omslagfoto wijzigen";
$a->strings["Create a new profile using these settings"] = "Een nieuw profiel aanmaken met dit profiel als basis";
$a->strings["Clone this profile"] = "Dit profiel klonen";
$a->strings["Delete this profile"] = "Dit profiel verwijderen";
$a->strings["Add profile things"] = "Dingen aan je profiel toevoegen";
$a->strings["Relation"] = "Relatie";
$a->strings["Import profile from file"] = "Profiel vanuit bestand importeren";
$a->strings["Export profile to file"] = "Profiel naar bestand exporteren";
$a->strings["Profile Name"] = "Profielnaam";
$a->strings["Your Full Name"] = "Jouw volledige naam";
$a->strings["Your gender"] = "Jouw geslacht";
$a->strings["Marital status"] = "Burgerlijke staat";
$a->strings["Sexual preference"] = "Seksuele voorkeur";
$a->strings["Profile name"] = "Profielnaam";
$a->strings["This is your default profile."] = "Dit is jouw standaardprofiel";
$a->strings["Your full name"] = "Jouw volledige naam";
$a->strings["Title/Description"] = "Titel/omschrijving";
$a->strings["Your Gender"] = "Jouw geslacht";
$a->strings["Birthday"] = "Verjaardag of geboortedatum";
$a->strings["Street Address"] = "Straat en huisnummer";
$a->strings["Street address"] = "Straat en huisnummer";
$a->strings["Locality/City"] = "Woonplaats";
$a->strings["Postal/Zip Code"] = "Postcode";
$a->strings["Country"] = "Land";
$a->strings["Region/State"] = "Provincie/gewest/deelstaat";
$a->strings["<span class=\"heart\">&hearts;</span> Marital Status"] = "<span class=\"heart\">&hearts;</span> Huwelijkse staat";
$a->strings["Postal/Zip code"] = "Postcode";
$a->strings["Country"] = "Land";
$a->strings["Who (if applicable)"] = "Wie (wanneer van toepassing)";
$a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Voorbeelden: petra123, Petra Jansen, petra@voorbeeld.nl";
$a->strings["Since [date]"] = "Sinds [datum]";
$a->strings["Since (date)"] = "Sinds (datum)";
$a->strings["Tell us about yourself"] = "Vertel ons iets over jezelf";
$a->strings["Hometown"] = "Oorspronkelijk uit";
$a->strings["Religious Views"] = "Religieuze overtuigingen";
$a->strings["Political views"] = "Politieke overtuigingen";
$a->strings["Religious views"] = "Religieuze overtuigingen";
$a->strings["Keywords used in directory listings"] = "Trefwoorden voor in de kanalengids";
$a->strings["Example: fishing photography software"] = "Voorbeeld: muziek, fotografie, software";
$a->strings["Used in directory listings"] = "Wordt in de kanalengids gebruikt";
$a->strings["Tell us about yourself..."] = "Vertel ons iets over jezelf...";
$a->strings["Hobbies/Interests"] = "Hobby's/interesses";
$a->strings["Contact information and Social Networks"] = "Contactinformatie en sociale netwerken";
$a->strings["My other channels"] = "Mijn andere kanalen";
$a->strings["Musical interests"] = "Muzikale interesses";
$a->strings["Books, literature"] = "Boeken/literatuur";
$a->strings["Television"] = "Televisie";
$a->strings["Film/dance/culture/entertainment"] = "Film/dans/cultuur/entertainment";
$a->strings["Love/romance"] = "Liefde/romantiek";
$a->strings["Work/employment"] = "Werk/arbeid";
$a->strings["School/education"] = "School/onderwijs";
$a->strings["This is your default profile."] = "Dit is jouw standaardprofiel";
$a->strings["Age: "] = "Leeftijd:";
$a->strings["Edit/Manage Profiles"] = "Profielen bewerken/beheren";
$a->strings["Add profile things"] = "Dingen aan je profiel toevoegen";
$a->strings["Include desirable objects in your profile"] = "Voeg door jou gewenste dingen aan jouw profiel toe";
$a->strings["Film/Dance/Culture/Entertainment"] = "Film/dans/cultuur/entertainment";
$a->strings["Hobbies/Interests"] = "Hobby's/interesses";
$a->strings["Love/Romance"] = "Liefde/romantiek";
$a->strings["School/Education"] = "School/opleiding";
$a->strings["Contact information and social networks"] = "Contactinformatie en sociale netwerken";
$a->strings["My other channels"] = "Mijn andere kanalen";
$a->strings["Create New"] = "Nieuwe aanmaken";
$a->strings["Invalid profile identifier."] = "Ongeldige profiel-identificator";
$a->strings["Profile Visibility Editor"] = "Zichtbaarheid profiel ";
$a->strings["Click on a contact to add or remove."] = "Klik op een connectie om deze toe te voegen of te verwijderen";

View File

@ -915,7 +915,15 @@ a.rconnect:hover, a.rateme:hover, div.rateme:hover {
border-radius: $radiuspx;
}
.acl-list-item img{
.acl-list-item.grouphide {
border: 1px solid red;
}
.acl-list-item.groupshow {
border: 1px solid green;
}
.acl-list-item img {
width: 40px;
height: 40px;
float: left;

View File

@ -15,14 +15,11 @@
<div class="clear"></div>
</div>
{{/if}}
<div id="acl-wrapper">
<button id="acl-showall" class="btn btn-block btn-default"><i class="icon-globe"></i> {{$showall}}</button>
<input type="text" id="acl-search" placeholder="&#xf002;">
<div id="acl-list">
<div id="acl-list-content"></div>
</div>
<span id="acl-fields"></span>
</div>

View File

@ -5,7 +5,7 @@
$("nav").bind('nav-update', function(e,data){
var elm = $('#pending-update');
var register = $(data).find('register').text();
if (register=="0") { reigster=""; elm.hide();} else { elm.show(); }
if (register=="0") { register=""; elm.hide();} else { elm.show(); }
elm.html(register);
});
});
@ -13,16 +13,9 @@
<div class="widget">
<h3>{{$admtxt}}</h3>
<ul class="nav nav-pills nav-stacked">
<li><a href='{{$admin.site.0}}'>{{$admin.site.1}}</a></li>
<li><a href='{{$admin.users.0}}'>{{$admin.users.1}}<span id='pending-update' title='{{$h_pending}}'></span></a></li>
<li><a href='{{$admin.channels.0}}'>{{$admin.channels.1}}</a></li>
<li><a href='{{$admin.security.0}}'>{{$admin.security.1}}</a></li>
<li><a href='{{$admin.queue.0}}'>{{$admin.queue.1}}</a></li>
<li><a href='{{$admin.plugins.0}}'>{{$admin.plugins.1}}</a></li>
<li><a href='{{$admin.themes.0}}'>{{$admin.themes.1}}</a></li>
<li><a href='{{$admin.features.0}}'>{{$admin.features.1}}</a></li>
<li><a href='{{$admin.profs.0}}'>{{$admin.profs.1}}</a></li>
<li><a href='{{$admin.dbsync.0}}'>{{$admin.dbsync.1}}</a></li>
{{foreach $admin as $link}}
<li><a href='{{$link.0}}'>{{$link.1}}{{if $link.3}}<span id='{{$link.3}}' title='{{$link.4}}'></span>{{/if}}</a></li>
{{/foreach}}
</ul>
</div>
@ -34,11 +27,11 @@
{{/if}}
{{if $admin.plugins_admin}}
{{if $plugins}}
<div class="widget">
<h3>{{$plugadmtxt}}</h3>
<ul class="nav nav-pills nav-stacked">
{{foreach $admin.plugins_admin as $l}}
{{foreach $plugins as $l}}
<li><a href='{{$l.0}}'>{{$l.1}}</a></li>
{{/foreach}}
</ul>
@ -48,6 +41,6 @@
<div class="widget">
<h3>{{$logtxt}}</h3>
<ul class="nav nav-pills nav-stacked">
<li><a href='{{$admin.logs.0}}'>{{$admin.logs.1}}</a></li>
<li><a href='{{$logs.0}}'>{{$logs.1}}</a></li>
</ul>
</div>

View File

@ -1,12 +1,53 @@
<div class='channel-selection {{if $selected == $channel.channel_id}}selected-channel{{/if}}'>
{{if $channel.default_links}}
{{if $channel.default}}
<div class="channel-selection-default default"><i class="icon-check"></i> {{$msg_default}}</div>
{{else}}
<div class="channel-selection-default"><a href="manage/{{$channel.channel_id}}/default"><i class="icon-check-empty" title="{{$msg_make_default}}"></i></a></div>
{{/if}}
{{/if}}
<a href="{{$channel.link}}" class="channel-selection-photo-link" title="{{$channel.channel_name}}"><img class="channel-photo" src="{{$channel.xchan_photo_m}}" alt="{{$channel.channel_name}}" /></a>
<div class="channels-notifications-wrapper">{{if $channel.delegate}}{{else}}<a href='manage/{{$channel.channel_id}}/message' style="{{if $channel.mail != 0}}color:#c60032;{{/if}}" title='{{$channel.mail|string_format:$mail_format}}'><i class="icon-envelope"></i> {{$channel.mail}}</a>&nbsp;<a href='manage/{{$channel.channel_id}}/connections/ifpending' style="{{if $channel.intros != 0}}color:#c60032;{{/if}}" title='{{$channel.intros|string_format:$intros_format}}'><i class="icon-user"></i> {{$channel.intros}}</a>{{/if}}</div>
<a href="{{$channel.link}}" class="channel-selection-name-link" title="{{$channel.channel_name}}"><div class="channel-name">{{$channel.channel_name}}</div></a>
<div class="section-subtitle-wrapper">
<div class="pull-right">
{{if $channel.default_links}}
{{if $channel.default}}
<div>
<i class="icon-check"></i>&nbsp;{{$msg_default}}
</div>
{{else}}
<a href="manage/{{$channel.channel_id}}/default" class="make-default-link">
<i class="icon-check-empty"></i>&nbsp;{{$msg_make_default}}
</a>
{{/if}}
{{/if}}
{{if $channel.delegate}}
{{$delegated_desc}}
{{/if}}
</div>
<h3>
{{if $selected == $channel.channel_id}}
<i class="selected-channel icon-circle" title="{{$msg_selected}}"></i>
{{/if}}
{{if $channel.delegate}}
<i class="icon-circle-arrow-right" title="{{$delegated_desc}}"></i>
{{/if}}
{{if $selected != $channel.channel_id}}<a href="{{$channel.link}}" title="{{$channel.channel_name}}">{{/if}}
{{$channel.channel_name}}
{{if $selected != $channel.channel_id}}</a>{{/if}}
</h3>
<div class="clear"></div>
</div>
<div class="section-content-wrapper">
<div class="channel-photo-wrapper">
{{if $selected != $channel.channel_id}}<a href="{{$channel.link}}" class="channel-selection-photo-link" title="{{$channel.channel_name}}">{{/if}}
<img class="channel-photo" src="{{$channel.xchan_photo_m}}" alt="{{$channel.channel_name}}" />
{{if $selected != $channel.channel_id}}</a>{{/if}}
</div>
<div class="channel-notifications-wrapper">
{{if !$channel.delegate}}
<div class="channel-notification">
<i class="icon-envelope{{if $channel.mail != 0}} new-notification{{/if}}"></i>
{{if $channel.mail != 0}}<a href="manage/{{$channel.channel_id}}/mail/combined">{{/if}}{{$channel.mail|string_format:$mail_format}}{{if $channel.mail != 0}}</a>{{/if}}
</div>
<div class="channel-notification">
<i class="icon-user{{if $channel.intros != 0}} new-notification{{/if}}"></i>
{{if $channel.intros != 0}}<a href='manage/{{$channel.channel_id}}/connections/ifpending'>{{/if}}{{$channel.intros|string_format:$intros_format}}{{if $channel.intros != 0}}</a>{{/if}}
</div>
<div class="channel-link">
<i class="icon-map-marker"></i>
<a href="manage/{{$channel.channel_id}}/locs">{{$locs}}</a>
</div>
{{/if}}
</div>
</div>

View File

@ -1,38 +1,24 @@
<div class="generic-content-wrapper-styled">
<h3>{{$header}}</h3>
{{if $links}}
{{foreach $links as $l}}
<a class="channels-links" href="{{$l.0}}" title="{{$l.1}}">{{$l.2}}</a>
{{/foreach}}
{{/if}}
<div class="channels-break"></div>
{{if $channel_usage_message}}
<div id="channel-usage-message" class="usage-message">
{{$channel_usage_message}}
</div>
{{/if}}
<div id="channels-desc" class="descriptive-text">{{$desc}}</div>
<div id="all-channels">
{{foreach $all_channels as $chn}}
{{include file="channel.tpl" channel=$chn}}
{{/foreach}}
</div>
<div class="channels-end all"></div>
{{if $delegates}}
<hr />
<h3>{{$delegate_header}}</h3>
<div id="delegated-channels">
{{foreach $delegates as $chn}}
{{include file="channel.tpl" channel=$chn}}
{{/foreach}}
</div>
<div class="channels-end all"></div>
{{/if}}
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
<a class="btn btn-success btn-xs pull-right" href="{{$create.0}}" title="{{$create.1}}"><i class="icon-plus-sign"></i>&nbsp;{{$create.2}}</a>
<h2>{{$header}}</h2>
</div>
<div class="section-content-wrapper-np">
{{if $channel_usage_message}}
<div id="channel-usage-message" class="section-content-warning-wrapper">
{{$channel_usage_message}}
</div>
{{/if}}
<div id="channels-desc" class="section-content-info-wrapper">
{{$desc}}
</div>
{{foreach $all_channels as $chn}}
{{include file="channel.tpl" channel=$chn}}
{{/foreach}}
{{if $delegates}}
{{foreach $delegates as $chn}}
{{include file="channel.tpl" channel=$chn}}
{{/foreach}}
{{/if}}
</div>
</div>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<me:env xmlns:me="http://salmon-protocol.org/ns/magic-env">
<me:data type="application/atom+xml">
{{$data}}
</me:data>
<me:encoding>{{$encoding}}</me:encoding>
<me:alg>{{$algorithm}}</me:alg>
<me:sig key_id="{{$keyhash}}">{{$signature}}</me:sig>
</me:env>

View File

@ -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}}" />