Merge branch 'master' into newui

This commit is contained in:
fabrixxm 2011-08-22 13:56:08 +02:00
commit d8bd4fbb3e
52 changed files with 3730 additions and 1673 deletions

View file

@ -395,6 +395,8 @@ function facebook_cron($a,$b) {
$r = q("SELECT * FROM `pconfig` WHERE `cat` = 'facebook' AND `k` = 'post' AND `v` = '1' ORDER BY RAND() ");
if(count($r)) {
foreach($r as $rr) {
if(get_pconfig($rr['uid'],'facebook','no_linking'))
continue;
// check for new friends once a day
$last_friend_check = get_pconfig($rr['uid'],'facebook','friend_check');
if($last_friend_check)

View file

@ -66,7 +66,12 @@ function piwik_analytics($a,&$b) {
* otherwise just include the above code into the page.
*/
if ($optout) {
$b .= "<div id='piwik-optout-link'>This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> analytics tool. If you do not want that your visits are logged this way you <a href='http://". $baseurl ."index.php?module=CoreAdminHome&action=optOut'>can set a cookie to prevent Piwik from tracking further visits of the site</a> (opt-out).</div>";
$b .= "<div id='piwik-optout-link'>";
$b .= t("This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> analytics tool.");
$b .= " ";
$the_url = "http://".$baseurl ."index.php?module=CoreAdminHome&action=optOut";
$b .= sprintf(t("If you do not want that your visits are logged this way you <a href='%s'>can set a cookie to prevent Piwik from tracking further visits of the site</a> (opt-out)."), $the_url);
$b .= "</div>";
}
}

View file

@ -7,6 +7,21 @@
*/
function poormancron_install() {
// check for command line php
$a = get_app();
$ex = Array();
$ex[0] = ((x($a->config,'php_path')) && (strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
$ex[1] = dirname(dirname(dirname(__file__)))."/testargs.php";
$ex[2] = "test";
$out = exec(implode(" ", $ex));
if ($out==="test") {
set_config('poormancron','usecli',1);
logger("poormancron will use cli php");
} else {
set_config('poormancron','usecli',0);
logger("poormancron will NOT use cli php");
}
register_hook('page_end', 'addon/poormancron/poormancron.php', 'poormancron_hook');
register_hook('proc_run', 'addon/poormancron/poormancron.php','poormancron_procrun');
logger("installed poormancron");
@ -31,7 +46,10 @@ function poormancron_hook(&$a,&$b) {
}
}
function poormancron_procrun(&$a, $argv) {
function poormancron_procrun(&$a, &$arr) {
if (get_config('poormancron','usecli')==1) return;
$argv = $arr['args'];
$arr['run_cmd'] = false;
logger("poormancron procrun ".implode(", ",$argv));
array_shift($argv);
$argc = count($argv);

View file

@ -8,9 +8,9 @@ require_once("include/pgettext.php");
require_once('include/nav.php');
define ( 'FRIENDIKA_VERSION', '2.2.1074' );
define ( 'FRIENDIKA_VERSION', '2.2.1079' );
define ( 'DFRN_PROTOCOL_VERSION', '2.21' );
define ( 'DB_UPDATE_VERSION', 1079 );
define ( 'DB_UPDATE_VERSION', 1081 );
define ( 'EOL', "<br />\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
@ -804,8 +804,12 @@ function profile_load(&$a, $nickname, $profile = 0) {
if(! (x($a->page,'aside')))
$a->page['aside'] = '';
$a->page['aside'] .= profile_sidebar($a->profile);
$a->page['aside'] .= contact_block();
$block = (((get_config('system','block_public')) && (! local_user()) && (! remote_user())) ? true : false);
$a->page['aside'] .= profile_sidebar($a->profile, $block);
if(! $block)
$a->page['aside'] .= contact_block();
return;
}}
@ -828,7 +832,7 @@ function profile_load(&$a, $nickname, $profile = 0) {
if(! function_exists('profile_sidebar')) {
function profile_sidebar($profile) {
function profile_sidebar($profile, $block = 0) {
$a = get_app();
@ -847,10 +851,9 @@ function profile_sidebar($profile) {
$tabs = '';
$photo = '<div id="profile-photo-wrapper"><img class="photo" src="' . $profile['photo'] . '" alt="' . $profile['name'] . '" /></div>';
$photo = '<div id="profile-photo-wrapper"><img class="photo" width="175" height="175" src="' . $profile['photo'] . '" alt="' . $profile['name'] . '" /></div>';
// don't show connect link to yourself
$connect = (($profile['uid'] != local_user()) ? '<li><a id="dfrn-request-link" href="dfrn_request/' . $profile['nickname'] . '">' . t('Connect') . '</a></li>' : '');
// don't show connect link to authenticated visitors either
@ -878,6 +881,7 @@ function profile_sidebar($profile) {
}
$gender = ((x($profile,'gender') == 1) ? '<div class="mf"><span class="gender-label">' . t('Gender:') . '</span> <span class="x-gender">' . $profile['gender'] . '</span></div><div class="profile-clear"></div>' : '');
$pubkey = ((x($profile,'pubkey') == 1) ? '<div class="key" style="display:none;">' . $profile['pubkey'] . '</div>' : '');
@ -886,13 +890,13 @@ function profile_sidebar($profile) {
$homepage = ((x($profile,'homepage') == 1) ? '<div class="homepage"><span class="homepage-label">' . t('Homepage:') . ' </span><span class="homepage-url">' . linkify($profile['homepage']) . '</span></div><div class="profile-clear"></div>' : '');
if($profile['hidewall'] && (! local_user()) && (! remote_user())) {
$location = $gender = $marital = $homepage = '';
if(($profile['hidewall'] || $block) && (! local_user()) && (! remote_user())) {
$location = $pdesc = $connect = $gender = $marital = $homepage = '';
}
$podloc = $a->get_baseurl();
$searchable = (($profile['publish'] && $profile['net-publish']) ? 'true' : 'false' );
$nickname = $profile['nick'];
$nickname = $profile['nickname'];
$photo300 = $a->get_baseurl() . '/photo/custom/300/' . $profile['uid'] . '.jpg';
$photo100 = $a->get_baseurl() . '/photo/custom/100/' . $profile['uid'] . '.jpg';
$photo50 = $a->get_baseurl() . '/photo/custom/50/' . $profile['uid'] . '.jpg';
@ -903,13 +907,19 @@ function profile_sidebar($profile) {
<dl class='entity_nickname'>
<dt>Nickname</dt>
<dd>
<a class="nickname url uid" href="$podloc" rel="me">$nickname</a>
<a class="nickname url uid" href="$podloc/" rel="me">$nickname</a>
</dd>
</dl>
<dl class='entity_fn'>
<dt>Full name</dt>
<dd>
<span class='fn'>$fullname</span>
</dd>
</dl>
<dl class="entity_url">
<dt>URL</dt>
<dd>
<a class="url" href="$podloc" id="pod_location" rel="me">$podloc</a>
<a class="url" href="$podloc/" id="pod_location" rel="me">$podloc/</a>
</dd>
</dl>
<dl class="entity_photo">
@ -930,10 +940,10 @@ function profile_sidebar($profile) {
<img class="photo avatar" height="50px" width="50px" src="$photo50">
</dd>
</dl>
<dl class='entity_searchable'>
<dl class="entity_searchable">
<dt>Searchable</dt>
<dd>
<span class='searchable'>$searchable</span>
<span class="searchable">$searchable</span>
</dd>
</dl>
</div>
@ -1034,11 +1044,14 @@ function proc_run($cmd){
$a = get_app();
$args = func_get_args();
call_hooks("proc_run", $args);
$arr = array('args' => $args, 'run_cmd' => true);
call_hooks("proc_run", $arr);
if(! $arr['run_cmd'])
return;
if(count($args) && $args[0] === 'php')
$args[0] = ((x($a->config,'php_path')) && (strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
foreach ($args as $arg){
$arg = escapeshellarg($arg);
}

View file

@ -521,7 +521,19 @@ CREATE TABLE IF NOT EXISTS `fcontact` (
`url` CHAR( 255 ) NOT NULL ,
`name` CHAR( 255 ) NOT NULL ,
`photo` CHAR( 255 ) NOT NULL ,
`request` CHAR( 255 ) NOT NULL
`request` CHAR( 255 ) NOT NULL,
`nick` CHAR( 255 ) NOT NULL ,
`addr` CHAR( 255 ) NOT NULL ,
`notify` CHAR( 255 ) NOT NULL ,
`poll` CHAR( 255 ) NOT NULL ,
`confirm` CHAR( 255 ) NOT NULL ,
`priority` TINYINT( 1 ) NOT NULL ,
`network` CHAR( 32 ) NOT NULL ,
`alias` CHAR( 255 ) NOT NULL ,
`pubkey` TEXT NOT NULL ,
`updated` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
INDEX ( `addr` ),
INDEX ( `network` )
) ENGINE = MYISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `ffinder` (
@ -581,3 +593,14 @@ CREATE TABLE IF NOT EXISTS `guid` (
INDEX ( `guid` )
) ENGINE = MYISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `sign` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`iid` INT UNSIGNED NOT NULL ,
`signed_text` MEDIUMTEXT NOT NULL ,
`signature` TEXT NOT NULL ,
`signer` CHAR( 255 ) NOT NULL ,
INDEX ( `iid` )
) ENGINE = MYISAM DEFAULT CHARSET=utf8;

View file

@ -44,8 +44,9 @@ function scrape_dfrn($url) {
$x = $item->getAttribute('rel');
if(($x === 'alternate') && ($item->getAttribute('type') === 'application/atom+xml'))
$ret['feed_atom'] = $item->getAttribute('href');
if(substr($x,0,5) == "dfrn-")
if(substr($x,0,5) == "dfrn-") {
$ret[$x] = $item->getAttribute('href');
}
if($x === 'lrdd') {
$decoded = urldecode($item->getAttribute('href'));
if(preg_match('/acct:([^@]*)@/',$decoded,$matches))
@ -55,17 +56,28 @@ function scrape_dfrn($url) {
// Pull out hCard profile elements
$largest_photo = 0;
$items = $dom->getElementsByTagName('*');
foreach($items as $item) {
if(attribute_contains($item->getAttribute('class'), 'vcard')) {
$level2 = $item->getElementsByTagName('*');
foreach($level2 as $x) {
if(attribute_contains($x->getAttribute('class'),'fn'))
if(attribute_contains($x->getAttribute('class'),'fn')) {
$ret['fn'] = $x->textContent;
if(attribute_contains($x->getAttribute('class'),'photo'))
$ret['photo'] = $x->getAttribute('src');
if(attribute_contains($x->getAttribute('class'),'key'))
}
if((attribute_contains($x->getAttribute('class'),'photo'))
|| (attribute_contains($x->getAttribute('class'),'avatar'))) {
$size = intval($x->getAttribute('width'));
// dfrn prefers 175, so if we find this, we set largest_size so it can't be topped.
if(($size > $largest_photo) || ($size == 175) || (! $largest_photo)) {
$ret['photo'] = $x->getAttribute('src');
$largest_photo = (($size == 175) ? 9999 : $size);
}
}
if(attribute_contains($x->getAttribute('class'),'key')) {
$ret['key'] = $x->textContent;
}
}
}
}
@ -190,8 +202,9 @@ function scrape_vcard($url) {
}
}
if((attribute_contains($x->getAttribute('class'),'nickname'))
|| (attribute_contains($x->getAttribute('class'),'uid')))
|| (attribute_contains($x->getAttribute('class'),'uid'))) {
$ret['nick'] = $x->textContent;
}
}
}
}
@ -289,7 +302,29 @@ function scrape_feed($url) {
}}
function probe_url($url) {
/**
*
* Probe a network address to discover what kind of protocols we need to communicate with it.
*
* Warning: this function is a bit touchy and there are some subtle dependencies within the logic flow.
* Edit with care.
*
*/
/**
*
* PROBE_DIASPORA has a bias towards returning Diaspora information
* while PROBE_NORMAL has a bias towards dfrn/zot - in the case where
* an address (such as a Friendika address) supports more than one type
* of network.
*
*/
define ( 'PROBE_NORMAL', 0);
define ( 'PROBE_DIASPORA', 1);
function probe_url($url, $mode = PROBE_NORMAL) {
require_once('include/email.php');
$result = array();
@ -366,7 +401,7 @@ function probe_url($url) {
}
}
}
else {
elseif($mode == PROBE_NORMAL) {
// Check email
@ -411,38 +446,46 @@ function probe_url($url) {
}
}
if(strlen($zot)) {
$s = fetch_url($zot);
if($s) {
$j = json_decode($s);
if($j) {
$network = NETWORK_ZOT;
$vcard = array(
'fn' => $j->fullname,
'nick' => $j->nickname,
'photo' => $j->photo
);
$profile = $j->url;
$notify = $j->post;
$pubkey = $j->pubkey;
$poll = 'N/A';
if($mode == PROBE_NORMAL) {
if(strlen($zot)) {
$s = fetch_url($zot);
if($s) {
$j = json_decode($s);
if($j) {
$network = NETWORK_ZOT;
$vcard = array(
'fn' => $j->fullname,
'nick' => $j->nickname,
'photo' => $j->photo
);
$profile = $j->url;
$notify = $j->post;
$pubkey = $j->pubkey;
$poll = 'N/A';
}
}
}
if(strlen($dfrn)) {
$ret = scrape_dfrn($dfrn);
if(is_array($ret) && x($ret,'dfrn-request')) {
$network = NETWORK_DFRN;
$request = $ret['dfrn-request'];
$confirm = $ret['dfrn-confirm'];
$notify = $ret['dfrn-notify'];
$poll = $ret['dfrn-poll'];
$vcard = array();
$vcard['fn'] = $ret['fn'];
$vcard['nick'] = $ret['nick'];
$vcard['photo'] = $ret['photo'];
}
}
}
if(strlen($dfrn)) {
$ret = scrape_dfrn($dfrn);
if(is_array($ret) && x($ret,'dfrn-request')) {
$network = NETWORK_DFRN;
$request = $ret['dfrn-request'];
$confirm = $ret['dfrn-confirm'];
$notify = $ret['dfrn-notify'];
$poll = $ret['dfrn-poll'];
}
}
if($diaspora && $diaspora_base && $diaspora_guid) {
$notify = $diaspora_base . 'receive/post/' . $diaspora_guid;
if($mode == PROBE_DIASPORA || ! $notify)
$notify = $diaspora_base . 'receive/users/' . $diaspora_guid;
if(strpos($url,'@'))
$addr = str_replace('acct:', '', $url);
}
@ -454,7 +497,7 @@ function probe_url($url) {
$network = NETWORK_OSTATUS;
$priority = 0;
if($hcard) {
if($hcard && ! $vcard) {
$vcard = scrape_vcard($hcard);
// Google doesn't use absolute url in profile photos
@ -498,10 +541,11 @@ function probe_url($url) {
logger('probe_url: scrape_feed returns: ' . print_r($feedret,true), LOGGER_DATA);
if(count($feedret) && ($feedret['feed_atom'] || $feedret['feed_rss'])) {
$poll = ((x($feedret,'feed_atom')) ? unamp($feedret['feed_atom']) : unamp($feedret['feed_rss']));
$vcard = array();
if(! x($vcard))
$vcard = array();
}
if(x($feedret,'photo'))
if(x($feedret,'photo') && (! x($vcard,'photo')))
$vcard['photo'] = $feedret['photo'];
require_once('library/simplepie/simplepie.inc');
$feed = new SimplePie();
@ -518,9 +562,11 @@ function probe_url($url) {
if($feed->error())
logger('probe_url: scrape_feed: Error parsing XML: ' . $feed->error());
if(! x($vcard,'photo'))
$vcard['photo'] = $feed->get_image_url();
$author = $feed->get_author();
if($author) {
$vcard['fn'] = unxmlify(trim($author->get_name()));
if(! $vcard['fn'])
@ -568,6 +614,7 @@ function probe_url($url) {
}
}
}
if((! $vcard['photo']) && strlen($email))
$vcard['photo'] = gravatar_img($email);
if($poll === $profile)

View file

@ -196,6 +196,7 @@
$user = null;
$extra_query = "";
if(!is_null($contact_id)){
$user=$contact_id;
$extra_query = "AND `contact`.`id` = %d ";
@ -332,7 +333,7 @@
'notifications' => false,
'following' => '', #XXX: fix me
'verified' => true, #XXX: fix me
#'status' => null
'status' => array()
);
return $ret;
@ -352,11 +353,15 @@
return api_get_user($a,$a->contacts[$normalised]['id']);
}
// We don't know this person directly.
list($nick, $name) = array_map("trim",explode("(",$item['author-name']));
$name=str_replace(")","",$name);
$ret = array(
'uid' => 0,
'id' => 0,
'name' => $item['author-name'],
'screen_name' => $item['author_name'],
'name' => $name,
'screen_name' => $nick,
'location' => '', //$uinfo[0]['default-location'],
'profile_image_url' => $item['author-avatar'],
'url' => $item['author-link'],
@ -385,7 +390,7 @@
'notifications' => false,
'verified' => true, #XXX: fix me
'followers' => '', #XXX: fix me
#'status' => null
'status' => array()
);
return $ret;
@ -607,10 +612,17 @@
*/
function api_statuses_home_timeline(&$a, $type){
if (local_user()===false) return false;
$user_info = api_get_user($a);
// get last newtork messages
// $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` ) ";
// params
$count = (x($_REQUEST,'count')?$_REQUEST['count']:20);
$page = (x($_REQUEST,'page')?$_REQUEST['page']-1:0);
if ($page<0) $page=0;
$since_id = 0;//$since_id = (x($_REQUEST,'since_id')?$_REQUEST['since_id']:0);
$start = $page*$count;
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
@ -622,9 +634,11 @@
AND `contact`.`id` = `item`.`contact-id`
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
$sql_extra
AND `item`.`id`>%d
ORDER BY `item`.`received` DESC LIMIT %d ,%d ",
intval($user_info['uid']),
0,20
intval($since_id),
intval($start), intval($count)
);
$ret = api_format_items($r,$user_info);
@ -649,7 +663,15 @@
$user_info = api_get_user($a);
// get last newtork messages
// $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` ) ";
// params
$count = (x($_REQUEST,'count')?$_REQUEST['count']:20);
$page = (x($_REQUEST,'page')?$_REQUEST['page']-1:0);
if ($page<0) $page=0;
$since_id = 0;//$since_id = (x($_REQUEST,'since_id')?$_REQUEST['since_id']:0);
$start = $page*$count;
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
@ -662,9 +684,11 @@
AND `contact`.`id` = `item`.`contact-id`
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
$sql_extra
AND `item`.`id`>%d
ORDER BY `item`.`received` DESC LIMIT %d ,%d ",
intval($user_info['uid']),
0,20
intval($since_id),
intval($start), intval($count)
);
$ret = api_format_items($r,$user_info);
@ -688,7 +712,13 @@
$user_info = api_get_user($a);
// get last newtork messages
// $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` ) ";
// params
$count = (x($_GET,'count')?$_GET['count']:20);
$page = (x($_REQUEST,'page')?$_REQUEST['page']-1:0);
if ($page<0) $page=0;
$start = $page*$count;
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
@ -703,7 +733,7 @@
$sql_extra
ORDER BY `item`.`received` DESC LIMIT %d ,%d ",
intval($user_info['uid']),
0,20
intval($start), intval($count)
);
$ret = api_format_items($r,$user_info);
@ -735,8 +765,8 @@
$status_user = (($item['cid']==$user_info['id'])?$user_info: api_item_get_user($a,$item));
$status = array(
'created_at'=> api_date($item['created']),
'published' => datetime_convert('UTC','UTC',$item['created'],ATOM_TIME),
'updated' => datetime_convert('UTC','UTC',$item['edited'],ATOM_TIME),
'published' => api_date($item['created']),
'updated' => api_date($item['edited']),
'id' => intval($item['id']),
'message_id' => $item['uri'],
'text' => strip_tags(bbcode($item['body'])),
@ -780,6 +810,58 @@
}
api_register_func('api/account/rate_limit_status','api_account_rate_limit_status',true);
/**
* https://dev.twitter.com/docs/api/1/get/statuses/friends
* This function is deprecated by Twitter
* returns: json, xml
**/
function api_statuses_f(&$a, $type, $qtype) {
if (local_user()===false) return false;
$user_info = api_get_user($a);
if (x($_GET,'cursor') && $_GET['cursor']=='undefined'){
/* this is to stop Hotot to load friends multiple times
* I'm not sure if I'm missing return something or
* is a bug in hotot. Workaround, meantime
*/
$ret=Array();
$data = array('$users' => $ret);
return api_apply_template("friends", $type, $data);
}
if($qtype == 'friends')
$sql_extra = sprintf(" AND ( `rel` = %d OR `rel` = %d ) ", intval(CONTACT_IS_SHARING), intval(CONTACT_IS_FRIEND));
if($qtype == 'followers')
$sql_extra = sprintf(" AND ( `rel` = %d OR `rel` = %d ) ", intval(CONTACT_IS_FOLLOWER), intval(CONTACT_IS_FRIEND));
$r = q("SELECT id FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 $sql_extra",
intval(local_user())
);
$ret = array();
foreach($r as $cid){
$ret[] = api_get_user($a, $cid['id']);
}
$data = array('$users' => $ret);
return api_apply_template("friends", $type, $data);
}
function api_statuses_friends(&$a, $type){
return api_statuses_f($a,$type,"friends");
}
function api_statuses_followers(&$a, $type){
return api_statuses_f($a,$type,"followers");
}
api_register_func('api/statuses/friends','api_statuses_friends',true);
api_register_func('api/statuses/followers','api_statuses_followers',true);
function api_statusnet_config(&$a,$type) {
$name = $a->config['sitename'];
@ -808,7 +890,6 @@
}
api_register_func('api/statusnet/config','api_statusnet_config',false);
function api_statusnet_version(&$a,$type) {
// liar
@ -869,3 +950,131 @@
api_register_func('api/friends/ids','api_friends_ids',true);
api_register_func('api/followers/ids','api_followers_ids',true);
function api_direct_messages_new(&$a, $type) {
if (local_user()===false) return false;
if (!x($_POST, "text") || !x($_POST,"screen_name")) return;
$sender = api_get_user($a);
$r = q("SELECT `id` FROM `contact` WHERE `uid`=%d AND `nick`='%s'",
intval(local_user()),
dbesc($_POST['screen_name']));
$recipient = api_get_user($a, $r[0]['id']);
require_once("include/message.php");
$sub = ( (strlen($_POST['text'])>10)?substr($_POST['text'],0,10)."...":$_POST['text']);
$id = send_message($recipient['id'], $_POST['text'], $sub);
if ($id>-1) {
$r = q("SELECT * FROM `mail` WHERE id=%d", intval($id));
$item = $r[0];
$ret=Array(
'id' => $item['id'],
'created_at'=> api_date($item['created']),
'sender_id'=> $sender['id'] ,
'sender_screen_name'=> $sender['screen_name'],
'sender'=> $sender,
'recipient_id'=> $recipient['id'],
'recipient_screen_name'=> $recipient['screen_name'],
'recipient'=> $recipient,
'text'=> $item['title']."\n".strip_tags(bbcode($item['body'])) ,
);
} else {
$ret = array("error"=>$id);
}
$data = Array('$messages'=>$ret);
switch($type){
case "atom":
case "rss":
$data = api_rss_extra($a, $data, $user_info);
}
return api_apply_template("direct_messages", $type, $data);
}
api_register_func('api/direct_messages/new','api_direct_messages_new',true);
function api_direct_messages_box(&$a, $type, $box) {
if (local_user()===false) return false;
$user_info = api_get_user($a);
// params
$count = (x($_GET,'count')?$_GET['count']:20);
$page = (x($_REQUEST,'page')?$_REQUEST['page']-1:0);
if ($page<0) $page=0;
$start = $page*$count;
if ($box=="sentbox") {
$sql_extra = "`from-url`='%s'";
} else {
$sql_extra = "`from-url`!='%s'";
}
$r = q("SELECT * FROM `mail` WHERE uid=%d AND $sql_extra ORDER BY created DESC LIMIT %d,%d",
intval(local_user()),
dbesc( $a->get_baseurl() . '/profile/' . $a->user['nickname'] ),
intval($start), intval($count)
);
$ret = Array();
foreach($r as $item){
switch ($box){
case "inbox":
$recipient = $user_info;
$sender = api_get_user($a,$item['contact-id']);
break;
case "sentbox":
$recipient = api_get_user($a,$item['contact-id']);
$sender = $user_info;
break;
}
$ret[]=Array(
'id' => $item['id'],
'created_at'=> api_date($item['created']),
'sender_id'=> $sender['id'] ,
'sender_screen_name'=> $sender['screen_name'],
'sender'=> $sender,
'recipient_id'=> $recipient['id'],
'recipient_screen_name'=> $recipient['screen_name'],
'recipient'=> $recipient,
'text'=> $item['title']."\n".strip_tags(bbcode($item['body'])) ,
);
}
$data = array('$messages' => $ret);
switch($type){
case "atom":
case "rss":
$data = api_rss_extra($a, $data, $user_info);
}
return api_apply_template("direct_messages", $type, $data);
}
function api_direct_messages_sentbox(&$a, $type){
return api_direct_messages_box($a, $type, "sentbox");
}
function api_direct_messages_inbox(&$a, $type){
return api_direct_messages_box($a, $type, "inbox");
}
api_register_func('api/direct_messages/sent','api_direct_messages_sentbox',true);
api_register_func('api/direct_messages','api_direct_messages_inbox',true);

View file

@ -3,19 +3,20 @@
require_once('library/ASNValue.class.php');
require_once('library/asn1.php');
// supported algorithms are 'sha256', 'sha1'
function rsa_sign($data,$key) {
function rsa_sign($data,$key,$alg = 'sha256') {
$sig = '';
if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
openssl_sign($data,$sig,$key,'sha256');
if (version_compare(PHP_VERSION, '5.3.0', '>=') || $alg === 'sha1') {
openssl_sign($data,$sig,$key,(($alg == 'sha1') ? OPENSSL_ALGO_SHA1 : $alg));
}
else {
if(strlen($key) < 1024 || extension_loaded('gmp')) {
require_once('library/phpsec/Crypt/RSA.php');
$rsa = new CRYPT_RSA();
$rsa->signatureMode = CRYPT_RSA_SIGNATURE_PKCS1;
$rsa->setHash('sha256');
$rsa->setHash($alg);
$rsa->loadKey($key);
$sig = $rsa->sign($data);
}
@ -27,17 +28,17 @@ function rsa_sign($data,$key) {
return $sig;
}
function rsa_verify($data,$sig,$key) {
function rsa_verify($data,$sig,$key,$alg = 'sha256') {
if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
$verify = openssl_verify($data,$sig,$key,'sha256');
if (version_compare(PHP_VERSION, '5.3.0', '>=') || $alg === 'sha1') {
$verify = openssl_verify($data,$sig,$key,(($alg == 'sha1') ? OPENSSL_ALGO_SHA1 : $alg));
}
else {
if(strlen($key) <= 300 || extension_loaded('gmp')) {
require_once('library/phpsec/Crypt/RSA.php');
$rsa = new CRYPT_RSA();
$rsa->signatureMode = CRYPT_RSA_SIGNATURE_PKCS1;
$rsa->setHash('sha256');
$rsa->setHash($alg);
$rsa->loadKey($key);
$verify = $rsa->verify($data,$sig);
}
@ -74,7 +75,7 @@ function DerToRsa($Der)
//Encode:
$Der = base64_encode($Der);
//Split lines:
$lines = str_split($Der, 65);
$lines = str_split($Der, 64);
$body = implode("\n", $lines);
//Get title:
$title = 'RSA PUBLIC KEY';
@ -182,3 +183,45 @@ function salmon_key($pubkey) {
pemtome($pubkey,$m,$e);
return 'RSA' . '.' . base64url_encode($m,true) . '.' . base64url_encode($e,true) ;
}
if(! function_exists('aes_decrypt')) {
function aes_decrypt($val,$ky)
{
$key="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
for($a=0;$a<strlen($ky);$a++)
$key[$a%16]=chr(ord($key[$a%16]) ^ ord($ky[$a]));
$mode = MCRYPT_MODE_ECB;
$enc = MCRYPT_RIJNDAEL_128;
$dec = @mcrypt_decrypt($enc, $key, $val, $mode, @mcrypt_create_iv( @mcrypt_get_iv_size($enc, $mode), MCRYPT_DEV_URANDOM ) );
return rtrim($dec,(( ord(substr($dec,strlen($dec)-1,1))>=0 and ord(substr($dec, strlen($dec)-1,1))<=16)? chr(ord( substr($dec,strlen($dec)-1,1))):null));
}}
if(! function_exists('aes_encrypt')) {
function aes_encrypt($val,$ky)
{
$key="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
for($a=0;$a<strlen($ky);$a++)
$key[$a%16]=chr(ord($key[$a%16]) ^ ord($ky[$a]));
$mode=MCRYPT_MODE_ECB;
$enc=MCRYPT_RIJNDAEL_128;
$val=str_pad($val, (16*(floor(strlen($val) / 16)+(strlen($val) % 16==0?2:1))), chr(16-(strlen($val) % 16)));
return mcrypt_encrypt($enc, $key, $val, $mode, mcrypt_create_iv( mcrypt_get_iv_size($enc, $mode), MCRYPT_DEV_URANDOM));
}}
function pkcs5_pad ($text, $blocksize)
{
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
function pkcs5_unpad($text)
{
$pad = ord($text{strlen($text)-1});
if ($pad > strlen($text)) return false;
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;
return substr($text, 0, -1 * $pad);
}

View file

@ -4,25 +4,11 @@ require_once('include/crypto.php');
require_once('include/items.php');
function get_diaspora_key($uri) {
$key = '';
logger('Fetching diaspora key for: ' . $uri);
$arr = lrdd($uri);
if(is_array($arr)) {
foreach($arr as $a) {
if($a['@attributes']['rel'] === 'diaspora-public-key') {
$key = base64_decode($a['@attributes']['href']);
}
}
}
else {
return '';
}
if($key)
return rsatopem($key);
$r = find_diaspora_person_by_handle($uri);
if($r)
return $r['pubkey'];
return '';
}
@ -40,14 +26,16 @@ function diaspora_base_message($type,$data) {
function diaspora_msg_build($msg,$user,$contact,$prvkey,$pubkey) {
$a = get_app();
logger('diaspora_msg_build: ' . $msg, LOGGER_DATA);
$inner_aes_key = random_string(32);
$b_inner_aes_key = base64_encode($inner_aes_key);
$inner_iv = random_string(32);
$inner_iv = random_string(16);
$b_inner_iv = base64_encode($inner_iv);
$outer_aes_key = random_string(32);
$b_outer_aes_key = base64_encode($outer_aes_key);
$outer_iv = random_string(32);
$outer_iv = random_string(16);
$b_outer_iv = base64_encode($outer_iv);
$handle = 'acct:' . $user['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
@ -89,13 +77,20 @@ EOT;
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $outer_aes_key, $decrypted_header, MCRYPT_MODE_CBC, $outer_iv);
$outer_json = json_encode(array('iv' => $b_outer_iv,'key' => $b_outer_aes_key));
$encrypted_outer_key_bundle = '';
openssl_public_encrypt($outer_json,$encrypted_outer_key_bundle,$pubkey);
logger('outer_bundle_encrypt: ' . openssl_error_string());
$b64_encrypted_outer_key_bundle = base64_encode($encrypted_outer_key_bundle);
logger('outer_bundle: ' . $b64_encrypted_outer_key_bundle . ' key: ' . $pubkey);
$encrypted_header_json_object = json_encode(array('aes_key' => base64_encode($encrypted_outer_key_bundle),
'ciphertext' => base64_encode($ciphertext)));
$encrypted_header = '<encrypted_header>' . base64_encode($encrypted_header_json_object) . '</encrypted_header>';
$cipher_json = base64_encode($encrypted_header_json_object);
$encrypted_header = '<encrypted_header>' . $cipher_json . '</encrypted_header>';
$magic_env = <<< EOT
<?xml version='1.0' encoding='UTF-8'?>
@ -110,6 +105,7 @@ $magic_env = <<< EOT
</entry>
EOT;
logger('diaspora_msg_build: magic_env: ' . $magic_env, LOGGER_DATA);
return $magic_env;
}
@ -152,6 +148,7 @@ function diaspora_decode($importer,$xml) {
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $outer_key, $ciphertext, MCRYPT_MODE_CBC, $outer_iv);
$decrypted = pkcs5_unpad($decrypted);
/**
@ -202,7 +199,7 @@ function diaspora_decode($importer,$xml) {
// Add back the 60 char linefeeds
// Diaspora devs: This completely violates the entire principle of salmon magic signatures,
// This completely violates the entire principle of salmon magic signatures,
// which was to have a message signing format that was completely ambivalent to linefeeds
// and transport whitespace mangling, and base64 wrapping rules. Guess what? PHP and Ruby
// use different linelengths for base64 output.
@ -218,7 +215,7 @@ function diaspora_decode($importer,$xml) {
$encoding = $base->encoding;
$alg = $base->alg;
// Diaspora devs: I can't even begin to tell you how sucky this is. Read the freaking spec.
// I can't even begin to tell you how sucky this is. Please read the spec.
$signed_data = $data . (($data[-1] != "\n") ? "\n" : '') . '.' . base64url_encode($type) . "\n" . '.' . base64url_encode($encoding) . "\n" . '.' . base64url_encode($alg) . "\n";
@ -241,12 +238,10 @@ function diaspora_decode($importer,$xml) {
}
// Once we have the author URI, go to the web and try to find their public key
// *** or look it up locally ***
// (first this will look it up locally if it is in the fcontact cache)
// This will also convert diaspora public key from pkcs#1 to pkcs#8
logger('mod-diaspora: Fetching key for ' . $author_link );
// Get diaspora public key (pkcs#1) and convert to pkcs#8
$key = get_diaspora_key($author_link);
if(! $key) {
@ -278,21 +273,33 @@ function diaspora_get_contact_by_handle($uid,$handle) {
return false;
}
function find_person_by_handle($handle) {
// we don't care about the uid, we just want to save an expensive webfinger probe
$r = q("select * from contact where network = '%s' and addr = '%s' LIMIT 1",
dbesc(NETWORK_DIASPORA),
dbesc($handle)
);
if(count($r))
function find_diaspora_person_by_handle($handle) {
$r = q("select * from fcontact where network = '%s' and addr = '%s' limit 1",
dbesc(NETWORK_DIASPORA),
dbesc($handle)
);
if(count($r)) {
// update record occasionally so it doesn't get stale
$d = strtotime($r[0]['updated'] . ' +00:00');
if($d < strtotime('now - 14 days')) {
q("delete from fcontact where id = %d limit 1",
intval($r[0]['id'])
);
}
else
return $r[0];
$r = probe_url($handle);
// need to cached this, perhaps in fcontact
if(count($r))
return ($r);
return false;
}
require_once('include/Scrape.php');
$r = probe_url($handle, PROBE_DIASPORA);
if((count($r)) && ($r['network'] === NETWORK_DIASPORA)) {
add_fcontact($r);
return ($r);
}
return false;
}
function diaspora_request($importer,$xml) {
$sender_handle = unxmlify($xml->sender_handle);
@ -310,7 +317,7 @@ function diaspora_request($importer,$xml) {
// That makes us friends.
if($contact['rel'] == CONTACT_IS_FOLLOWER) {
q("UPDATE `contact` SET `rel` = %d WHERE `id` = %d AND `uid` = %d LIMIT 1",
q("UPDATE `contact` SET `rel` = %d, `writable` = 1 WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval(CONTACT_IS_FRIEND),
intval($contact['id']),
intval($importer['uid'])
@ -320,8 +327,8 @@ function diaspora_request($importer,$xml) {
return;
}
require_once('include/Scrape.php');
$ret = probe_url($sender_handle);
$ret = find_diaspora_person_by_handle($sender_handle);
if((! count($ret)) || ($ret['network'] != NETWORK_DIASPORA)) {
logger('diaspora_request: Cannot resolve diaspora handle ' . $sender_handle . ' for ' . $recipient_handle);
@ -352,11 +359,12 @@ function diaspora_request($importer,$xml) {
$hash = random_string() . (string) time(); // Generate a confirm_key
if($contact_record) {
$ret = q("INSERT INTO `intro` ( `uid`, `contact-id`, `blocked`, `knowyou`, `note`, `hash`, `datetime`,`blocked`)
VALUES ( %d, %d, 1, %d, '%s', '%s', '%s', 0 )",
$ret = q("INSERT INTO `intro` ( `uid`, `contact-id`, `blocked`, `knowyou`, `note`, `hash`, `datetime` )
VALUES ( %d, %d, %d, %d, '%s', '%s', '%s' )",
intval($importer['uid']),
intval($contact_record['id']),
0,
0,
dbesc( t('Sharing notification from Diaspora network')),
dbesc($hash),
dbesc(datetime_convert())
@ -483,7 +491,7 @@ function diaspora_comment($importer,$xml,$msg) {
dbesc($parent_guid)
);
if(! count($r)) {
logger('diaspora_comment: parent item not found: ' . $guid);
logger('diaspora_comment: parent item not found: parent: ' . $parent_guid . ' item: ' . $guid);
return;
}
$parent_item = $r[0];
@ -492,12 +500,12 @@ function diaspora_comment($importer,$xml,$msg) {
$author_signature = base64_decode($author_signature);
if(stricmp($diaspora_handle,$msg['author']) == 0) {
if(strcasecmp($diaspora_handle,$msg['author']) == 0) {
$person = $contact;
$key = $msg['key'];
}
else {
$person = find_person_by_handle($diaspora_handle);
$person = find_diaspora_person_by_handle($diaspora_handle);
if(is_array($person) && x($person,'pubkey'))
$key = $person['pubkey'];
@ -507,11 +515,12 @@ function diaspora_comment($importer,$xml,$msg) {
}
}
if(! rsa_verify($author_signed_data,$author_signature,$key)) {
if(! rsa_verify($author_signed_data,$author_signature,$key,'sha')) {
logger('diaspora_comment: verification failed.');
return;
}
if($parent_author_signature) {
$owner_signed_data = $guid . ';' . $parent_guid . ';' . $text . ';' . $msg['author'];
@ -519,7 +528,7 @@ function diaspora_comment($importer,$xml,$msg) {
$key = $msg['key'];
if(! rsa_verify($owner_signed_data,$parent_author_signature,$key)) {
if(! rsa_verify($owner_signed_data,$parent_author_signature,$key,'sha')) {
logger('diaspora_comment: owner verification failed.');
return;
}
@ -578,14 +587,25 @@ function diaspora_comment($importer,$xml,$msg) {
$datarray['author-avatar'] = ((x($person,'thumb')) ? $person['thumb'] : $person['photo']);
$datarray['body'] = $body;
item_store($datarray);
$message_id = item_store($datarray);
if(! $parent_author_signature) {
q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
intval($message_id),
dbesc($author_signed_data),
dbesc(base64_encode($author_signature)),
dbesc($diaspora_handle)
);
}
// notify others
return;
}
function diaspora_like($importer,$xml,$msg) {
$a = get_app();
$guid = notags(unxmlify($xml->guid));
$parent_guid = notags(unxmlify($xml->parent_guid));
$diaspora_handle = notags(unxmlify($xml->diaspora_handle));
@ -621,7 +641,7 @@ function diaspora_like($importer,$xml,$msg) {
$parent_item = $r[0];
$r = q("SELECT * FROM `item` WHERE `uid` = %d AND `guid` = '$s' LIMIT 1",
$r = q("SELECT * FROM `item` WHERE `uid` = %d AND `guid` = '%s' LIMIT 1",
intval($importer['uid']),
dbesc($guid)
);
@ -645,25 +665,25 @@ function diaspora_like($importer,$xml,$msg) {
return;
}
$author_signed_data = $guid . ';' . $parent_guid . ';' . $target_type . ';' . $positive . ';' . $diaspora_handle;
$author_signed_data = $guid . ';' . $target_type . ';' . $parent_guid . ';' . $positive . ';' . $diaspora_handle;
$author_signature = base64_decode($author_signature);
if(stricmp($diaspora_handle,$msg['author']) == 0) {
if(strcasecmp($diaspora_handle,$msg['author']) == 0) {
$person = $contact;
$key = $msg['key'];
}
else {
$person = find_person_by_handle($diaspora_handle);
$person = find_diaspora_person_by_handle($diaspora_handle);
if(is_array($person) && x($person,'pubkey'))
$key = $person['pubkey'];
else {
logger('diaspora_comment: unable to find author details');
logger('diaspora_like: unable to find author details');
return;
}
}
if(! rsa_verify($author_signed_data,$author_signature,$key)) {
if(! rsa_verify($author_signed_data,$author_signature,$key,'sha')) {
logger('diaspora_like: verification failed.');
return;
}
@ -675,7 +695,7 @@ function diaspora_like($importer,$xml,$msg) {
$key = $msg['key'];
if(! rsa_verify($owner_signed_data,$parent_author_signature,$key)) {
if(! rsa_verify($owner_signed_data,$parent_author_signature,$key,'sha')) {
logger('diaspora_like: owner verification failed.');
return;
}
@ -708,6 +728,7 @@ EOT;
$arr['uri'] = $uri;
$arr['uid'] = $importer['uid'];
$arr['guid'] = $guid;
$arr['contact-id'] = $contact['id'];
$arr['type'] = 'activity';
$arr['wall'] = $parent_item['wall'];
@ -715,13 +736,13 @@ EOT;
$arr['parent'] = $parent_item['id'];
$arr['parent-uri'] = $parent_item['uri'];
$datarray['owner-name'] = $contact['name'];
$datarray['owner-link'] = $contact['url'];
$datarray['owner-avatar'] = $contact['thumb'];
$arr['owner-name'] = $contact['name'];
$arr['owner-link'] = $contact['url'];
$arr['owner-avatar'] = $contact['thumb'];
$datarray['author-name'] = $person['name'];
$datarray['author-link'] = $person['url'];
$datarray['author-avatar'] = ((x($person,'thumb')) ? $person['thumb'] : $person['photo']);
$arr['author-name'] = $person['name'];
$arr['author-link'] = $person['url'];
$arr['author-avatar'] = ((x($person,'thumb')) ? $person['thumb'] : $person['photo']);
$ulink = '[url=' . $contact['url'] . ']' . $contact['name'] . '[/url]';
$alink = '[url=' . $parent_item['author-link'] . ']' . $parent_item['author-name'] . '[/url]';
@ -736,12 +757,20 @@ EOT;
$arr['unseen'] = 1;
$arr['last-child'] = 0;
$post_id = item_store($arr);
$message_id = item_store($arr);
if(! $parent_author_signature) {
q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
intval($message_id),
dbesc($author_signed_data),
dbesc(base64_encode($author_signature)),
dbesc($diaspora_handle)
);
}
// FIXME send notification
return;
}
function diaspora_retraction($importer,$xml) {
@ -770,21 +799,22 @@ function diaspora_share($me,$contact) {
$tpl = get_markup_template('diaspora_share.tpl');
$msg = replace_macros($tpl, array(
'$sender' => myaddr,
'$sender' => $myaddr,
'$recipient' => $theiraddr
));
$slap = 'xml=' . urlencode(diaspora_msg_build($msg,$me,$contact,$me['prvkey'],$contact['pubkey']));
$slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$me,$contact,$me['prvkey'],$contact['pubkey'])));
post_url($contact['notify'],$slap);
post_url($contact['notify'] . '/',$slap);
$return_code = $a->get_curl_code();
logger('diaspora_send_share: returns: ' . $return_code);
return $return_code;
}
function diaspora_send_status($item,$owner,$contact) {
$a = get_app();
$myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
$myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
$theiraddr = $contact['addr'];
require_once('include/bbcode.php');
@ -805,11 +835,154 @@ function diaspora_send_status($item,$owner,$contact) {
logger('diaspora_send_status: base message: ' . $msg, LOGGER_DATA);
$slap = 'xml=' . urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey']));
$slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'])));
post_url($contact['notify'],$slap);
post_url($contact['notify'] . '/',$slap);
$return_code = $a->get_curl_code();
logger('diaspora_send_status: returns: ' . $return_code);
return $return_code;
}
function diaspora_send_followup($item,$owner,$contact) {
$a = get_app();
$myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
$theiraddr = $contact['addr'];
$p = q("select guid from item where parent = %d limit 1",
$item['parent']
);
if(count($p))
$parent_guid = $p[0]['guid'];
else
return;
if($item['verb'] === ACTIVITY_LIKE) {
$tpl = get_markup_template('diaspora_like.tpl');
$like = true;
$target_type = 'Post';
$positive = (($item['deleted']) ? 'false' : 'true');
}
else {
$tpl = get_markup_template('diaspora_comment.tpl');
$like = false;
}
$text = bbcode($item['body']);
// sign it
if($like)
$signed_text = $item['guid'] . ';' . $target_type . ';' . $positive . ';' . $myaddr;
else
$signed_text = $item['guid'] . ';' . $parent_guid . ';' . $text . ';' . $myaddr;
$authorsig = base64_encode(rsa_sign($signed_text,$owner['uprvkey']),'sha');
$msg = replace_macros($tpl,array(
'$guid' => xmlify($item['guid']),
'$parent_guid' => xmlify($parent_guid),
'$target_type' =>xmlify($target_type),
'$authorsig' => xmlify($authorsig),
'$body' => xmlify($text),
'$positive' => xmlify($positive),
'$handle' => xmlify($myaddr)
));
logger('diaspora_followup: base message: ' . $msg, LOGGER_DATA);
$slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'])));
post_url($contact['notify'] . '/',$slap);
$return_code = $a->get_curl_code();
logger('diaspora_send_followup: returns: ' . $return_code);
return $return_code;
}
function diaspora_send_relay($item,$owner,$contact) {
$a = get_app();
$myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
$theiraddr = $contact['addr'];
$p = q("select guid from item where parent = %d limit 1",
$item['parent']
);
if(count($p))
$parent_guid = $p[0]['guid'];
else
return;
// fetch the original signature
$r = q("select * from sign where iid = %d limit 1",
intval($item['id'])
);
if(! count($r))
return;
$orig_sign = $r[0];
if($item['verb'] === ACTIVITY_LIKE) {
$tpl = get_markup_template('diaspora_like_relay.tpl');
$like = true;
$target_type = 'Post';
$positive = (($item['deleted']) ? 'false' : 'true');
}
else {
$tpl = get_markup_template('diaspora_comment_relay.tpl');
$like = false;
}
$text = bbcode($item['body']);
// sign it
if($like)
$parent_signed_text = $orig_sign['signed_text'];
else
$parent_signed_text = $orig_sign['signed_text'];
$parentauthorsig = base64_encode(rsa_sign($signed_text,$owner['uprvkey'],'sha'));
$msg = replace_macros($tpl,array(
'$guid' => xmlify($item['guid']),
'$parent_guid' => xmlify($parent_guid),
'$target_type' =>xmlify($target_type),
'$authorsig' => xmlify($orig_sign['signature']),
'$parentsig' => xmlify($parentauthorsig),
'$text' => xmlify($text),
'$positive' => xmlify($positive),
'$diaspora_handle' => xmlify($myaddr)
));
// fetch the original signature
$r = q("select * from sign where iid = %d limit 1",
intval($item['id'])
);
if(! count($r))
return;
logger('diaspora_relay_comment: base message: ' . $msg, LOGGER_DATA);
$slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'])));
post_url($contact['notify'] . '/',$slap);
$return_code = $a->get_curl_code();
logger('diaspora_send_relay: returns: ' . $return_code);
return $return_code;
}
function diaspora_send_retraction($item,$owner,$contact) {
}

View file

@ -1,8 +1,9 @@
<?php
require_once('bbcode.php');
require_once('oembed.php');
require_once('include/bbcode.php');
require_once('include/oembed.php');
require_once('include/salmon.php');
require_once('include/crypto.php');
function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0) {
@ -694,6 +695,7 @@ function item_store($arr,$force_parent = false) {
$arr['tag'] = ((x($arr,'tag')) ? notags(trim($arr['tag'])) : '');
$arr['attach'] = ((x($arr,'attach')) ? notags(trim($arr['attach'])) : '');
$arr['app'] = ((x($arr,'app')) ? notags(trim($arr['app'])) : '');
$arr['guid'] = ((x($arr,'guid')) ? notags(trim($arr['guid'])) : get_guid());
if($arr['parent-uri'] === $arr['uri']) {
$parent_id = 0;
@ -757,7 +759,6 @@ function item_store($arr,$force_parent = false) {
}
}
$arr['guid'] = get_guid();
call_hooks('post_remote',$arr);
@ -1635,7 +1636,7 @@ function atom_entry($item,$type,$author,$owner,$comment = false) {
$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";
$o .= '<dfrn:env>' . base64url_encode($body, true) . '</dfrn:env>' . "\r\n";
$o .= '<content type="' . $type . '" >' . xmlify(($type === 'html') ? bbcode($body) : $body) . '</content>' . "\r\n";
$o .= '<content type="' . $type . '" >' . xmlify((($type === 'html') ? bbcode($body) : $body)) . '</content>' . "\r\n";
$o .= '<link rel="alternate" type="text/html" href="' . xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id']) . '" />' . "\r\n";
if($comment)
$o .= '<dfrn:comment-allow>' . intval($item['last-child']) . '</dfrn:comment-allow>' . "\r\n";

96
include/message.php Normal file
View file

@ -0,0 +1,96 @@
<?php
// send a private message
function send_message($recipient=0, $body='', $subject='', $replyto=''){
$a = get_app();
if(! $recipient) return -1;
if(! strlen($subject))
$subject = t('[no subject]');
$me = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 1 LIMIT 1",
intval(local_user())
);
$contact = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval($recipient),
intval(local_user())
);
if(! (count($me) && (count($contact)))) {
return -2;
}
$hash = random_string();
$uri = 'urn:X-dfrn:' . $a->get_baseurl() . ':' . local_user() . ':' . $hash ;
if(! strlen($replyto))
$replyto = $uri;
$r = q("INSERT INTO `mail` ( `uid`, `from-name`, `from-photo`, `from-url`,
`contact-id`, `title`, `body`, `seen`, `replied`, `uri`, `parent-uri`, `created`)
VALUES ( %d, '%s', '%s', '%s', %d, '%s', '%s', %d, %d, '%s', '%s', '%s' )",
intval(local_user()),
dbesc($me[0]['name']),
dbesc($me[0]['thumb']),
dbesc($me[0]['url']),
intval($recipient),
dbesc($subject),
dbesc($body),
1,
0,
dbesc($uri),
dbesc($replyto),
datetime_convert()
);
$r = q("SELECT * FROM `mail` WHERE `uri` = '%s' and `uid` = %d LIMIT 1",
dbesc($uri),
intval(local_user())
);
if(count($r))
$post_id = $r[0]['id'];
/**
*
* When a photo was uploaded into the message using the (profile wall) ajax
* uploader, The permissions are initially set to disallow anybody but the
* owner from seeing it. This is because the permissions may not yet have been
* set for the post. If it's private, the photo permissions should be set
* appropriately. But we didn't know the final permissions on the post until
* now. So now we'll look for links of uploaded messages that are in the
* post and set them to the same permissions as the post itself.
*
*/
$match = null;
if(preg_match_all("/\[img\](.*?)\[\/img\]/",$body,$match)) {
$images = $match[1];
if(count($images)) {
foreach($images as $image) {
if(! stristr($image,$a->get_baseurl() . '/photo/'))
continue;
$image_uri = substr($image,strrpos($image,'/') + 1);
$image_uri = substr($image_uri,0, strpos($image_uri,'-'));
$r = q("UPDATE `photo` SET `allow_cid` = '%s'
WHERE `resource-id` = '%s' AND `album` = '%s' AND `uid` = %d ",
dbesc('<' . $recipient . '>'),
dbesc($image_uri),
dbesc( t('Wall Photos')),
intval(local_user())
);
}
}
}
if($post_id) {
proc_run('php',"include/notifier.php","mail","$post_id");
return intval($post_id);
} else {
return -3;
}
}

View file

@ -536,7 +536,7 @@ function fetch_xrd_links($url) {
$aliases = array($alias);
else
$aliases = $alias;
if(count($aliases)) {
if($aliases && count($aliases)) {
foreach($aliases as $alias) {
$links[]['@attributes'] = array('rel' => 'alias' , 'href' => $alias);
}
@ -693,3 +693,25 @@ function parse_xml_string($s,$strict = true) {
}
return $x;
}}
function add_fcontact($arr) {
$r = q("insert into fcontact ( `url`,`name`,`photo`,`request`,`nick`,`addr`,
`notify`,`poll`,`confirm`,`network`,`alias`,`pubkey`,`updated` )
values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",
dbesc($arr['url']),
dbesc($arr['name']),
dbesc($arr['photo']),
dbesc($arr['request']),
dbesc($arr['nick']),
dbesc($arr['addr']),
dbesc($arr['notify']),
dbesc($arr['poll']),
dbesc($arr['confirm']),
dbesc($arr['network']),
dbesc($arr['alias']),
dbesc($arr['pubkey']),
dbesc(datetime_convert())
);
return $r;
}

View file

@ -502,22 +502,27 @@ function notifier_run($argv, $argc){
}
break;
case NETWORK_DIASPORA:
if(get_config('system','dfrn_only') || (! get_config('diaspora_enabled')) || (! $normal_mode))
require_once('include/diaspora.php');
if(get_config('system','dfrn_only') || (! get_config('system','diaspora_enabled')) || (! $normal_mode))
break;
if($target_item['deleted']) {
// diaspora delete, (check for like)
if($target_item['verb'] === ACTIVITY_DISLIKE) {
// unsupported
break;
}
elseif($target_item['deleted'] && (! $parent_item['verb'] === ACTIVITY_LIKE)) {
// diaspora delete,
diaspora_send_retraction($target_item,$owner,$contact);
break;
}
elseif($followup) {
// send to owner to relay
// send comments, likes and retractions of likes to owner to relay
diaspora_send_followup($target_item,$owner,$contact);
break;
}
elseif($target_item['parent'] != $target_item['id']) {
// we are the relay
// we are the relay - send comments, likes and unlikes to our conversants
diaspora_send_relay($target_item,$owner,$contact);
break;
}
elseif($top_level) {
@ -571,7 +576,7 @@ function notifier_run($argv, $argc){
/**
*
* If you have less than 150 dfrn friends and it's a public message,
* If you have less than 999 dfrn friends and it's a public message,
* we'll just go ahead and push them out securely with dfrn/rino.
* If you've got more than that, you'll have to rely on PuSH delivery.
*
@ -587,8 +592,9 @@ function notifier_run($argv, $argc){
*/
$r = q("SELECT `id`, `name` FROM `contact`
WHERE `network` = NETWORK_DFRN AND `uid` = %d AND `blocked` = 0 AND `pending` = 0
WHERE `network` = '%s' AND `uid` = %d AND `blocked` = 0 AND `pending` = 0
AND `rel` != %d ",
dbesc(NETWORK_DFRN),
intval($owner['uid']),
intval(CONTACT_IS_SHARING)
);

View file

@ -28,7 +28,7 @@ function can_write_wall(&$a,$owner) {
AND `user`.`blockwall` = 0 AND `readonly` = 0 AND ( `contact`.`rel` IN ( %d , %d ) OR `user`.`page-flags` = %d ) LIMIT 1",
intval($owner),
intval(remote_user()),
intval(CONTACT_IS_FOLLOWER),
intval(CONTACT_IS_SHARING),
intval(CONTACT_IS_FRIEND),
intval(PAGE_COMMUNITY)
);

View file

@ -147,7 +147,7 @@ if(! function_exists('xmlify')) {
function xmlify($str) {
$buffer = '';
for($x = 0; $x < strlen($str); $x ++) {
for($x = 0; $x < mb_strlen($str); $x ++) {
$char = $str[$x];
switch( $char ) {
@ -620,32 +620,6 @@ function valid_email($x){
}}
if(! function_exists('aes_decrypt')) {
function aes_decrypt($val,$ky)
{
$key="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
for($a=0;$a<strlen($ky);$a++)
$key[$a%16]=chr(ord($key[$a%16]) ^ ord($ky[$a]));
$mode = MCRYPT_MODE_ECB;
$enc = MCRYPT_RIJNDAEL_128;
$dec = @mcrypt_decrypt($enc, $key, $val, $mode, @mcrypt_create_iv( @mcrypt_get_iv_size($enc, $mode), MCRYPT_DEV_URANDOM ) );
return rtrim($dec,(( ord(substr($dec,strlen($dec)-1,1))>=0 and ord(substr($dec, strlen($dec)-1,1))<=16)? chr(ord( substr($dec,strlen($dec)-1,1))):null));
}}
if(! function_exists('aes_encrypt')) {
function aes_encrypt($val,$ky)
{
$key="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
for($a=0;$a<strlen($ky);$a++)
$key[$a%16]=chr(ord($key[$a%16]) ^ ord($ky[$a]));
$mode=MCRYPT_MODE_ECB;
$enc=MCRYPT_RIJNDAEL_128;
$val=str_pad($val, (16*(floor(strlen($val) / 16)+(strlen($val) % 16==0?2:1))), chr(16-(strlen($val) % 16)));
return mcrypt_encrypt($enc, $key, $val, $mode, mcrypt_create_iv( mcrypt_get_iv_size($enc, $mode), MCRYPT_DEV_URANDOM));
}}
/**
*
* Function: linkify
@ -903,20 +877,6 @@ function generate_user_guid() {
}
function pkcs5_pad ($text, $blocksize)
{
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
function pkcs5_unpad($text)
{
$pad = ord($text{strlen($text)-1});
if ($pad > strlen($text)) return false;
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;
return substr($text, 0, -1 * $pad);
}
function base64url_encode($s, $strip_padding = false) {

View file

@ -2,6 +2,8 @@
require_once('include/salmon.php');
require_once('include/crypto.php');
function zot_get($url,$args) {
$argstr = '';

View file

@ -141,7 +141,7 @@ function contacts_content(&$a) {
$cmd = $a->argv[2];
$orig_record = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
$orig_record = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d AND `self` = 0 LIMIT 1",
intval($contact_id),
intval(local_user())
);
@ -222,7 +222,7 @@ function contacts_content(&$a) {
}
contact_remove($contact_id);
contact_remove($orig_record[0]['id']);
info( t('Contact has been removed.') . EOL );
goaway($a->get_baseurl() . '/contacts');
return; // NOTREACHED

View file

@ -360,8 +360,14 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
}
$new_relation = $contact['rel'];
if($network === NETWORK_DIASPORA && $duplex)
$new_relation = CONTACT_IS_FRIEND;
$writable = $contact['writable'];
if($network === NETWORK_DIASPORA) {
if($duplex)
$new_relation = CONTACT_IS_FRIEND;
if($new_relation != CONTACT_IS_FOLLOWER)
$writable = 1;
}
$r = q("DELETE FROM `intro` WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval($intro_id),
@ -380,6 +386,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
`blocked` = 0,
`pending` = 0,
`network` = '%s',
`writable` = %d,
`rel` = %d
WHERE `id` = %d LIMIT 1
",
@ -392,6 +399,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
dbesc($notify),
dbesc($poll),
dbesc($network),
intval($writable),
intval($new_relation),
intval($contact_id)
);
@ -640,7 +648,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
`blocked` = 0,
`pending` = 0,
`duplex` = %d,
`network` = 'dfrn' WHERE `id` = %d LIMIT 1
`network` = '%s' WHERE `id` = %d LIMIT 1
",
dbesc($photos[0]),
dbesc($photos[1]),
@ -650,6 +658,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
dbesc(datetime_convert()),
dbesc(datetime_convert()),
intval($duplex),
dbesc(NETWORK_DFRN),
intval($dfrn_record)
);
if($r === false) { // indicates schema is messed up or total db failure

View file

@ -58,6 +58,9 @@ function dfrn_notify_post(&$a) {
break; // NOTREACHED
}
// be careful - $importer will contain both the contact information for the contact
// sending us the post, and also the user information for the person receiving it.
// since they are mixed together, it is easy to get them confused.
$r = q("SELECT `contact`.*, `contact`.`uid` AS `importer_uid`,
`contact`.`pubkey` AS `cpubkey`,
@ -512,17 +515,19 @@ function dfrn_notify_post(&$a) {
$msg['htmlversion']
= html_entity_decode(bbcode(stripslashes(str_replace(array("\\r\\n", "\\r","\\n\\n" ,"\\n"), "<br />\n",$datarray['body']))));
$imgtouse = ((link_compare($datarray['author-link'],$importer['url'])) ? $importer['thumb'] : $datarray['author-avatar']);
// load the template for private message notifications
$tpl = get_intltext_template('cmnt_received_html_body_eml.tpl');
$email_html_body_tpl = replace_macros($tpl,array(
'$username' => $importer['username'],
'$sitename' => $a->config['sitename'], // name of this site
'$siteurl' => $a->get_baseurl(), // descriptive url of this site
'$thumb' => $datarray['author-avatar'], // thumbnail url for sender icon
'$thumb' => $imgtouse, // thumbnail url for sender icon
'$email' => $importer['email'], // email address to send to
'$url' => $datarray['author-link'], // full url for the site
'$from' => $from, // name of the person sending the message
'$body' => $msg['htmlversion'], // html version of the message
'$url' => $datarray['author-link'], // full url for the site
'$from' => $from, // name of the person sending the message
'$body' => $msg['htmlversion'], // html version of the message
'$display' => $a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $posted_id,
));
@ -532,10 +537,10 @@ function dfrn_notify_post(&$a) {
'$username' => $importer['username'],
'$sitename' => $a->config['sitename'], // name of this site
'$siteurl' => $a->get_baseurl(), // descriptive url of this site
'$thumb' => $datarray['author-avatar'], // thumbnail url for sender icon
'$thumb' => $imgtouse, // thumbnail url for sender icon
'$email' => $importer['email'], // email address to send to
'$url' => $datarray['author-link'], // full url for the site
'$from' => $from, // name of the person sending the message
'$url' => $datarray['author-link'], // full url for the site
'$from' => $from, // name of the person sending the message
'$body' => $msg['textversion'], // text version of the message
'$display' => $a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $posted_id,
));
@ -643,15 +648,18 @@ function dfrn_notify_post(&$a) {
$msg['htmlversion']
= html_entity_decode(bbcode(stripslashes(str_replace(array("\\r\\n", "\\r","\\n\\n" ,"\\n"), "<br />\n",$datarray['body']))));
$imgtouse = ((link_compare($datarray['author-link'],$importer['url'])) ? $importer['thumb'] : $datarray['author-avatar']);
// load the template for private message notifications
$tpl = get_intltext_template('cmnt_received_html_body_eml.tpl');
$email_html_body_tpl = replace_macros($tpl,array(
'$username' => $importer['username'],
'$sitename' => $a->config['sitename'], // name of this site
'$siteurl' => $a->get_baseurl(), // descriptive url of this site
'$thumb' => $datarray['author-avatar'], // thumbnail url for sender icon
'$url' => $datarray['author-link'], // full url for the site
'$from' => $from, // name of the person sending the message
'$thumb' => $imgtouse, // thumbnail url for sender icon
'$url' => $datarray['author-link'], // full url for the site
'$from' => $from, // name of the person sending the message
'$body' => $msg['htmlversion'], // html version of the message
'$display' => $a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $posted_id,
));
@ -662,9 +670,9 @@ function dfrn_notify_post(&$a) {
'$username' => $importer['username'],
'$sitename' => $a->config['sitename'], // name of this site
'$siteurl' => $a->get_baseurl(), // descriptive url of this site
'$thumb' => $datarray['author-avatar'], // thumbnail url for sender icon
'$url' => $datarray['author-link'], // full url for the site
'$from' => $from, // name of the person sending the message
'$thumb' => $imgtouse, // thumbnail url for sender icon
'$url' => $datarray['author-link'], // full url for the site
'$from' => $from, // name of the person sending the message
'$body' => $msg['textversion'], // text version of the message
'$display' => $a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $posted_id,
));

View file

@ -12,10 +12,6 @@
if(! function_exists('dfrn_request_init')) {
function dfrn_request_init(&$a) {
if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
return;
}
if($a->argc > 1)
$which = $a->argv[1];
@ -147,8 +143,8 @@ function dfrn_request_post(&$a) {
*/
$r = q("INSERT INTO `contact` ( `uid`, `created`,`url`, `name`, `nick`, `photo`, `site-pubkey`,
`request`, `confirm`, `notify`, `poll`, `aes_allow`)
VALUES ( %d, '%s', '%s', '%s' , '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d)",
`request`, `confirm`, `notify`, `poll`, `network`, `aes_allow`)
VALUES ( %d, '%s', '%s', '%s' , '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d)",
intval(local_user()),
datetime_convert(),
dbesc($dfrn_url),
@ -160,6 +156,7 @@ function dfrn_request_post(&$a) {
$parms['dfrn-confirm'],
$parms['dfrn-notify'],
$parms['dfrn-poll'],
dbesc(NETWORK_DFRN),
intval($aes_allow)
);
}
@ -298,7 +295,7 @@ function dfrn_request_post(&$a) {
}
if($network === 'dfrn') {
if($network === NETWORK_DFRN) {
$ret = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' AND `self` = 0 LIMIT 1",
intval($uid),
dbesc($url)
@ -373,8 +370,8 @@ function dfrn_request_post(&$a) {
dbesc_array($parms);
$r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `name`, `nick`, `issued-id`, `photo`, `site-pubkey`,
`request`, `confirm`, `notify`, `poll` )
VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )",
`request`, `confirm`, `notify`, `poll`, `network` )
VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )",
intval($uid),
datetime_convert(),
$parms['url'],
@ -386,7 +383,8 @@ function dfrn_request_post(&$a) {
$parms['dfrn-request'],
$parms['dfrn-confirm'],
$parms['dfrn-notify'],
$parms['dfrn-poll']
$parms['dfrn-poll'],
dbesc(NETWORK_DFRN)
);
// find the contact record we just created
@ -437,15 +435,16 @@ function dfrn_request_post(&$a) {
. (($aes_allow) ? "&aes_allow=1" : "")
);
// NOTREACHED
// END $network === 'dfrn'
// END $network === NETWORK_DFRN
}
elseif($network === 'stat') {
elseif($network === NETWORK_OSTATUS) {
/**
*
* OStatus network
* Check contact existence
* Try and scrape together enough information to create a contact record, with us as CONTACT_IS_FOLLOWER
* Try and scrape together enough information to create a contact record,
* with us as CONTACT_IS_FOLLOWER
* Substitute our user's feed URL into $url template
* Send the subscriber home to subscribe
*
@ -454,7 +453,7 @@ function dfrn_request_post(&$a) {
$url = str_replace('{uri}', $a->get_baseurl() . '/dfrn_poll/' . $nickname, $url);
goaway($url);
// NOTREACHED
// END $network === 'stat'
// END $network === NETWORK_OSTATUS
}
} return;
@ -466,8 +465,6 @@ function dfrn_request_post(&$a) {
if(! function_exists('dfrn_request_content')) {
function dfrn_request_content(&$a) {
if(($a->argc != 2) || (! count($a->profile)))
return "";
@ -578,6 +575,7 @@ function dfrn_request_content(&$a) {
);
}
}
killme();
return; // NOTREACHED
}

View file

@ -100,9 +100,9 @@ function follow_post(&$a) {
$new_relation = CONTACT_IS_FOLLOWER;
// create contact record
$r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `addr`, `alias`, `notify`, `poll`, `name`, `nick`, `photo`, `network`, `rel`, `priority`,
$r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `addr`, `alias`, `notify`, `poll`, `name`, `nick`, `photo`, `network`, `pubkey`, `rel`, `priority`,
`writable`, `blocked`, `readonly`, `pending` )
VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, 0, 0, 0 ) ",
VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, 0, 0, 0 ) ",
intval(local_user()),
dbesc(datetime_convert()),
dbesc($ret['url']),
@ -114,6 +114,7 @@ function follow_post(&$a) {
dbesc($ret['nick']),
dbesc($ret['photo']),
dbesc($ret['network']),
dbesc($ret['pubkey']),
intval($new_relation),
intval($ret['priority']),
intval($writeable)
@ -190,11 +191,12 @@ function follow_post(&$a) {
}
if($contact['network'] == NETWORK_DIASPORA) {
require_once('include/diaspora.php');
$ret = diaspora_share($a->user,$r[0]);
$ret = diaspora_share($a->user,$contact);
logger('mod_follow: diaspora_share returns: ' . $ret);
}
}
goaway($_SESSION['return_url']);
goaway($a->get_baseurl() . '/contacts/' . $contact_id);
// goaway($_SESSION['return_url']);
// NOTREACHED
}

View file

@ -2,8 +2,7 @@
function hcard_init(&$a) {
if((get_config('system','block_public')) && (! local_user()) && (! remote_user()))
return;
$blocked = (((get_config('system','block_public')) && (! local_user()) && (! remote_user())) ? true : false);
if($a->argc > 1)
$which = $a->argv[1];
@ -31,10 +30,12 @@ function hcard_init(&$a) {
$a->page['htmlhead'] .= '<link rel="openid.delegate" href="' . $delegate . '" />' . "\r\n";
}
$keywords = ((x($a->profile,'pub_keywords')) ? $a->profile['pub_keywords'] : '');
$keywords = str_replace(array(',',' ',',,'),array(' ',',',','),$keywords);
if(strlen($keywords))
$a->page['htmlhead'] .= '<meta name="keywords" content="' . $keywords . '" />' . "\r\n" ;
if(! $blocked) {
$keywords = ((x($a->profile,'pub_keywords')) ? $a->profile['pub_keywords'] : '');
$keywords = str_replace(array(',',' ',',,'),array(' ',',',','),$keywords);
if(strlen($keywords))
$a->page['htmlhead'] .= '<meta name="keywords" content="' . $keywords . '" />' . "\r\n" ;
}
$a->page['htmlhead'] .= '<meta name="dfrn-global-visibility" content="' . (($a->profile['net-publish']) ? 'true' : 'false') . '" />' . "\r\n" ;
$a->page['htmlhead'] .= '<link rel="alternate" type="application/atom+xml" href="' . $a->get_baseurl() . '/dfrn_poll/' . $which .'" />' . "\r\n" ;

View file

@ -19,14 +19,10 @@ function like_content(&$a) {
switch($verb) {
case 'like':
$activity = ACTIVITY_LIKE;
break;
case 'dislike':
$activity = ACTIVITY_DISLIKE;
break;
case 'unlike':
$activity = ACTIVITY_LIKE;
break;
case 'dislike':
case 'undislike':
$activity = ACTIVITY_DISLIKE;
break;

View file

@ -1,6 +1,7 @@
<?php
require_once('include/acl_selectors.php');
require_once('include/message.php');
function message_post(&$a) {
@ -14,97 +15,22 @@ function message_post(&$a) {
$body = ((x($_POST,'body')) ? escape_tags(trim($_POST['body'])) : '');
$recipient = ((x($_POST,'messageto')) ? intval($_POST['messageto']) : 0 );
if(! $recipient) {
notice( t('No recipient selected.') . EOL );
return;
}
if(! strlen($subject))
$subject = t('[no subject]');
$me = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 1 LIMIT 1",
intval(local_user())
);
$contact = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval($recipient),
intval(local_user())
);
if(! (count($me) && (count($contact)))) {
notice( t('Unable to locate contact information.') . EOL );
return;
}
$hash = random_string();
$uri = 'urn:X-dfrn:' . $a->get_baseurl() . ':' . local_user() . ':' . $hash ;
if(! strlen($replyto))
$replyto = $uri;
$r = q("INSERT INTO `mail` ( `uid`, `from-name`, `from-photo`, `from-url`,
`contact-id`, `title`, `body`, `seen`, `replied`, `uri`, `parent-uri`, `created`)
VALUES ( %d, '%s', '%s', '%s', %d, '%s', '%s', %d, %d, '%s', '%s', '%s' )",
intval(local_user()),
dbesc($me[0]['name']),
dbesc($me[0]['thumb']),
dbesc($me[0]['url']),
intval($recipient),
dbesc($subject),
dbesc($body),
1,
0,
dbesc($uri),
dbesc($replyto),
datetime_convert()
);
$r = q("SELECT * FROM `mail` WHERE `uri` = '%s' and `uid` = %d LIMIT 1",
dbesc($uri),
intval(local_user())
);
if(count($r))
$post_id = $r[0]['id'];
/**
*
* When a photo was uploaded into the message using the (profile wall) ajax
* uploader, The permissions are initially set to disallow anybody but the
* owner from seeing it. This is because the permissions may not yet have been
* set for the post. If it's private, the photo permissions should be set
* appropriately. But we didn't know the final permissions on the post until
* now. So now we'll look for links of uploaded messages that are in the
* post and set them to the same permissions as the post itself.
*
*/
$match = null;
if(preg_match_all("/\[img\](.*?)\[\/img\]/",$body,$match)) {
$images = $match[1];
if(count($images)) {
foreach($images as $image) {
if(! stristr($image,$a->get_baseurl() . '/photo/'))
continue;
$image_uri = substr($image,strrpos($image,'/') + 1);
$image_uri = substr($image_uri,0, strpos($image_uri,'-'));
$r = q("UPDATE `photo` SET `allow_cid` = '%s'
WHERE `resource-id` = '%s' AND `album` = '%s' AND `uid` = %d ",
dbesc('<' . $recipient . '>'),
dbesc($image_uri),
dbesc( t('Wall Photos')),
intval(local_user())
);
}
}
}
if($post_id) {
proc_run('php',"include/notifier.php","mail","$post_id");
info( t('Message sent.') . EOL );
$ret = send_message($recipient, $body, $subject, $replyto);
switch($ret){
case -1:
notice( t('No recipient selected.') . EOL );
break;
case -2:
notice( t('Unable to locate contact information.') . EOL );
break;
case -3:
notice( t('Message could not be sent.') . EOL );
default:
info( t('Message sent.') . EOL );
}
else {
notice( t('Message could not be sent.') . EOL );
}
return;
}
function message_content(&$a) {

View file

@ -2,8 +2,7 @@
function profile_init(&$a) {
if((get_config('system','block_public')) && (! local_user()) && (! remote_user()))
return;
$blocked = (((get_config('system','block_public')) && (! local_user()) && (! remote_user())) ? true : false);
if($a->argc > 1)
$which = $a->argv[1];
@ -31,10 +30,12 @@ function profile_init(&$a) {
$a->page['htmlhead'] .= '<link rel="openid.delegate" href="' . $delegate . '" />' . "\r\n";
}
$keywords = ((x($a->profile,'pub_keywords')) ? $a->profile['pub_keywords'] : '');
$keywords = str_replace(array(',',' ',',,'),array(' ',',',','),$keywords);
if(strlen($keywords))
$a->page['htmlhead'] .= '<meta name="keywords" content="' . $keywords . '" />' . "\r\n" ;
if(! $blocked) {
$keywords = ((x($a->profile,'pub_keywords')) ? $a->profile['pub_keywords'] : '');
$keywords = str_replace(array(',',' ',',,'),array(' ',',',','),$keywords);
if(strlen($keywords))
$a->page['htmlhead'] .= '<meta name="keywords" content="' . $keywords . '" />' . "\r\n" ;
}
$a->page['htmlhead'] .= '<meta name="dfrn-global-visibility" content="' . (($a->profile['net-publish']) ? 'true' : 'false') . '" />' . "\r\n" ;
$a->page['htmlhead'] .= '<link rel="alternate" type="application/atom+xml" href="' . $a->get_baseurl() . '/dfrn_poll/' . $which .'" />' . "\r\n" ;

View file

@ -15,6 +15,8 @@ function receive_post(&$a) {
if($a->argc != 3 || $a->argv[1] !== 'users')
http_status_exit(500);
logger('receive: raw input: ' . file_get_contents('php://input'), LOGGER_DATA);
$guid = $a->argv[2];
$r = q("SELECT * FROM `user` WHERE `guid` = '%s' LIMIT 1",

View file

@ -55,7 +55,7 @@ function wall_upload_post(&$a) {
if(($maximagesize) && ($filesize > $maximagesize)) {
echo sprintf( t('Image exceeds size limit of %d'), $maximagesize) . EOL;
@unlink($src);
return;
killme();
}
$imagedata = @file_get_contents($src);

View file

@ -1,6 +1,6 @@
<?php
define( 'UPDATE_VERSION' , 1079 );
define( 'UPDATE_VERSION' , 1081 );
/**
*
@ -646,3 +646,31 @@ function update_1077() {
function update_1078() {
q("ALTER TABLE `item` ADD `guid` CHAR( 64 ) NOT NULL AFTER `id` , ADD INDEX ( `guid` ) ");
}
function update_1079() {
q("CREATE TABLE IF NOT EXISTS `sign` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`iid` INT UNSIGNED NOT NULL ,
`signed_text` MEDIUMTEXT NOT NULL ,
`signature` TEXT NOT NULL ,
`signer` CHAR( 255 ) NOT NULL ,
INDEX ( `iid` )
) ENGINE = MYISAM ");
q("ALTER TABLE `fcontact` ADD `nick` CHAR( 255 ) NOT NULL ,
ADD `addr` CHAR( 255 ) NOT NULL ,
ADD `notify` CHAR( 255 ) NOT NULL ,
ADD `poll` CHAR( 255 ) NOT NULL ,
ADD `confirm` CHAR( 255 ) NOT NULL ,
ADD `priority` TINYINT( 1 ) NOT NULL ,
ADD `network` CHAR( 32 ) NOT NULL ,
ADD `alias` CHAR( 255 ) NOT NULL ,
ADD `pubkey` TEXT NOT NULL ,
ADD INDEX ( `addr` ) ,
ADD INDEX ( `network` ) ");
}
function update_1080() {
q("ALTER TABLE `fcontact` ADD `updated` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00'");
}

5
view/api_friends_xml.tpl Normal file
View file

@ -0,0 +1,5 @@
<users type="array">
{{for $users as $user }}
{{inc api_user_xml.tpl }}{{endinc}}
{{endfor}}
</users>

View file

@ -0,0 +1,14 @@
Milý/Milá $username,
'$from' okommentoval položku/konverzaci, kterou následujete.
-----
$body
-----
Přihlaste se na $siteurl pro zobrazení kompletní konverzace:
$display
Díky,
$sitename administrátor

View file

@ -0,0 +1,25 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional //EN">
<html>
<head>
<title>Friendika zpráva</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
</head>
<body>
<table style="border:1px solid #ccc">
<tbody>
<tr><td colspan="2" style="background:#084769; color:#FFFFFF; font-weight:bold; font-family:'lucida grande', tahoma, verdana,arial, sans-serif; padding: 4px 8px; vertical-align: middle; font-size:16px; letter-spacing: -0.03em; text-align: left;"><img style="width:32px;height:32px; float:left;" src='$siteurl/images/friendika-32.png'><div style="padding:7px; margin-left: 5px; float:left; font-size:18px;letter-spacing:1px;">Friendika</div><div style="clear: both;"></div></td></tr>
<tr><td style="padding-top:22px;" colspan="2">$from okomentoval položku/konverzaci, kterou následujete.</td></tr>
<tr><td style="padding-left:22px;padding-top:22px;width:60px;" valign="top" rowspan=3><a href="$url"><img style="border:0px;width:48px;height:48px;" src="$thumb"></a></td>
<td style="padding-top:22px;"><a href="$url">$from</a></td></tr>
<tr><td style="padding-bottom:5px;"></td></tr>
<tr><td style="padding-right:22px;">$body</td></tr>
<tr><td style="padding-top:11px;padding-bottom:11px;" colspan="2">Přihlaste se na <a href="$display">pro zobrazení kompletní konverzace</a>.</td></tr>
<tr><td></td><td>Díky,</td></tr>
<tr><td></td><td>$sitename administrátor</td></tr>
</tbody>
</table>
</body>
</html>

View file

@ -0,0 +1,14 @@
Milý/Milá $username,
'$from' okommentoval položku/konverzaci, kterou následujete.
-----
$body
-----
Přihlaste se na $siteurl pro zobrazení kompletní konverzace:
$display
Díky,
$sitename administrátor

View file

@ -0,0 +1,14 @@
Milý/Milá $username,
Máte nového následovatele na $sitename - '$requestor'.
Můžete si prohlédnout jeho/její profil na $url.
Přihlaste se na váš server k odsouhlasení nebo ignorování/zrušení žádosti.
$siteurl
S pozdravem,
$sitename administrátor

View file

@ -0,0 +1,17 @@
Milý/Milá $username,
Skvělé zprávy... '$fn' na '$dfrn_url' odsouhlasil Váš požadavek na spojení na '$sitename'.
Jste nyní přátelé a můžete si vyměňovat aktualizace statusu, fotek a e-mailů bez omezení.
Pokud budete chtít tento vztah jakkoliv upravit, navštivte Vaši stránku "Kontakty" na $sitename.
$siteurl
(Nyní můžete například vytvořit separátní profil s informacemi, které nebudou viditelné veřejně, a nastavit právo pro zobrazení tohoto profilu pro '$fn').
S pozdravem,
$sitename administrátor

74
view/cs/htconfig.tpl Normal file
View file

@ -0,0 +1,74 @@
<?php
// Nastavte následující pro Vaši instalaci MySQL
// Zkopírujte nebo přejmenujte tento soubor na .htconfig.php
$db_host = '$dbhost';
$db_user = '$dbuser';
$db_pass = '$dbpass';
$db_data = '$dbdata';
// Pokud používáte podadresár z vaší domény, budete zde potřebovat zadat
// relativní cestu (od kořene vaší domény).
// Například pokud je URL adresa vaší instance 'http://priklad.cz/adresar/podadresar',
// nastavte $a->path na 'adresar/podadresar'.
$a->path = '$urlpath';
// Vyberte platnou defaultní časovou zónu. Pokud si nejste jistí, použijte use "Europe/Prague".
// Toto nastavení lze změnit i později a používá se pouze pro časové značky anonymních čtenářů.
$default_timezone = '$timezone';
// Jak se jmenuje Váš web?
$a->config['sitename'] = "Moje síť přátel";
// Vaše možnosti jsou REGISTER_OPEN, REGISTER_APPROVE, or REGISTER_CLOSED.
// Ujistěte se, že jste si vytvořili Váš osobníúčet dříve, než nastavíte
// REGISTER_CLOSED. 'register_text' (pokud je nastaven) se bude zobrazovat jako první text na
// registrační stránce. REGISTER_APPROVE vyžaduje aby byl nastaven 'admin_email'
// na e-mailovou adresu již existující registrované osoby, která může autorizovat
// a/nebo schvalovat/odmítat žádosti o registraci.
$a->config['register_policy'] = REGISTER_OPEN;
$a->config['register_text'] = '';
$a->config['admin_email'] = '$adminmail';
// Maximální velikost importované zprávy, 0 je neomezeno
$a->config['max_import_size'] = 200000;
// maximální velikost nahrávaných fotografií
$a->config['system']['maximagesize'] = 800000;
// cesta k PHP command line processor
$a->config['php_path'] = '$phpath';
// URL adresy globálního adresáře.
$a->config['system']['directory_submit_url'] = 'http://dir.friendika.com/submit';
$a->config['system']['directory_search_url'] = 'http://dir.friendika.com/directory?search=';
// PuSH - také zvaný jako pubsubhubbub URL. Tímto zajistíte doručování veřejných přízpěvků stejně rychle jako těch soukromých
$a->config['system']['huburl'] = 'http://pubsubhubbub.appspot.com';
// Server-to-server private message encryption (RINO) je defaultně povolen.
// Šifrování bude zajištěno pouze pokud je toto nastaveno na true a
// PHP mcrypt extension jsou nainstalována na obou systémech
$a->config['system']['rino_encrypt'] = true;
// defaultní systémové grafické téma
$a->config['system']['theme'] = 'duepuntozero';
// Addony or pluginy se nastavují zde.
// Toto je list čárkou oddělených addonů, které jsou povoleny. Příklad:
// $a->config['system']['addon'] = 'js_upload,randplace,oembed';
$a->config['system']['addon'] = 'js_upload';

View file

@ -0,0 +1,17 @@
Milý/Milá $username,
'$fn' na '$dfrn_url' odsouhlasil Váš požadavek na spojení na '$sitename'.
'$fn' Vás označil za svého "fanouška", což jistým způsobem omezuje komunikaci (například v oblasti soukromých zpráv a některých profilových interakcí. Pokud je toto celebritní nebo komunitní stránka, bylo toto nastavení byla přijato automaticky.
'$fn' může v budoucnu rozšířit toto spojení na oboustranné nebo jinak méně restriktivní.
Nyní začnete dostávat veřejné aktualizace statusu od '$fn', které se objeví ve Vaší stránce "Síť" na webu
$siteurl
S pozdravem,
$sitename administrátor

23
view/cs/lostpass_eml.tpl Normal file
View file

@ -0,0 +1,23 @@
Milý/Milá $username,
Na webu $sitename byl zaregistrován požadavek na znovunastavení hesla k Vašemu účtu. Pro potvrzení této žádosti prosím klikněte na potvrzovací odkaz níže, nebo si tento odkaz zkopírujte do adresního řádku prohlížeče.
Pokud jste o znovunastavení hesla NEŽÁDALI, prosím NEKLIKEJTE na tento odkaz a ignorujte tento e-mail nebo ho rovnou smažte.
Vaše heslo nebude změněno, dokud nebudeme mít potvrzení, že jste o tento požadavek zažádali právě Vy.
Klikněte na tento odkaz pro prověření Vaší identity:
$reset_link
Poté obdržíte další zprávu obsahující nové heslo.
Následně si toto heslo můžete změnit z vašeho účtu na stránce Nastavení.
Přihlašovací údaje jsou tato:
Adresa webu: $siteurl
Přihlašovací jméno: $email
S pozdravem,
$sitename administrátor

View file

@ -0,0 +1,25 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional //EN">
<html>
<head>
<title>Friendika Zpráva</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
</head>
<body>
<table style="border:1px solid #ccc">
<tbody>
<tr><td colspan="2" style="background:#084769; color:#FFFFFF; font-weight:bold; font-family:'lucida grande', tahoma, verdana,arial, sans-serif; padding: 4px 8px; vertical-align: middle; font-size:16px; letter-spacing: -0.03em; text-align: left;"><img style="width:32px;height:32px; float:left;" src='$siteurl/images/friendika-32.png'><div style="padding:7px; margin-left: 5px; float:left; font-size:18px;letter-spacing:1px;">Friendika</div><div style="clear: both;"></div></td></tr>
<tr><td style="padding-top:22px;" colspan="2">$from Vám poslal(a) novou soukromou zprávu na $siteName.</td></tr>
<tr><td style="padding-left:22px;padding-top:22px;width:60px;" valign="top" rowspan=3><a href="$url"><img style="border:0px;width:48px;height:48px;" src="$thumb"></a></td>
<td style="padding-top:22px;"><a href="$url">$from</a></td></tr>
<tr><td style="font-weight:bold;padding-bottom:5px;">$title</td></tr>
<tr><td style="padding-right:22px;">$htmlversion</td></tr>
<tr><td style="padding-top:11px;padding-bottom:11px;" colspan="2">Přihlaste se na <a href="$siteurl">$siteurl$<a/> pro čtení a zaslání odpovědí na Vaše soukromé zprávy.</td></tr>
<tr><td></td><td>Díky,</td></tr>
<tr><td></td><td>$siteName administrátor</td></tr>
</tbody>
</table>
</body>
</html>

View file

@ -0,0 +1,10 @@
$from Vám poslal(a) novou soukromou zprávu na $siteName.
$title
$textversion
Přihlaste se na $siteurl pro čtení a zaslání odpovědí na Vaše soukromé zprávy.
Díky,
$siteName administrátor

View file

@ -0,0 +1,14 @@
Milý/Milá $username,
Vaše heslo bylo na Vaši žádost změněno. Prosím zaznamenejte si tuto informaci (nebo si Vaše heslo změňte na nějaké, které si budete pamatovat).
Vaše přihlašovací údaje jsou tato:
Adresa webu: $siteurl
Přihlašovací jméno: $email
Heslo: $new_password
Toto heslo si můžete změnit z vašeho účtu na stránce Nastavení poté, co se přihlásíte.
S pozdravem,
$sitename administrátor

View file

@ -0,0 +1,23 @@
Milý/milá $username,
Díky za registraci na $sitename. Váš účet byl vytvořen.
Vaše přihlašovací údaje jsou tato:
Adresa webu: $siteurl
Přihlašovací jméno: $email
Heslo: $password
Toto heslo si můžete změnit z vašeho účtu na stránce "Nastavení" poté, co se přihlásíte.
Věnujte prosím chvíli revizi dalších nastavení Vašeho účtu na této stránce.
Můžete také přidat některé základní informace do Vašeho defaultního profilu (na stránce "Profily"), čímž umožníte jiným lidem Vás snadněji nalézt.
Doporučujeme nastavit celé jméno, přidat profilové foto, přidat nějaká profilová "klíčová slova" (což je velmi užitečné pro hledání nových přátel) a zemi, ve které žijete. Nemusíte zadávat víc informací.
Plně respektujeme Vaše právo na soukromí a žádná z výše uvedených položek není povinná.
Pokud jste nový a neznáte na tomto webu nikoho jiného, zadáním těchto položek můžete získat nové a zajímavé přátele.
Díky a vítejte na $sitename.
S pozdravem,
$sitename administrátor

View file

@ -0,0 +1,22 @@
Na webu $sitename byla vytvořena nová uživatelská registrace, která vyžaduje Vaše schválení.
Přihlašovací údaje jsou tato:
Celé jméno: $username
Adresa webu: $siteurl
Přihlašovací jméno: $email
Pro odsouhlasení tohoto požadavku prosím klikněte na následující odkaz:
$siteurl/regmod/allow/$hash
Pro zamítnutí žádosti a odstranění účtu prosím klikněte na tento odkaz:
$siteurl/regmod/deny/$hash
Díky.

View file

@ -0,0 +1,15 @@
Milý/Milá $username,
Právě jste obdržel/obdržela požadavek na spojení na webu $sitename
od '$requestor'.
Můžete navštívit jeho/její profil na následujícím odkazu $url.
Přihlaste se na Váš web k zobrazení kompletní žádosti a odsouhlaste nebo ignorujte/zrušte tuto žádost.
$siteurl
S pozdravem,
$sitename administrátor

View file

@ -0,0 +1,14 @@
Milý/Milá $username,
'$from' obohatil Vaši profilovou zeď.
-----
$body
-----
Přihlaste se na $siteurl k zobrazení nebo smazání této položky:
$display
Díky,
$sitename administrátor

View file

@ -0,0 +1,24 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional //EN">
<html>
<head>
<title>Friendika zpráva</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
</head>
<body>
<table style="border:1px solid #ccc">
<tbody>
<tr><td colspan="2" style="background:#084769; color:#FFFFFF; font-weight:bold; font-family:'lucida grande', tahoma, verdana,arial, sans-serif; padding: 4px 8px; vertical-align: middle; font-size:16px; letter-spacing: -0.03em; text-align: left;"><img style="width:32px;height:32px; float:left;" src='$siteurl/images/friendika-32.png'><div style="padding:7px; margin-left: 5px; float:left; font-size:18px;letter-spacing:1px;">Friendika</div><div style="clear: both;"></div></td></tr>
<tr><td style="padding-top:22px;" colspan="2">$from obohatil Vaši profilovou zeď.</td></tr>
<tr><td style="padding-left:22px;padding-top:22px;width:60px;" valign="top" rowspan=3><a href="$url"><img style="border:0px;width:48px;height:48px;" src="$thumb"></a></td>
<td style="padding-top:22px;"><a href="$url">$from</a></td></tr>
<tr><td style="padding-right:22px;">$body</td></tr>
<tr><td style="padding-top:11px;padding-bottom:11px;" colspan="2">Přihlaste se na <a href="$siteurl">$siteurl</a> k <a href="$display">zobrazení nebo smazání této položky.</a></td></tr>
<tr><td></td><td>Díky,</td></tr>
<tr><td></td><td>$sitename administrátor</td></tr>
</tbody>
</table>
</body>
</html>

View file

@ -0,0 +1,14 @@
Milý/Milá $username,
'$from' obohatil Vaši profilovou zeď.
-----
$body
-----
Přihlaste se na $siteurl k zobrazení nebo smazání této položky:
$display
Díky,
$sitename administrátor

File diff suppressed because it is too large Load diff

View file

@ -498,6 +498,7 @@ $a->strings["Crop Image"] = "Bild Zurechtschneiden";
$a->strings["Please adjust the image cropping for optimum viewing."] = "Passe bitte den Bildausschnitt an damit das Bild optimal dargestellt werden kann.";
$a->strings["Done Editing"] = "Bearbeitung abgeschlossen";
$a->strings["Image uploaded successfully."] = "Bild erfolgreich auf den Server geladen.";
$a->strings["No profile"] = "Kein Profil";
$a->strings["Remove My Account"] = "Account löschen";
$a->strings["This will completely remove your account. Once this has been done it is not recoverable."] = "Dies wird deinen Account endgültig löschen. Es gibt keine Möglichkeit ihn wiederherzustellen.";
$a->strings["Please enter your password for verification:"] = "Bitte gib dein Passwort zur Verifikation ein:";
@ -609,7 +610,6 @@ $a->strings["FTP Host"] = "FTP Host";
$a->strings["FTP Path"] = "FTP Pfad";
$a->strings["FTP User"] = "FTP Nutzername";
$a->strings["FTP Password"] = "FTP Passwort";
$a->strings["No profile"] = "Kein Profil";
$a->strings["Access to this profile has been restricted."] = "Der Zugriff zu diesem Profil wurde eingeschränkt.";
$a->strings["Tips for New Members"] = "Tipps für neue Nutzer";
$a->strings["Login failed."] = "Annmeldung fehlgeschlagen.";
@ -621,7 +621,7 @@ $a->strings["No compatible communication protocols or feeds were discovered."] =
$a->strings["The profile address specified does not provide adequate information."] = "Die angegebene Profiladresse liefert unzureichende Informationen.";
$a->strings["An author or name was not found."] = "Es wurde kein Autor oder Name gefunden.";
$a->strings["No browser URL could be matched to this address."] = "Zu dieser Adresse konnte keine passende Browser URL gefunden werden.";
$a->strings["Communication options with this network have been restricted."] = "Kommunikations-Optionen mit diesem Netzwerk wurden eingeschränkt.";
$a->strings["The profile address specified belongs to a network which has been disabled on this site."] = "Die Adresse dieses Profils gehört zu einem Netzwerk mit dem die Kommunikation auf dieser Seite ausgeschaltet wurde.";
$a->strings["Limited profile. This person will be unable to receive direct/personal notifications from you."] = "Eingeschränktes Profil. Diese Person wird keine direkten/privaten Nachrichten von dir erhalten können.";
$a->strings["Unable to retrieve contact information."] = "Konnte die Kontaktinformationen nicht empfangen.";
$a->strings["following"] = "folgen";
@ -759,7 +759,6 @@ $a->strings["Drop files here to upload"] = "Ziehe die Dateien hier her die du ho
$a->strings["Failed"] = "Fehlgeschlagen";
$a->strings["No files were uploaded."] = "Keine Dateien hochgeladen.";
$a->strings["Uploaded file is empty"] = "Hochgeladene Datei ist leer";
$a->strings["Uploaded file is too large"] = "Hochgeladene Datei ist zu groß";
$a->strings["File has an invalid extension, it should be one of "] = "Die Dateiextension ist nicht erlaubt, sie muss eine der folgenden sein ";
$a->strings["Upload was cancelled, or server error encountered"] = "Upload abgebrochen oder Serverfehler aufgetreten";
$a->strings["Impressum"] = "Impressum";
@ -795,6 +794,9 @@ $a->strings["If enabled all your <strong>public</strong> postings can be posted
$a->strings["Allow posting to StatusNet"] = "Nach StatusNet senden erlauben";
$a->strings["Send public postings to StatusNet by default"] = "Veröffentliche alle öffentlichen Beiträge auch bei StatusNet";
$a->strings["Clear OAuth configuration"] = "OAuth Konfiguration löschen";
$a->strings["API URL"] = "API URL";
$a->strings["Consumer Secret"] = "Benutzer Geheimnis";
$a->strings["Consumer Key"] = "Benutzer Schlüssel";
$a->strings["Piwik Base URL"] = "Piwik Basis URL";
$a->strings["Site ID"] = "Seiten ID";
$a->strings["Show opt-out cookie link?"] = "Link zum Setzen des Opt-Out Cookies anzeigen?";
@ -926,6 +928,7 @@ $a->strings["November"] = "November";
$a->strings["December"] = "Dezember";
$a->strings["bytes"] = "Byte";
$a->strings["Select an alternate language"] = "Alternative Sprache auswählen";
$a->strings["Sharing notification from Diaspora network"] = "Freigabe Benachrichtigung von Diaspora";
$a->strings["Embedding disabled"] = "Einbettungen deaktiviert";
$a->strings["Create a new group"] = "Neue Gruppe erstellen";
$a->strings["Everybody"] = "Alle Kontakte";

File diff suppressed because it is too large Load diff

View file

@ -24,6 +24,30 @@ $a->strings["Help:"] = "Guida:";
$a->strings["Help"] = "Guida";
$a->strings["File exceeds size limit of %d"] = "Il file supera il limite di dimensione di %d";
$a->strings["File upload failed."] = "Caricamento del file non riuscito.";
$a->strings["Friend suggestion sent."] = "Suggerimento di amicizia inviato.";
$a->strings["Suggest Friends"] = "Suggerisci Amici";
$a->strings["Suggest a friend for %s"] = "Suggerisci un amico a %s";
$a->strings["Status"] = "Stato";
$a->strings["Profile"] = "Profilo";
$a->strings["Photos"] = "Foto";
$a->strings["Events"] = "Eventi";
$a->strings["Personal Notes"] = "Note personali";
$a->strings["Create New Event"] = "Crea un nuovo Evento";
$a->strings["Previous"] = "Precendente";
$a->strings["Next"] = "Successivo";
$a->strings["l, F j"] = "l j F";
$a->strings["Edit event"] = "Modifca Evento";
$a->strings["link to source"] = "Collegamento all'originale";
$a->strings["hour:minute"] = "ora:minuti";
$a->strings["Event details"] = "Dettagli dell'Evento";
$a->strings["Format is %s %s. Starting date and Description are required."] = "Il formato è %s %s. La data di inizio e la descrizione sono obbligatori.";
$a->strings["Event Starts:"] = "L'Evento inizia:";
$a->strings["Finish date/time is not known or not relevant"] = "La data/l'ora di fine è sconosciuta o non importante";
$a->strings["Event Finishes:"] = "L'Evento finisce:";
$a->strings["Adjust for viewer timezone"] = "Regola nel fuso orario di chi legge";
$a->strings["Description:"] = "Descrizione";
$a->strings["Location:"] = "Posizione:";
$a->strings["Share this event"] = "Condividi questo Evento";
$a->strings["Cancel"] = "Annulla";
$a->strings["Tag removed"] = "TAg rimosso";
$a->strings["Remove Item Tag"] = "Rimuovi tag dall'elemento";
@ -32,6 +56,7 @@ $a->strings["Remove"] = "Rimuovi";
$a->strings["%s welcomes %s"] = "%s da il benvenuto a %s";
$a->strings["Photo Albums"] = "Album Foto";
$a->strings["Contact Photos"] = "Foto dei contatti";
$a->strings["everybody"] = "tutti";
$a->strings["Contact information unavailable"] = "Informazione sul contatto non disponibile";
$a->strings["Profile Photos"] = "Foto del profilo";
$a->strings["Album not found."] = "Album non trovato.";
@ -41,10 +66,12 @@ $a->strings["was tagged in a"] = "è stato taggato in";
$a->strings["photo"] = "foto";
$a->strings["by"] = "da";
$a->strings["Image exceeds size limit of "] = "L'immagine supera il limite di dimensione di ";
$a->strings["Image file is empty."] = "Il file dell'immagine è vuoto.";
$a->strings["Unable to process image."] = "Impossibile elaborare l'immagine.";
$a->strings["Image upload failed."] = "Caricamento immagine fallito.";
$a->strings["Public access denied."] = "Accesso pubblico non consentito.";
$a->strings["No photos selected"] = "Nessuna foto selezionata";
$a->strings["Access to this item is restricted."] = "L'accesso a questo elemento è limitato.";
$a->strings["Upload Photos"] = "Carica foto";
$a->strings["New album name: "] = "Nome nuovo album: ";
$a->strings["or existing album name: "] = "o nome di un album esistente: ";
@ -55,9 +82,7 @@ $a->strings["Photo not available"] = "Foto non disponibile";
$a->strings["Edit photo"] = "Modifica foto";
$a->strings["Use as profile photo"] = "Usa come foto del profilo";
$a->strings["Private Message"] = "Messaggio privato";
$a->strings["<< Prev"] = "<< Prec";
$a->strings["View Full Size"] = "Vedi dimensione intera";
$a->strings["Next >>"] = "Succ >>";
$a->strings["Tags: "] = "Tag: ";
$a->strings["[Remove any tag]"] = "[Rimuovi tutti i tag]";
$a->strings["New album name"] = "Nuovo nome album";
@ -74,6 +99,10 @@ $a->strings["Delete"] = "Cancella";
$a->strings["Recent Photos"] = "Foto recenti";
$a->strings["Upload New Photos"] = "Carica nuova foto";
$a->strings["View Album"] = "Vedi album";
$a->strings["Not available."] = "Non disponibile.";
$a->strings["Community"] = "Comunità";
$a->strings["No results."] = "Nessun risultato.";
$a->strings["Shared content is covered by the <a href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution 3.0</a> license."] = "Il contenuto in comune è coperto dalla licenza <a href=\"http://creativecommons.org/licenses/by/3.0/deed.it\">Creative Commons Attribuzione 3.0</a>.";
$a->strings["Item not found"] = "Elemento non trovato";
$a->strings["Edit post"] = "Modifica messaggio";
$a->strings["Post to Email"] = "Invia a Email";
@ -123,7 +152,7 @@ $a->strings["Administrator"] = "Amministratore";
$a->strings["Friend/Connection Request"] = "Richieste di Amicizia/Connessione";
$a->strings["Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca"] = "Esempi: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca";
$a->strings["Please answer the following:"] = "Rispondi al seguente:";
$a->strings["Does \$name know you?"] = "\$name ti conosce?";
$a->strings["Does %s know you?"] = "%s ti conosce?";
$a->strings["Yes"] = "Si";
$a->strings["No"] = "No";
$a->strings["Add a personal note:"] = "Aggiungi una nota personale:";
@ -146,14 +175,15 @@ $a->strings["You may need to import the file \"database.sql\" manually using php
$a->strings["Welcome to Friendika."] = "Benvenuto su Friendika.";
$a->strings["Friendika Social Network"] = "Friendika Social Network";
$a->strings["Installation"] = "Installazione";
$a->strings["In order to install Friendika we need to know how to contact your database."] = "Per installare Friendika dobbiamo sapere come contattare il tuo database.";
$a->strings["In order to install Friendika we need to know how to connect to your database."] = "Per instalare Friendika dobbiamo sapere come collegarci al tuo database.";
$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Contatta il tuo fornitore di hosting o l'amministratore del sito se hai domande su questi settaggi.";
$a->strings["The database you specify below must already exist. If it does not, please create it before continuing."] = "Il datatabase specificato qui sotto deve esistere. Se non è così, crealo prima di continuare.";
$a->strings["The database you specify below should already exist. If it does not, please create it before continuing."] = "Il database dovrà già esistere. Se non esiste, crealo prima di continuare.";
$a->strings["Database Server Name"] = "Nome Database Server";
$a->strings["Database Login Name"] = "Nome utente Database";
$a->strings["Database Login Password"] = "Password utente Database";
$a->strings["Database Name"] = "Nome Database";
$a->strings["Please select a default timezone for your website"] = "Seleziona un fuso orario di default per il tuo sito web";
$a->strings["Site administrator email address. Your account email address must match this in order to use the web admin panel."] = "Indirizzo email dell'amministratore del sito. L'email del tuo account deve corrispodere a questa, per poter utilizzare il pannello di amministrazione";
$a->strings["Could not find a command line version of PHP in the web server PATH."] = "Non riesco a trovare una versione da riga di comando di PHP nel PATH del server web";
$a->strings["This is required. Please adjust the configuration file .htconfig.php accordingly."] = "E' richiesto. Aggiorna il file .htconfig.php di conseguenza.";
$a->strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "La versione da riga di comando di PHP nel sistema non ha abilitato \"register_argc_argv\".";
@ -165,13 +195,16 @@ $a->strings["Error: libCURL PHP module required but not installed."] = "Errore:
$a->strings["Error: GD graphics PHP module with JPEG support required but not installed."] = "Errore: Il modulo GD graphics di PHP con supporto a JPEG è richiesto ma non installato.";
$a->strings["Error: openssl PHP module required but not installed."] = "Errore: il modulo openssl di PHP è richiesto ma non installato.";
$a->strings["Error: mysqli PHP module required but not installed."] = "Errore: il modulo mysqli di PHP è richiesto ma non installato";
$a->strings["Error: mb_string PHP module required but not installed."] = "Errore: il modulo PHP mb_string è richiesto ma non installato.";
$a->strings["The web installer needs to be able to create a file called \".htconfig.php\ in the top folder of your web server and it is unable to do so."] = "L'installazione web deve poter creare un file chiamato \".htconfig.php\" nella cartella principale del tuo web server ma non è in grado di farlo.";
$a->strings["This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can."] = "Ciò è dovuto spesso a impostazioni di permessi, dato che il web server puo' scrivere il file nella tua cartella, anche se tu puoi.";
$a->strings["Please check with your site documentation or support people to see if this situation can be corrected."] = "Controlla la documentazione del tuo sito o con il personale di suporto se la situazione puo' essere corretta.";
$a->strings["If not, you may be required to perform a manual installation. Please see the file \"INSTALL.txt\" for instructions."] = "Altrimenti dovrai procedere con l'installazione manuale. Guarda il file \"INSTALL.txt\" per istuzioni";
$a->strings["The database configuration file \".htconfig.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = "Il file di configurazione del database \".htconfig.php\" non puo' essere scritto. Usa il testo qui di seguito per creare un file di configurazione nella cartella principale del tuo sito.";
$a->strings["Errors encountered creating database tables."] = "Errori creando le tabelle nel database.";
$a->strings["[Embedded content - reload page to view]"] = "[Contenuto incorporato - ricarica la pagina per vederlo]";
$a->strings["Profile Match"] = "Profili combacianti";
$a->strings["No keywords to match. Please add keywords to your default profile."] = "Nessuna parola chiave per l'abbinamento. Aggiungi parole chiave al tuo profilo predefinito.";
$a->strings["No matches"] = "Nessun risultato";
$a->strings["Remote privacy information not available."] = "Informazioni remote sulla privacy non disponibili.";
$a->strings["Visible to:"] = "Visibile a:";
@ -182,21 +215,24 @@ $a->strings["Ignore"] = "Ignora";
$a->strings["Pending Friend/Connect Notifications"] = "Richieste di amicizia/connessione in attesa";
$a->strings["Show Ignored Requests"] = "Mostra richieste ignorate";
$a->strings["Hide Ignored Requests"] = "Nascondi richieste ignorate";
$a->strings["Notification type: "] = "Tipo di notifica: ";
$a->strings["Friend Suggestion"] = "Amico suggerito";
$a->strings["suggested by %s"] = "sugerito da %s";
$a->strings["Approve"] = "Approva";
$a->strings["Claims to be known to you: "] = "Dice di conoscerti: ";
$a->strings["yes"] = "si";
$a->strings["no"] = "no";
$a->strings["Approve as: "] = "Approva come: ";
$a->strings["Friend"] = "Amico";
$a->strings["Fan/Admirer"] = "Fan/Admiratore";
$a->strings["Notification type: "] = "Tipo di notifica: ";
$a->strings["Friend/Connect Request"] = "Richiesta Amicizia/Connessione";
$a->strings["New Follower"] = "Nuovo Seguace";
$a->strings["Approve"] = "Approva";
$a->strings["No notifications."] = "Nessuna notifica.";
$a->strings["User registrations waiting for confirm"] = "Richieste di registrazione in attesa di conferma";
$a->strings["Deny"] = "Nega";
$a->strings["No registrations."] = "Nessuna registrazione.";
$a->strings["Invite Friends"] = "Invita Amici";
$a->strings["%d invitation available"] = array(
0 => "%d invito disponibile",
1 => "%d inviti disponibili",
);
$a->strings["Find People With Shared Interests"] = "Trova persone che condividono i tuoi interessi";
$a->strings["Connect/Follow"] = "Connetti/Segui";
$a->strings["Example: bob@example.com, http://example.com/barbara"] = "Esempio: bob@example.com, http://example.com/barbara";
@ -218,6 +254,7 @@ $a->strings["Private communications are not available for this contact."] = "Le
$a->strings["Never"] = "Mai";
$a->strings["(Update was successful)"] = "(L'aggiornamento è stato completato)";
$a->strings["(Update was not successful)"] = "(L'aggiornamento non è stato completato)";
$a->strings["Suggest friends"] = "Suggerisci amici";
$a->strings["Contact Editor"] = "Editor dei Contatti";
$a->strings["Profile Visibility"] = "Visibilità del profilo";
$a->strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Seleziona il profilo che vuoi mostrare a %s quando visita il tuo profilo in modo sicuro.";
@ -226,7 +263,7 @@ $a->strings["Online Reputation"] = "Reputazione Online";
$a->strings["Occasionally your friends may wish to inquire about this person's online legitimacy."] = "Puo' capitare che i tuoi amici vogliano sapere la legittimità online dei questa persona.";
$a->strings["You may help them choose whether or not to interact with this person by providing a <em>reputation</em> to guide them."] = "Puoi aiutarli a scegliere se interagire o no con questa persona fornendo una <em>reputazione</em> per guidarli.";
$a->strings["Please take a moment to elaborate on this selection if you feel it could be helpful to others."] = "Prenditi un momento per pensare su questa selezione se senti che puo' essere utile ad altri.";
$a->strings["Visit \$name's profile"] = "Visita il profilo di \$name";
$a->strings["Visit %s's profile [%s]"] = "Visita il profilo di %s [%s]";
$a->strings["Block/Unblock contact"] = "Blocca/Sblocca contatto";
$a->strings["Ignore contact"] = "Ingnora il contatto";
$a->strings["Repair contact URL settings"] = "Sistema impostazioni URL del contatto";
@ -247,8 +284,8 @@ $a->strings["Show Blocked Connections"] = "Mostra connessioni bloccate";
$a->strings["Hide Blocked Connections"] = "Nascondi connessioni bloccate";
$a->strings["Finding: "] = "Cerco: ";
$a->strings["Find"] = "Trova";
$a->strings["Visit \$username's profile"] = "Visita il profilo di \$username";
$a->strings["Edit contact"] = "Modifca contatto";
$a->strings["No valid account found."] = "Nessun account valido trovato.";
$a->strings["Password reset request issued. Check your email."] = "Richiesta di reimpostazione pasword inviata. Controlla la tua email.";
$a->strings["Password reset requested at %s"] = "Richiesta recupero password su %s";
$a->strings["Request could not be verified. (You may have previously submitted it.) Password reset failed."] = "La richiesta non può essere verificata. (Puoi averla già richiesta precendentemente). Reimpostazione password fallita.";
@ -266,14 +303,16 @@ $a->strings["Passwords do not match. Password unchanged."] = "Le password non co
$a->strings["Empty passwords are not allowed. Password unchanged."] = "Password vuote non sono consentite. Password non cambiata.";
$a->strings["Password changed."] = "Password cambiata.";
$a->strings["Password update failed. Please try again."] = "Aggiornamento password fallito. Prova ancora.";
$a->strings["Failed to connect with email account using the settings provided."] = "Impossibile collegarsi all'account email con i parametri forniti.";
$a->strings[" Please use a shorter name."] = " Usa un nome più corto.";
$a->strings[" Name too short."] = " Nome troppo corto.";
$a->strings[" Not valid email."] = " Email non valida.";
$a->strings[" Cannot change to that email."] = "Non puoi usare quella email.";
$a->strings["Settings updated."] = "Impostazioni aggiornate.";
$a->strings["Plugin Settings"] = "Impostazioni Plugin";
$a->strings["Account Settings"] = "Impostazioni Account";
$a->strings["Account settings"] = "Parametri account";
$a->strings["Plugin settings"] = "Impostazioni plugin";
$a->strings["No Plugin settings configured"] = "Nessun Plugin ha delle configurazioni che puoi modificare";
$a->strings["Plugin Settings"] = "Impostazioni Plugin";
$a->strings["Normal Account"] = "Account normale";
$a->strings["This account is a normal personal profile"] = "Questo account è un normale profilo personale";
$a->strings["Soapbox Account"] = "Account Palco";
@ -282,14 +321,21 @@ $a->strings["Community/Celebrity Account"] = "Account Celebrità/Comunità";
$a->strings["Automatically approve all connection/friend requests as read-write fans"] = "Accetta automaticamente le richieste di connessione/amicizia come fan che possono scrivere in bacheca";
$a->strings["Automatic Friend Account"] = "Account Amico Automatico";
$a->strings["Automatically approve all connection/friend requests as friends"] = "Accetta automaticamente le richieste di connessione/amicizia come amici";
$a->strings["OpenID: "] = "OpenID: ";
$a->strings["&nbsp;(Optional) Allow this OpenID to login to this account."] = "&nbsp;(Opzionale) Permetti a questo OpenID di accedere a questo account.";
$a->strings["Publish your default profile in site directory?"] = "Pubblicare il tuo profilo di default nell'elenco del sito?";
$a->strings["Publish your default profile in global social directory?"] = "Pubblicare il tuo profilo di default nell'elenco sociale globale?";
$a->strings["OpenID:"] = "OpenID:";
$a->strings["(Optional) Allow this OpenID to login to this account."] = "(Opzionale) Consente di loggarti in questo account con questo OpenID";
$a->strings["Publish your default profile in your local site directory?"] = "Pubblica il tuo profilo predefinito nell'elenco locale del sito";
$a->strings["Publish your default profile in the global social directory?"] = "Pubblica il tuo profilo predefinito nell'elenco sociale globale";
$a->strings["Hide your contact/friend list from viewers of your default profile?"] = "Nascondi la lista dei tuoi contatti/amici dai visitatori del tuo profilo predefinito";
$a->strings["Hide profile details and all your messages from unknown viewers?"] = "Nascondi i dettagli del profilo e tutti i tuoi messaggi ai visitatori sconosciuti?";
$a->strings["Profile is <strong>not published</strong>."] = "Il profilo <strong>non è pubblicato</strong>.";
$a->strings["or"] = "o";
$a->strings["Your Identity Address is"] = "Il tuo Indirizzo Identità è";
$a->strings["Account Settings"] = "Impostazioni Account";
$a->strings["Export Personal Data"] = "Esporta i Dati Personali";
$a->strings["Password Settings"] = "Impostazioni Password";
$a->strings["New Password:"] = "Nuova Password:";
$a->strings["Confirm:"] = "Conferma:";
$a->strings["Leave password fields blank unless changing"] = "Lascia questi campi in bianco per non effettuare variazioni alla password";
$a->strings["Basic Settings"] = "Impostazioni base";
$a->strings["Full Name:"] = "Nome completo:";
$a->strings["Email Address:"] = "Indirizzo Email:";
@ -300,9 +346,11 @@ $a->strings["Display Theme:"] = "Tema:";
$a->strings["Security and Privacy Settings"] = "Impostazioni di Sicurezza e Privacy";
$a->strings["Maximum Friend Requests/Day:"] = "Numero massimo di richieste di amicizia per giorno:";
$a->strings["(to prevent spam abuse)"] = "(per prevenire lo spam)";
$a->strings["Default Post Permissions"] = "Permessi di default per i messaggi";
$a->strings["(click to open/close)"] = "(clicca per aprire/chiudere)";
$a->strings["Allow friends to post to your profile page:"] = "Permetti agli amici di inviare messaggi sulla tua bacheca:";
$a->strings["Automatically expire (delete) posts older than"] = "Cancella automaticamente i messaggi più vecchi di";
$a->strings["days"] = "giorni";
$a->strings["Automatically expire posts after days:"] = "Cancella automaticamente i messaggi dopo giorni:";
$a->strings["If empty, posts will not expire. Expired posts will be deleted"] = "Se lasciato vuoto, i messaggi non verranno cancellati.";
$a->strings["Notification Settings"] = "Impostazioni Notifiche";
$a->strings["Send a notification email when:"] = "Invia una mail di notifica quando:";
$a->strings["You receive an introduction"] = "Ricevi una presentazione";
@ -310,29 +358,27 @@ $a->strings["Your introductions are confirmed"] = "Le tue presentazioni sono con
$a->strings["Someone writes on your profile wall"] = "Qualcuno scrive sulla bacheca del tuo profilo";
$a->strings["Someone writes a followup comment"] = "Qualcuno scrive un commento a un tuo messaggio";
$a->strings["You receive a private message"] = "Ricevi un messaggio privato";
$a->strings["Password Settings"] = "Impostazioni Password";
$a->strings["Leave password fields blank unless changing"] = "Lascia questi campi in bianco per non effettuare variazioni alla password";
$a->strings["New Password:"] = "Nuova Password:";
$a->strings["Confirm:"] = "Conferma:";
$a->strings["Advanced Page Settings"] = "Impostazioni Avanzate Account";
$a->strings["Default Post Permissions"] = "Permessi di default per i messaggi";
$a->strings["(click to open/close)"] = "(clicca per aprire/chiudere)";
$a->strings["Email/Mailbox Setup"] = "Impostazioni Email";
$a->strings["If you wish to communicate with email contacts using this service (optional), please specify how to connect to your mailbox."] = "Se vuoi comunicare con i contatti email usando questo servizio, specifica come collegarti alla tua casella di posta. (opzionale)";
$a->strings["Last successful email check:"] = "Ultimo controllo email eseguito con successo:";
$a->strings["Email access is disabled on this site."] = "L'accesso Email è disabilitato su questo sito.";
$a->strings["IMAP server name:"] = "Nome server IMAP:";
$a->strings["IMAP port:"] = "Porta IMAP:";
$a->strings["Security (TLS or SSL):"] = "Sicurezza (TLS o SSL):";
$a->strings["Security:"] = "Sicurezza:";
$a->strings["None"] = "Nessuna";
$a->strings["Email login name:"] = "Nome utente Email:";
$a->strings["Email password:"] = "Password Email:";
$a->strings["Reply-to address (Optional):"] = "Indirizzo risposte (opzionale):";
$a->strings["Reply-to address:"] = "Indirizzo di risposta:";
$a->strings["Send public posts to all email contacts:"] = "Invia i messaggi pubblici ai contatti email:";
$a->strings["Email access is disabled on this site."] = "L'accesso Email è disabilitato su questo sito.";
$a->strings["Advanced Page Settings"] = "Impostazioni Avanzate Account";
$a->strings["Welcome back %s"] = "Bentornato %s";
$a->strings["Manage Identities and/or Pages"] = "Gestisci Indentità e/o Pagine";
$a->strings["(Toggle between different identities or community/group pages which share your account details.)"] = "(Passa tra diverse identità o pagine di comunità/gruppi che condividono i dettagli del tuo account.)";
$a->strings["Select an identity to manage: "] = "Seleziona una identità da gestire:";
$a->strings["Normal View"] = "Vista normale";
$a->strings["New Item View"] = "Vista Nuovi Elementi";
$a->strings["View Conversations"] = "Vedi conversazioni";
$a->strings["View New Items"] = "Vedi nuovi elementi";
$a->strings["View Any Items"] = "Vedi tutti gli elementi";
$a->strings["View Starred Items"] = "Vedi elementi preferiti";
$a->strings["Warning: This group contains %s member from an insecure network."] = array(
0 => "Attenzione: questo gruppo contiene %s membro da un network insicuro.",
1 => "Attenzione: questo gruppo contiene %s membri da un network insicuro.",
@ -344,9 +390,21 @@ $a->strings["Group: "] = "Gruppo: ";
$a->strings["Contact: "] = "Contatto:";
$a->strings["Private messages to this person are at risk of public disclosure."] = "I messaggi privati a questa persona sono a rischio di divulgazione al pubblico.";
$a->strings["Invalid contact."] = "Contatto non valido.";
$a->strings["Shared content is covered by the <a href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution 3.0</a> license."] = "Il contenuto in comune è coperto dalla licenza <a href=\"http://creativecommons.org/licenses/by/3.0/deed.it\">Creative Commons Attribuzione 3.0</a>.";
$a->strings["Private Notes"] = "Note Private";
$a->strings["Save"] = "Salva";
$a->strings["Welcome to Friendika"] = "Benvenuto in Friendika";
$a->strings["New Member Checklist"] = "Cose da fare per i Nuovi Utenti";
$a->strings["We would like to offer some tips and links to help make your experience enjoyable. Click any item to visit the relevant page."] = "Vorremmo offrire alcuni suggerimenti e link per contribuire a rendere la tua esperienza piacevole. Fai clic su un elemento per visitare la pagina corrispondente.";
$a->strings["On your <em>Settings</em> page - change your initial password. Also make a note of your Identity Address. This will be useful in making friends."] = "Nella tua pagina <em>Impostazioni</em> - cambia la tua password iniziale. E prendi nota del tuo Indirizzo Identità. Questo tornerà utile nello stringere amicizie.";
$a->strings["Review the other settings, particularly the privacy settings. An unpublished directory listing is like having an unlisted phone number. In general, you should probably publish your listing - unless all of your friends and potential friends know exactly how to find you."] = "Guarda le altre impostazioni, in particolare le impostazioni della privacy. Un profilo non pubblicato è come un numero di telefono non in elenco. In genere, dovresti pubblicare il tuo profilo - a meno che tutti i tuoi amici e potenziali tali sappiano esattamente come trovarti.";
$a->strings["Upload a profile photo if you have not done so already. Studies have shown that people with real photos of themselves are ten times more likely to make friends than people who do not."] = "Carica una foto del profilo se non l'hai ancora fatto. Studi hanno mostrato che persone che hanno vere foto di se stessi hanno dieci volte più probabilità di fare amicizie rispetto alle persone che non ce l'hanno.";
$a->strings["Authorise the Facebook Connector if you currently have a Facebook account and we will (optionally) import all your Facebook friends and conversations."] = "Autorizza il Facebook Connector se hai un account Facebook, e noi (opzionalmente) importeremo tuti i tuoi amici e le tue conversazioni da Facebook.";
$a->strings["Enter your email access information on your Settings page if you wish to import and interact with friends or mailing lists from your email INBOX"] = "Inserisci i dati per accedere alla tua email nella pagina Impostazioni se vuoi importare e interagire con amici o mailing list dalla posta in arrivo della tua email.";
$a->strings["Edit your <strong>default</strong> profile to your liking. Review the settings for hiding your list of friends and hiding the profile from unknown visitors."] = "Modifica il tuo profilo <strong>predefinito</strong> a piacimento. Rivedi le impostazioni per nascondere la tua lista di amici e nascondere il profilo ai visitatori sconosciuti.";
$a->strings["Set some public keywords for your default profile which describe your interests. We may be able to find other people with similar interests and suggest friendships."] = "Inserisci qualche parola chiave pubblica nel tuo profilo predefinito che descriva i tuoi interessi. Potremmo essere in grado di trovare altre persone con interessi similari e suggerirti delle amicizie.";
$a->strings["Your Contacts page is your gateway to managing friendships and connecting with friends on other networks. Typically you enter their address or site URL in the <em>Connect</em> dialog."] = "La pagina Contatti è il centro di controllo per la gestione delle amicizie e per collegarti ad amici su altri network. Basta che inserisci il loro indirizzo o l'URL del sito nel box <em>Connetti</em>.";
$a->strings["The Directory page lets you find other people in this network or other federated sites. Look for a <em>Connect</em> or <em>Follow</em> link on their profile page. Provide your own Identity Address if requested."] = "La pagina Elenco ti permette di trovare altre persone in questa rete o in altri siti. Cerca un link <em>Connetti</em> o <em>Segui</em> nella loro pagina del profilo. Inserisci il tuo Indirizzo Identità, se richiesto.";
$a->strings["Once you have made some friends, organize them into private conversation groups from the sidebar of your Contacts page and then you can interact with each group privately on your Network page."] = "Quando avrai alcuni amici, organizzali in gruppi di conversazioni private dalla barra laterale della tua pagina Contatti. Potrai interagire privatamente con ogni gruppo nella tua pagina Rete";
$a->strings["Our <strong>help</strong> pages may be consulted for detail on other program features and resources."] = "Le nostre pagine della <strong>guida</strong> possono essere consultate per avere dettagli su altre caratteristiche del programma e altre risorse.";
$a->strings["Item not available."] = "Elemento non disponibile.";
$a->strings["Item was not found."] = "Elemento non trovato.";
$a->strings["Group created."] = "Gruppo creato.";
@ -364,11 +422,12 @@ $a->strings["Members"] = "Membri";
$a->strings["All Contacts"] = "Tutti i Contatti";
$a->strings["Invalid profile identifier."] = "Indentificativo del profilo non valido.";
$a->strings["Profile Visibility Editor"] = "Modifica Visibilità del Profilo";
$a->strings["Profile"] = "Profilo";
$a->strings["Visible To"] = "Visibile A";
$a->strings["All Contacts (with secure profile access)"] = "Tutti i Contatti (con profilo ad accesso sicuro)";
$a->strings["View Contacts"] = "Guarda contatti";
$a->strings["No contacts."] = "Nessuno contatto.";
$a->strings["An invitation is required."] = "E' richiesto un invito.";
$a->strings["Invitation could not be verified."] = "L'invito non puo' essere verificato.";
$a->strings["Invalid OpenID url"] = "Url OpenID non valido";
$a->strings["Please enter the required information."] = "Inserisci le informazioni richieste.";
$a->strings["Please use a shorter name."] = "Usa un nome più corto.";
@ -392,6 +451,8 @@ $a->strings["You may (optionally) fill in this form via OpenID by supplying your
$a->strings["If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items."] = "Se non hai familiarità con OpenID, lascia quel campo in bianco e riempi il resto della maschera.";
$a->strings["Your OpenID (optional): "] = "Il tuo OpenID (opzionale): ";
$a->strings["Include your profile in member directory?"] = "Includi il tuo profilo nell'elenco dei membir?";
$a->strings["Membership on this site is by invitation only."] = "La registrazione su questo sito è solo su invito.";
$a->strings["Your invitation ID: "] = "L'ID del tuo invito:";
$a->strings["Registration"] = "Registrazione";
$a->strings["Your Full Name (e.g. Joe Smith): "] = "Il tuo Nome Completo (p.e. Mario Rossi): ";
$a->strings["Your Email Address: "] = "Il tuo Indirizzo Email: ";
@ -409,10 +470,9 @@ $a->strings["Bug reports and issues: please visit"] = "Segnalazioni di bug e pro
$a->strings["Suggestions, praise, donations, etc. - please email \"Info\" at Friendika - dot com"] = "Suggerimenti, preghiere, donazioni, etc - invia una email a \"Info\" at Friendika - dot.com";
$a->strings["Installed plugins/addons/apps"] = "Plugin/Addon/Applicazioni installate";
$a->strings["No installed plugins/addons/apps"] = "Nessuno plugin/addons/applicazione installata";
$a->strings["Please login."] = "Accedi.";
$a->strings["Registration revoked for %s"] = "Registrazione revocata per %s";
$a->strings["Account approved."] = "Account approvato.";
$a->strings["[Embedded content - reload page to view]"] = "[Contenuto incorporato - ricarica la pagina per vederlo]";
$a->strings["Registration revoked for %s"] = "Registrazione revocata per %s";
$a->strings["Please login."] = "Accedi.";
$a->strings["Unable to locate original post."] = "Impossibile trovare il messaggio originale.";
$a->strings["Empty post discarded."] = "Messaggio vuoto scartato.";
$a->strings["Wall Photos"] = "Foto Bacheca";
@ -425,7 +485,6 @@ $a->strings["This message was sent to you by %s, a member of the Friendika socia
$a->strings["You may visit them online at %s"] = "Puoi visitarli online presso %s";
$a->strings["Please contact the sender by replying to this post if you do not wish to receive these messages."] = "Contatta il mittente rispondendo a questo post se non vuoi ricevere questi messaggi.";
$a->strings["%s posted an update."] = "%s ha inviato un aggiornamento.";
$a->strings["Item not found."] = "Elemento non trovato.";
$a->strings["Image uploaded but image cropping failed."] = "L'immagine è stata caricata, ma il ritaglio è fallito.";
$a->strings["Image size reduction [%s] failed."] = "Riduzione della dimensione dell'immagine [%s] fallito.";
$a->strings["Unable to process image"] = "Impossibile elaborare l'immagine";
@ -439,6 +498,7 @@ $a->strings["Crop Image"] = "Ritaglia immagine";
$a->strings["Please adjust the image cropping for optimum viewing."] = "Sistema il ritaglio dell'imagine per una visualizzazione ottimale.";
$a->strings["Done Editing"] = "Fatto";
$a->strings["Image uploaded successfully."] = "Immagine caricata con successo.";
$a->strings["No profile"] = "Nessun profilo";
$a->strings["Remove My Account"] = "Rimuovi il mio Account";
$a->strings["This will completely remove your account. Once this has been done it is not recoverable."] = "Questo rimuoverà completamente il tuo account. Una volta rimosso non si potrà recuperarlo.";
$a->strings["Please enter your password for verification:"] = "Inserisci la tua password per verifica:";
@ -464,26 +524,112 @@ $a->strings["D, d M Y - g:i A"] = "D d M Y - G:i";
$a->strings["Message not available."] = "Messaggio non disponibile.";
$a->strings["Delete message"] = "Cancella messaggio";
$a->strings["Send Reply"] = "Invia risposta";
$a->strings["No profile"] = "Nessun profilo";
$a->strings["Site"] = "Sito";
$a->strings["Users"] = "Utenti";
$a->strings["Plugins"] = "Plugin";
$a->strings["Update"] = "Aggiorna";
$a->strings["Logs"] = "Log";
$a->strings["User registrations waiting for confirmation"] = "Utenti registrati in attesa di conferma";
$a->strings["Item not found."] = "Elemento non trovato.";
$a->strings["Administration"] = "Amministrazione";
$a->strings["Summary"] = "Sommario";
$a->strings["Registered users"] = "Utenti registrati";
$a->strings["Pending registrations"] = "Registrazioni in attesa";
$a->strings["Version"] = "Versione";
$a->strings["Active plugins"] = "Plugin attivi";
$a->strings["Site settings updated."] = "Impostazioni del sito aggiornate.";
$a->strings["Closed"] = "Chiusa";
$a->strings["Requires approval"] = "Richiede l'approvazione";
$a->strings["Open"] = "Aperta";
$a->strings["File upload"] = "Caricamento file";
$a->strings["Policies"] = "Politiche";
$a->strings["Advanced"] = "Avanzate";
$a->strings["Site name"] = "Nome del sito";
$a->strings["Banner/Logo"] = "Banner/Logo";
$a->strings["System language"] = "Lingua di sistema";
$a->strings["System theme"] = "Tema di sistema";
$a->strings["Maximum image size"] = "Massima dimensione immagini";
$a->strings["Register policy"] = "Politica di registrazione";
$a->strings["Register text"] = "Testo registrazione";
$a->strings["Allowed friend domains"] = "Domini amici consentiti";
$a->strings["Allowed email domains"] = "Domini email consentiti";
$a->strings["Block public"] = "Blocca pagine pubbliche";
$a->strings["Force publish"] = "Forza publicazione";
$a->strings["Global directory update URL"] = "URL aggiornamento Elenco Globale";
$a->strings["Block multiple registrations"] = "Blocca registrazioni multiple";
$a->strings["OpenID support"] = "Supporto OpenID";
$a->strings["Gravatar support"] = "Supporto Gravatar";
$a->strings["Fullname check"] = "Controllo nome completo";
$a->strings["UTF-8 Regular expressions"] = "Espressioni regolari UTF-8";
$a->strings["Show Community Page"] = "Mostra pagina Comunità";
$a->strings["Enable OStatus support"] = "Abilita supporto OStatus";
$a->strings["Only allow Friendika contacts"] = "Permetti solo contatti Friendika";
$a->strings["Verify SSL"] = "Verifica SSL";
$a->strings["Proxy user"] = "Utente Proxy";
$a->strings["Proxy URL"] = "URL Proxy";
$a->strings["Network timeout"] = "Timeout rete";
$a->strings["%s user blocked"] = array(
0 => "%s utente bloccato",
1 => "%s utenti bloccati/sbloccati",
);
$a->strings["%s user deleted"] = array(
0 => "%s utente cancellato",
1 => "%s utenti cancellati",
);
$a->strings["User '%s' deleted"] = "Utente '%s' cancellato";
$a->strings["User '%s' unblocked"] = "Utente '%s' sbloccato";
$a->strings["User '%s' blocked"] = "Utente '%s' bloccato";
$a->strings["select all"] = "seleziona tutti";
$a->strings["User registrations waiting for confirm"] = "Richieste di registrazione in attesa di conferma";
$a->strings["Request date"] = "Data richiesta";
$a->strings["Email"] = "Email";
$a->strings["No registrations."] = "Nessuna registrazione.";
$a->strings["Deny"] = "Nega";
$a->strings["Block"] = "Blocca";
$a->strings["Unblock"] = "Sblocca";
$a->strings["Register date"] = "Data registrazione";
$a->strings["Last login"] = "Ultimo accesso";
$a->strings["Last item"] = "Ultimo elemento";
$a->strings["Account"] = "Account";
$a->strings["Selected users will be deleted!\\n\\nEverything these users had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Gli utenti selezionati saranno cancellati!\\n\\nTutto quello che gli utenti hanno inviato su questo sito sarà permanentemente canellato!\\n\\nSei sicuro?";
$a->strings["The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "L'utente {0} sarà cancellato!\\n\\nTutto quello che ha inviato su questo sito sarà permanentemente canellato!\\n\\nSei sicuro?";
$a->strings["Plugin %s disabled."] = "Plugin %s disabilitato.";
$a->strings["Plugin %s enabled."] = "Plugin %s abilitato.";
$a->strings["Disable"] = "Disabilita";
$a->strings["Enable"] = "Abilita";
$a->strings["Toggle"] = "Inverti";
$a->strings["Settings"] = "Impostazioni";
$a->strings["Log settings updated."] = "Impostazioni Log aggiornate.";
$a->strings["Clear"] = "Pulisci";
$a->strings["Debugging"] = "Debugging";
$a->strings["Log file"] = "File di Log";
$a->strings["Must be writable by web server. Relative to your Friendika index.php."] = "Deve essere scrivibile dal server web. Relativo al file index.php della tua installazione Friendika.";
$a->strings["Log level"] = "Livello di Log";
$a->strings["Close"] = "Chiudi";
$a->strings["FTP Host"] = "Indirizzo FTP";
$a->strings["FTP Path"] = "Percorso FTP";
$a->strings["FTP User"] = "Utente FTP";
$a->strings["FTP Password"] = "Pasword FTP";
$a->strings["Access to this profile has been restricted."] = "L'accesso a questo profilo è stato limitato.";
$a->strings["Status"] = "Stato";
$a->strings["Photos"] = "Foto";
$a->strings["Tips for New Members"] = "Consigli per i Nuovi Utenti";
$a->strings["Login failed."] = "Accesso fallito.";
$a->strings["Welcome "] = "Benvenuto";
$a->strings["Please upload a profile photo."] = "Carica una foto per il profilo.";
$a->strings["Welcome back "] = "Bentornato ";
$a->strings["The profile address specified does not provide adequate information."] = "L'indirizzo del profilo specificato non fornisce adeguate informazioni.";
$a->strings["This site is not configured to allow communications with other networks."] = "Questo sito non è configurato per permettere la comunicazione con altri network.";
$a->strings["No compatible communication protocols or feeds were discovered."] = "Non sono stati trovati nessun protocollo di comunicazione o feed compatibili.";
$a->strings["The profile address specified does not provide adequate information."] = "L'indirizzo del profilo specificato non fornisce adeguate informazioni.";
$a->strings["An author or name was not found."] = "Non è stato trovato un nome dell'autore";
$a->strings["No browser URL could be matched to this address."] = "Nessun URL puo' essere associato a questo indirizzo.";
$a->strings["The profile address specified belongs to a network which has been disabled on this site."] = "L'indirizzo del profilo specificato appartiene a un network che è stato disabilitato su questo sito.";
$a->strings["Limited profile. This person will be unable to receive direct/personal notifications from you."] = "Profilo limitato. Questa persona non sarà in grado di ricevere nofiche dirette/personali da te.";
$a->strings["Unable to retrieve contact information."] = "Impossibile recuperare informazioni sul contatto.";
$a->strings["following"] = "segue";
$a->strings["Item has been removed."] = "L'elemento è stato rimosso.";
$a->strings["New mail received at "] = "Nuova mail ricevuta su ";
$a->strings["Applications"] = "Applicazioni";
$a->strings["No installed applications."] = "Nessuna applicazione installata.";
$a->strings["Search"] = "Cerca";
$a->strings["No results."] = "Nessun risultato.";
$a->strings["Profile not found."] = "Profilo non trovato.";
$a->strings["Profile Name is required."] = "Il Nome Profilo è richiesto .";
$a->strings["Profile updated."] = "Profilo aggiornato.";
@ -492,7 +638,6 @@ $a->strings["Profile-"] = "Profilo-";
$a->strings["New profile created."] = "Nuovo profilo creato.";
$a->strings["Profile unavailable to clone."] = "Impossibile duplicare il plrofilo.";
$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 profile details and all your messages from unknown viewers?"] = "Nascondi i dettagli del profilo e tutti i tuoi messaggi ai visitatori sconosciuti?";
$a->strings["Edit Profile Details"] = "Modifica i Dettagli del Profilo";
$a->strings["View this profile"] = "Visualizza questo profilo";
$a->strings["Create a new profile using these settings"] = "Crea un nuovo profilo usando queste impostazioni";
@ -502,7 +647,7 @@ $a->strings["Profile Name:"] = "Nome del profilo:";
$a->strings["Your Full Name:"] = "Il tuo nome completo:";
$a->strings["Title/Description:"] = "Breve descrizione (es. titolo, posizione, altro):";
$a->strings["Your Gender:"] = "Il tuo sesso:";
$a->strings["Birthday (y/m/d):"] = "Data di nascita (a/m/g):";
$a->strings["Birthday (%s):"] = "Compleanno (%s)";
$a->strings["Street Address:"] = "Indirizzo:";
$a->strings["Locality/City:"] = "Località/Città:";
$a->strings["Postal/Zip Code:"] = "CAP:";
@ -536,7 +681,7 @@ $a->strings["Profiles"] = "Profili";
$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["visible to everybody"] = "visibile a tutti";
$a->strings["Edit visibility"] = "Modifica visibilità";
$a->strings["Global Directory"] = "Elenco Globale";
$a->strings["Normal site view"] = "Vista normale";
@ -551,10 +696,12 @@ $a->strings["%d message sent."] = array(
0 => "%d messaggio inviato.",
1 => "%d messaggi inviati.",
);
$a->strings["You have no more invitations available"] = "Non hai altri inviti disponibili";
$a->strings["Send invitations"] = "Invia inviti";
$a->strings["Enter email addresses, one per line:"] = "Inserisci gli indirizzi email, uno per riga:";
$a->strings["Please join my social network on %s"] = "Unisciti al mio social network su %s";
$a->strings["To accept this invitation, please visit:"] = "Per accettare questo invito visita:";
$a->strings["You will need to supply this invitation code: \$invite_code"] = "Sarà necessario fornire questo codice invito: $ invite_code";
$a->strings["Once you have registered, please connect with me via my profile page at:"] = "Una volta registrato, connettiti con me sul mio profilo a:";
$a->strings["Response from remote site was not understood."] = "La risposta dal sito remota non è stata capita.";
$a->strings["Unexpected response from remote site: "] = "Risposta dal sito remoto inaspettata: ";
@ -579,14 +726,19 @@ $a->strings["Facebook Connect"] = "Facebook Connect";
$a->strings["Install Facebook connector for this account."] = "Installa Facebook connector per questo account";
$a->strings["Remove Facebook connector"] = "Rimuovi Facebook connector";
$a->strings["Post to Facebook by default"] = "Invia su Facebook di default";
$a->strings["Link all your Facebook friends and conversations"] = "Collega tutti i tuoi amici di Facebook e le conversazioni";
$a->strings["Warning: Your Facebook privacy settings can not be imported."] = "Attenzione: Le impostazioni di privacy di Facebook non possono essere importate.";
$a->strings["Linked Facebook items <strong>may</strong> be publicly visible, depending on your privacy settings for this website/account."] = "Gli elementi da Facebook <strong>possono</strong> essere visibili pubblicamente, a seconda delle tue impostazioni di privacy per questo sito/account";
$a->strings["Facebook"] = "Facebook";
$a->strings["Facebook Connector Settings"] = "Impostazioni Connettore Facebook";
$a->strings["Post to Facebook"] = "Invia a Facebook";
$a->strings["Post to Facebook cancelled because of multi-network access permission conflict."] = "Invio su Facebook annullato per un conflitto nei permessi di accesso.";
$a->strings["Image: "] = "Immagine: ";
$a->strings["View on Friendika"] = "Vedi su Friendika";
$a->strings["Widgets key: "] = "Chiave Widgets: ";
$a->strings["Facebook post failed. Queued for retry."] = "Invio a Facebook fallito. In attesa di riprovare.";
$a->strings["Generate new key"] = "Genera una nuova chiave";
$a->strings["Widgets key"] = "Chiave Widget";
$a->strings["Widgets available"] = "Widget disponibili";
$a->strings["Connect on Friendika!"] = "Connettiti su Friendika!";
$a->strings["Three Dimensional Tic-Tac-Toe"] = "Tic-Tac-Toe tridimensionale";
$a->strings["3D Tic-Tac-Toe"] = "3D Tic-Tac-Toe";
@ -602,18 +754,22 @@ $a->strings["\"Cat\" game!"] = "Stallo!";
$a->strings["I won!"] = "Ho vinto!";
$a->strings["Randplace Settings"] = "Impostazioni Randplace";
$a->strings["Enable Randplace Plugin"] = "Abilita il plugin Randplace";
$a->strings["Select files to upload: "] = "Seleziona i file da caricare: ";
$a->strings["Use the following controls only if the Java uploader [above] fails to launch."] = "Usa il seguente controllo solo se il il caricatore Java (qui sopra) non parte.";
$a->strings["Upload a file"] = "Carica un file";
$a->strings["Drop files here to upload"] = "Trascina un file qui per caricarlo";
$a->strings["Failed"] = "Fallito";
$a->strings["No files were uploaded."] = "Nessun file è stato caricato.";
$a->strings["Uploaded file is empty"] = "Il file caricato è vuoto";
$a->strings["Uploaded file is too large"] = "Il file caricato è troppo grande";
$a->strings["File has an invalid extension, it should be one of "] = "Il file ha una estensione non valida, dovrebbe essere una di ";
$a->strings["Upload was cancelled, or server error encountered"] = "Il caricamento è stato cancellato, o si è verificato un errore sul server";
$a->strings["Impressum"] = "Impressum";
$a->strings["Site Owner"] = "Proprietario del sito";
$a->strings["Email Address"] = "Indirizzo email";
$a->strings["Postal Address"] = "Indirizzo";
$a->strings["The impressum addon needs to be configured!<br />Please add at least the <tt>owner</tt> variable to your config file. For other variables please refer to the README file of the addon."] = "Il plugin Impressum deve essere configurato!<br>Aggiungi almeno il Proprietario del sito.";
$a->strings["Site Owners Profile"] = "Profilo del proprietario del sito";
$a->strings["Notes"] = "Note";
$a->strings["OEmbed settings updated"] = "Impostazioni OEmbed aggiornate";
$a->strings["Use OEmbed for YouTube videos: "] = "Usa OEmbed per i video da YouTube:";
$a->strings["Use OEmbed for YouTube videos"] = "Usa OEmbed per i video di YouTube";
$a->strings["URL to embed:"] = "URL da incorporare:";
$a->strings["Post to StatusNet"] = "Invia a StatusNet";
$a->strings["Please contact your site administrator.<br />The provided API URL is not valid."] = "Contatta l'amministratore del sito.<br/>L'URL delle API fornito non è valido.";
@ -634,18 +790,28 @@ $a->strings["Cancel Connection Process"] = "Annulla il processo di connessione";
$a->strings["Current StatusNet API is"] = "Le API StatusNet correnti sono";
$a->strings["Cancel StatusNet Connection"] = "Annulla la connessione a StatusNet";
$a->strings["Currently connected to: "] = "Al momento collegato con:";
$a->strings["If enabled all your <strong>public</strong> postings will be posted to the associated StatusNet account."] = "Se abilitato tutti i tuoi messaggi <strong>pubblici</strong> saranno inviati all'account StatuNet associato.";
$a->strings["If enabled all your <strong>public</strong> postings can be posted to the associated StatusNet account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = "Se abilitato tutti i tuoi messaggi <strong>pubblici</strong> possono essere inviati all'account StatusNet associato. Puoi scegliere di farlo sempre (qui) o ogni volta che invii, nelle impostazioni di privacy del messaggio.";
$a->strings["Allow posting to StatusNet"] = "Permetti l'invio a StatusNet";
$a->strings["Send public postings to StatusNet by default"] = "Di default invia i messaggi pubblici a StatusNet";
$a->strings["Clear OAuth configuration"] = "Cancella la configurazione OAuth";
$a->strings["API URL"] = "API URL";
$a->strings["Consumer Secret"] = "Consumer Secret";
$a->strings["Consumer Key"] = "Consumer Key";
$a->strings["Piwik Base URL"] = "Piwik Base URL";
$a->strings["Site ID"] = "Site ID";
$a->strings["Show opt-out cookie link?"] = "Mostra il link per il cookie opt-out?";
$a->strings["Post to Twitter"] = "Inva a Twitter";
$a->strings["Twitter settings updated."] = "Impostazioni di Twitter aggiornate.";
$a->strings["Twitter Posting Settings"] = "Impostazioni Invio a Twitter";
$a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Nessuna coopia di chiavi per Twitter trovata. Contatta il tuo amministratore del sito.";
$a->strings["At this Friendika instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to Twitter."] = "Questa installazione di Friendika ha il plugin Twitter abilitato, ma non hai ancora collegato il tuo account locale con il tuo account su Twitter. Per farlo, clicca il bottone qui sotto per ottenere un PIN da Twitter, che dovrai copiare nel box più sotto per poi inviare la form. Solo i tuoi messaggi <strong>pubblici</strong> verranno inviati anche su Twitter.";
$a->strings["Log in with Twitter"] = "Accedi con Twitter";
$a->strings["Copy the PIN from Twitter here"] = "Copia il PIN da Twitter qui";
$a->strings["If enabled all your <strong>public</strong> postings will be posted to the associated Twitter account as well."] = "Se abilitato tutti i tuoi messaggi <strong>pubblici</strong> verranno inviati anche sull'account Twitter associato.";
$a->strings["Send public postings to Twitter"] = "Invia messaggi pubblici su Twitter";
$a->strings["If enabled all your <strong>public</strong> postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = "Se abilitato tutti i tuoi messaggi <strong>pubblici</strong> possono essere inviati all'account Twitter associato. Puoi scegliere di farlo sempre (qui) o ogni volta che invii, nelle impostazioni di privacy del messaggio.";
$a->strings["Allow posting to Twitter"] = "Permetti l'invio a Twitter";
$a->strings["Send public postings to Twitter by default"] = "Invia sempre i messaggi pubblici a Twitter";
$a->strings["Consumer key"] = "Consumer key";
$a->strings["Consumer secret"] = "Consumer secret";
$a->strings["Gender:"] = "Genere:";
$a->strings["Birthday:"] = "Compleanno:";
$a->strings["j F, Y"] = "j F Y";
@ -729,28 +895,81 @@ $a->strings["Uncertain"] = "Incerto";
$a->strings["Complicated"] = "Complicato";
$a->strings["Don't care"] = "Non interessa";
$a->strings["Ask me"] = "Chiedimelo";
$a->strings["l F d, Y \\@ g:i A"] = "l d F Y \\@ G:i";
$a->strings["Starts:"] = "Inizia:";
$a->strings["Finishes:"] = "Finisce:";
$a->strings["prev"] = "prec";
$a->strings["first"] = "primo";
$a->strings["last"] = "ultimo";
$a->strings["next"] = "succ";
$a->strings["No contacts"] = "Nessun contatto";
$a->strings["%d Contact"] = array(
0 => "%d Contatto",
1 => "%d Contatti",
);
$a->strings["Monday"] = "Lunedì";
$a->strings["Tuesday"] = "Martedì";
$a->strings["Wednesday"] = "Mercoledì";
$a->strings["Thursday"] = "Giovedì";
$a->strings["Friday"] = "Venerdì";
$a->strings["Saturday"] = "Sabato";
$a->strings["Sunday"] = "Domenica";
$a->strings["January"] = "Gennaio";
$a->strings["February"] = "Febbraio";
$a->strings["March"] = "Marzo";
$a->strings["April"] = "Aprile";
$a->strings["May"] = "Maggio";
$a->strings["June"] = "Giugno";
$a->strings["July"] = "Luglio";
$a->strings["August"] = "Agosto";
$a->strings["September"] = "Settembre";
$a->strings["October"] = "Ottobre";
$a->strings["November"] = "Novembre";
$a->strings["December"] = "Dicembre";
$a->strings["bytes"] = "bytes";
$a->strings["Select an alternate language"] = "Seleziona una diversa lingua";
$a->strings["Sharing notification from Diaspora network"] = "Notifica di condivisione dal network Diaspora*";
$a->strings["Embedding disabled"] = "Inclusione disabilitata";
$a->strings["Create a new group"] = "Crea un nuovo gruppo";
$a->strings["Everybody"] = "Tutti";
$a->strings["Logout"] = "Esci";
$a->strings["End this session"] = "Finisci questa sessione";
$a->strings["Login"] = "Accedi";
$a->strings["Sign in"] = "Entra";
$a->strings["Home"] = "Home";
$a->strings["Home Page"] = "Home Page";
$a->strings["Create an account"] = "Crea un account";
$a->strings["Help and documentation"] = "Guida e documentazione";
$a->strings["Apps"] = "Applicazioni";
$a->strings["Addon applications, utilities, games"] = "Applicazioni, utilità e giochi aggiuntivi";
$a->strings["Search site content"] = "Cerca nel contenuto del sito";
$a->strings["Conversations on this site"] = "Conversazioni su questo sito";
$a->strings["Directory"] = "Elenco";
$a->strings["People directory"] = "Elenco delle persone";
$a->strings["Network"] = "Rete";
$a->strings["Conversations from your friends"] = "Conversazioni dai tuoi amici";
$a->strings["Your posts and conversations"] = "I tuoi messaggi e le tue conversazioni";
$a->strings["Notifications"] = "Notifiche";
$a->strings["Friend requests"] = "Richieste di amicizia";
$a->strings["Private mail"] = "Posta privata";
$a->strings["Manage"] = "Gestisci";
$a->strings["Settings"] = "Impostazioni";
$a->strings["Manage other pages"] = "Gestisci altre pagine";
$a->strings["Manage/edit profiles"] = "Gestisci/modifica i profili";
$a->strings["Manage/edit friends and contacts"] = "Gestisci/modifica amici e contatti";
$a->strings["Admin"] = "Amministrazione";
$a->strings["Site setup and configuration"] = "Configurazione del sito";
$a->strings["Logged out."] = "Sei uscito.";
$a->strings["Miscellaneous"] = "Varie";
$a->strings["less than a second ago"] = "meno di un secondo fa";
$a->strings["year"] = "anno";
$a->strings["years"] = "anni";
$a->strings["month"] = "mese";
$a->strings["day"] = "giorno";
$a->strings["never"] = "mai";
$a->strings["less than a second ago"] = "meno di un secondo fa";
$a->strings["years"] = "anni";
$a->strings["months"] = "mesi";
$a->strings["week"] = "settimana";
$a->strings["weeks"] = "settimane";
$a->strings["day"] = "giorno";
$a->strings["days"] = "giorni";
$a->strings["hour"] = "ora";
$a->strings["hours"] = "ore";
$a->strings["minute"] = "minuto";
@ -761,19 +980,23 @@ $a->strings[" ago"] = " fa";
$a->strings["From: "] = "Da: ";
$a->strings["Image/photo"] = "Immagine/foto";
$a->strings["Cannot locate DNS info for database server '%s'"] = "Non trovo le informazioni DNS per il database server '%s'";
$a->strings["Visible To:"] = "Visibile a:";
$a->strings["everybody"] = "tutti";
$a->strings["Groups"] = "Gruppi";
$a->strings["Except For:"] = "Eccetto per:";
$a->strings["Visible to everybody"] = "Visibile a tutti";
$a->strings["show"] = "mostra";
$a->strings["don't show"] = "non mostrare";
$a->strings["(no subject)"] = "(nessun oggetto)";
$a->strings["You have a new follower at "] = "Hai un nuovo seguace su ";
$a->strings["event"] = "evento";
$a->strings["View %s's profile"] = "Vedi il profilo di %s";
$a->strings["%s from %s"] = "%s da %s";
$a->strings["View in context"] = "Vedi nel contesto";
$a->strings["See more posts like this"] = "Vedi altri post come questo";
$a->strings["See all %d comments"] = "Vedi tutti i %d commenti";
$a->strings["Select"] = "Seleziona";
$a->strings["toggle star status"] = "Inverti stato preferito";
$a->strings["to"] = "a";
$a->strings["Wall-to-Wall"] = "Bacheca-A-Bacheca";
$a->strings["via Wall-To-Wall:"] = "sulla sua Bacheca:";
$a->strings["Delete Selected Items"] = "Cancella elementi selezionati";
$a->strings["View status"] = "Vedi stato";
$a->strings["View profile"] = "Vedi profilo";
$a->strings["View photos"] = "Vedi foto";
@ -801,44 +1024,13 @@ $a->strings["Password: "] = "Password: ";
$a->strings["Nickname/Email/OpenID: "] = "Soprannome/Email/OpenID: ";
$a->strings["Password (if not OpenID): "] = "Password (se non OpenID): ";
$a->strings["Forgot your password?"] = "Dimenticata la password?";
$a->strings["prev"] = "prec";
$a->strings["first"] = "primo";
$a->strings["last"] = "ultimo";
$a->strings["next"] = "succ";
$a->strings["No contacts"] = "Nessun contatto";
$a->strings["%d Contact"] = array(
0 => "%d Contatto",
1 => "%d Contatti",
);
$a->strings["Connect"] = "Connetti";
$a->strings["Location:"] = "Posizione:";
$a->strings[", "] = ", ";
$a->strings["Status:"] = "Stato:";
$a->strings["Monday"] = "Lunedì";
$a->strings["Tuesday"] = "Martedì";
$a->strings["Wednesday"] = "Mercoledì";
$a->strings["Thursday"] = "Giovedì";
$a->strings["Friday"] = "Venerdì";
$a->strings["Saturday"] = "Sabato";
$a->strings["Sunday"] = "Domenica";
$a->strings["January"] = "Gennaio";
$a->strings["February"] = "Febbraio";
$a->strings["March"] = "Marzo";
$a->strings["April"] = "Aprile";
$a->strings["May"] = "Maggio";
$a->strings["June"] = "Giugno";
$a->strings["July"] = "Luglio";
$a->strings["August"] = "Agosto";
$a->strings["September"] = "Settembre";
$a->strings["October"] = "Ottobre";
$a->strings["November"] = "Novembre";
$a->strings["December"] = "Dicembre";
$a->strings["g A l F d"] = "g A l d F";
$a->strings["Birthday Reminders"] = "Promemoria Compleanni";
$a->strings["Birthdays this week:"] = "Compleanni questa settimana:";
$a->strings["(Adjusted for local time)"] = "(Convertiti all'ora locale)";
$a->strings["[today]"] = "[oggi]";
$a->strings["bytes"] = "bytes";
$a->strings["link to source"] = "Collegamento all'originale";
$a->strings["Not Found"] = "Non Trovato";
$a->strings["Page not found."] = "Pagina non trovata.";

View file

@ -18,11 +18,12 @@
$pubkey
$diaspora
</div>
$marital
$homepage
$diaspora

View file

@ -62,3 +62,7 @@ footer {
}
input#dfrn-url {
background-color: #222222;
color: #FFFFFF !important;
}