Browse Source

Merge remote branch 'upstream/master'

pull/316/head
Michael Vogel 9 years ago
parent
commit
a71e3134bf
  1. 47
      INSTALL.txt
  2. 22
      boot.php
  3. BIN
      images/icons.png
  4. 6
      include/Photo.php
  5. 7
      include/auth.php
  6. 4
      include/config.php
  7. 1
      include/conversation.php
  8. 36
      include/crypto.php
  9. 2
      include/delivery.php
  10. 10
      include/directory.php
  11. 2
      include/items.php
  12. 32
      include/notifier.php
  13. 30
      include/socgraph.php
  14. 40
      include/text.php
  15. 6
      js/country.js
  16. 6
      js/main.js
  17. 17
      mod/admin.php
  18. 15
      mod/dfrn_confirm.php
  19. 3
      mod/dirfind.php
  20. 22
      mod/hostxrd.php
  21. 93
      mod/install.php
  22. 35
      mod/item.php
  23. 6
      mod/network.php
  24. 4
      mod/notes.php
  25. 72
      mod/photos.php
  26. 8
      mod/ping.php
  27. 2
      mod/profiles.php
  28. 2
      mod/redir.php
  29. 37
      mod/register.php
  30. 6
      mod/search.php
  31. 1101
      util/messages.po
  32. 4
      view/admin_summary.tpl
  33. 8
      view/de/friend_complete_eml.tpl
  34. 16
      view/de/intro_complete_eml.tpl
  35. 1547
      view/de/messages.po
  36. 28
      view/de/register_open_eml.tpl
  37. 103
      view/de/strings.php
  38. 1
      view/head.tpl
  39. 6
      view/install_checks.tpl
  40. 2
      view/photo_album.tpl
  41. 5
      view/photo_edit.tpl
  42. 4
      view/photo_top.tpl
  43. 1
      view/photos_recent.tpl
  44. 73
      view/theme/darkzero-NS/style.css
  45. 35
      view/theme/darkzero/style.css
  46. 7
      view/theme/diabook/diabook-dark/style-network.css
  47. 2
      view/theme/diabook/diabook-dark/style-profile.css
  48. 86
      view/theme/dispy/dark/style.css
  49. 263
      view/theme/dispy/dark/style.less
  50. 16
      view/theme/dispy/dark/theme.php
  51. 5
      view/theme/dispy/group_side.tpl
  52. 3
      view/theme/dispy/light/_base.less
  53. BIN
      view/theme/dispy/light/connect.png
  54. 92
      view/theme/dispy/light/style.css
  55. 274
      view/theme/dispy/light/style.less
  56. 12
      view/theme/dispy/light/theme.php
  57. 53
      view/theme/dispy/photo_edit.tpl
  58. 51
      view/theme/duepuntozero/profile_vcard.tpl
  59. 39
      view/theme/duepuntozero/style.css
  60. 1
      view/theme/slackr/birthdays_reminder.tpl
  61. 39
      view/theme/slackr/events_reminder.tpl
  62. 85
      view/theme/slackr/style.css
  63. 9
      view/theme/slackr/theme.php
  64. 0
      view/theme/testbubble/unsupported

47
INSTALL.txt

@ -222,3 +222,50 @@ Retry the installation. As soon as the database has been created,
% chmod 755 .htconfig.php
#####################################################################
- Some configurations with "suhosin" security are configured without
an ability to run external processes. Friendica requires this ability.
Following are some notes provided by one of our members.
#####################################################################
On my server I use the php protection system Suhosin
[http://www.hardened-php.net/suhosin/]. One of the things it does is to block
certain functions like proc_open, as configured in /etc/php5/conf.d/suhosin.ini:
suhosin.executor.func.blacklist = proc_open, ...
For those sites like Friendica that really need these functions they can be
enabled, e.g. in /etc/apache2/sites-available/friendica:
<Directory /var/www/friendica/>
php_admin_value suhosin.executor.func.blacklist none
php_admin_value suhosin.executor.eval.blacklist none
</Directory>
This enables every function for Friendica if accessed via browser, but not for
the cronjob that is called via php command line. I attempted to enable it for
cron by using something like
*/10 * * * * cd /var/www/friendica/friendica/ && sudo -u www-data /usr/bin/php
-d suhosin.executor.func.blacklist=none -d suhosin.executor.eval.blacklist=none
-f include/poller.php
This worked well for simple test cases, but the friendica-cron still failed with
a fatal error:
suhosin[22962]: ALERT - function within blacklist called: proc_open() (attacker
'REMOTE_ADDR not set', file '/var/www/friendica/friendica/boot.php', line 1341)
After a while I noticed, that include/poller.php calls further php script via
proc_open. These scripts themselves also use proc_open and fail, because they
are NOT called with -d suhosin.executor.func.blacklist=none.
So the simple solution is to put the correct parameters into .htconfig.php:
// Location of PHP command line processor
$a->config['php_path'] = '/usr/bin/php -d suhosin.executor.func.blacklist=none
-d suhosin.executor.eval.blacklist=none';
This is obvious as soon as you notice that the friendica-cron uses proc_open to
execute php-scripts that also use proc_open, but it took me quite some time to
find that out. I hope this saves some time for other people using suhosin with
function blacklists.

22
boot.php

@ -9,7 +9,7 @@ require_once('include/nav.php');
require_once('include/cache.php');
define ( 'FRIENDICA_PLATFORM', 'Friendica');
define ( 'FRIENDICA_VERSION', '3.0.1346' );
define ( 'FRIENDICA_VERSION', '3.0.1353' );
define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
define ( 'DB_UPDATE_VERSION', 1144 );
@ -511,6 +511,7 @@ if(! class_exists('App')) {
$tpl = file_get_contents('view/head.tpl');
$this->page['htmlhead'] = replace_macros($tpl,array(
'$baseurl' => $this->get_baseurl(), // FIXME for z_path!!!!
'$local_user' => local_user(),
'$generator' => 'Friendica' . ' ' . FRIENDICA_VERSION,
'$delitem' => t('Delete this item?'),
'$comment' => t('Comment'),
@ -1323,6 +1324,25 @@ if(! function_exists('proc_run')) {
$a = get_app();
$args = func_get_args();
$newargs = array();
if(! count($args))
return;
// expand any arrays
foreach($args as $arg) {
if(is_array($arg)) {
foreach($arg as $n) {
$newargs[] = $n;
}
}
else
$newargs[] = $arg;
}
$args = $newargs;
$arr = array('args' => $args, 'run_cmd' => true);
call_hooks("proc_run", $arr);

BIN
images/icons.png

Before

Width: 160  |  Height: 68  |  Size: 12 KiB

After

Width: 160  |  Height: 68  |  Size: 12 KiB

6
include/Photo.php

@ -87,6 +87,12 @@ class Photo {
}
public function rotate($degrees) {
$this->image = imagerotate($this->image,$degrees,0);
$this->width = imagesx($this->image);
$this->height = imagesy($this->image);
}
public function scaleImageUp($min) {

7
include/auth.php

@ -11,6 +11,13 @@ function nuke_session() {
unset($_SESSION['cid']);
unset($_SESSION['theme']);
unset($_SESSION['page_flags']);
unset($_SESSION['submanage']);
unset($_SESSION['my_url']);
unset($_SESSION['my_address']);
unset($_SESSION['addr']);
unset($_SESSION['return_url']);
unset($_SESSION['theme']);
unset($_SESSION['page_flags']);
}

4
include/config.php

@ -77,11 +77,9 @@ function get_config($family, $key, $instore = false) {
if(! function_exists('set_config')) {
function set_config($family,$key,$value) {
global $a;
// manage array value
$dbvalue = (is_array($value)?serialize($value):$value);
$dbvalue = (is_bool($value) ? intval($value) : $value);
$dbvalue = (is_bool($dbvalue) ? intval($dbvalue) : $dbvalue);
if(get_config($family,$key,true) === false) {
$a->config[$family][$key] = $value;
$ret = q("INSERT INTO `config` ( `cat`, `k`, `v` ) VALUES ( '%s', '%s', '%s' ) ",

1
include/conversation.php

@ -174,6 +174,7 @@ function localize_item(&$item){
}
}
}
/**

36
include/crypto.php

@ -292,4 +292,38 @@ function zot_unencapsulate($data,$prvkey) {
$ret['sender'] = $s;
$ret['data'] = aes_unencapsulate($x,$prvkey);
return $ret;
}
}
function new_keypair($bits) {
$openssl_options = array(
'digest_alg' => 'sha1',
'private_key_bits' => $bits,
'encrypt_key' => false
);
$conf = get_config('system','openssl_conf_file');
if($conf)
$openssl_options['config'] = $conf;
$result = openssl_pkey_new($openssl_options);
if(empty($result)) {
logger('new_keypair: failed');
return false;
}
// Get private key
$response = array('prvkey' => '', 'pubkey' => '');
openssl_pkey_export($result, $response['prvkey']);
// Get public key
$pkey = openssl_pkey_get_details($result);
$response['pubkey'] = $pkey["key"];
return $response;
}

2
include/delivery.php

@ -41,7 +41,7 @@ function delivery_run($argv, $argc){
for($x = 3; $x < $argc; $x ++) {
$contact_id = intval($argv[x]);
$contact_id = intval($argv[$x]);
// Some other process may have delivered this item already.

10
include/directory.php

@ -24,6 +24,9 @@ function directory_run($argv, $argc){
load_config('system');
load_hooks();
$a->set_baseurl(get_config('system','url'));
$dir = get_config('system','directory_submit_url');
@ -31,7 +34,12 @@ function directory_run($argv, $argc){
if(! strlen($dir))
return;
fetch_url($dir . '?url=' . bin2hex($argv[1]));
$arr = array('url' => $argv[1]);
call_hooks('globaldir_update', $arr);
if(strlen($arr['url']))
fetch_url($dir . '?url=' . bin2hex($arr['url']));
return;
}

2
include/items.php

@ -1010,7 +1010,7 @@ function tag_deliver($uid,$item_id) {
'otype' => 'item'
));
if((! $community_page) && (! prvgroup))
if((! $community_page) && (! $prvgroup))
return;

32
include/notifier.php

@ -478,24 +478,42 @@ function notifier_run($argv, $argc){
}
}
// This controls the number of deliveries to execute with each separate delivery process.
// By default we'll perform one delivery per process. Assuming a hostile shared hosting
// provider, this provides the greatest chance of deliveries if processes start getting
// killed. We can also space them out with the delivery_interval to also help avoid them
// getting whacked.
// If $deliveries_per_process > 1, we will chain this number of multiple deliveries
// together into a single process. This will reduce the overall number of processes
// spawned for each delivery, but they will run longer.
$deliveries_per_process = intval(get_config('system','delivery_batch_count'));
if($deliveries_per_process <= 0)
$deliveries_per_process = 1;
$this_batch = array();
foreach($r as $contact) {
for($x = 0; $x < count($r); $x ++) {
$contact = $r[$x];
if($contact['self'])
continue;
// potentially more than one recipient. Start a new process and space them out a bit.
// we will deliver single recipient types of message and email receipients here.
// we will deliver single recipient types of message and email recipients here.
if((! $mail) && (! $fsuggest) && (! $followup)) {
// deliveries per process not yet implemented, 1 delivery per process.
proc_run('php','include/delivery.php',$cmd,$item_id,$contact['id']);
if($interval)
@time_sleep_until(microtime(true) + (float) $interval);
$this_batch[] = $contact['id'];
if(count($this_batch) == $deliveries_per_process) {
proc_run('php','include/delivery.php',$cmd,$item_id,$this_batch);
$this_batch = array();
if($interval)
@time_sleep_until(microtime(true) + (float) $interval);
}
continue;
}

30
include/socgraph.php

@ -71,20 +71,24 @@ function poco_load($cid,$uid = 0,$zcid = 0,$url = null) {
$name = $entry->displayName;
foreach($entry->urls as $url) {
if($url->type == 'profile') {
$profile_url = $url->value;
continue;
}
if($url->type == 'webfinger') {
$connect_url = str_replace('acct:' , '', $url->value);
continue;
if(isset($entry->urls)) {
foreach($entry->urls as $url) {
if($url->type == 'profile') {
$profile_url = $url->value;
continue;
}
if($url->type == 'webfinger') {
$connect_url = str_replace('acct:' , '', $url->value);
continue;
}
}
}
foreach($entry->photos as $photo) {
if($photo->type == 'profile') {
$profile_photo = $photo->value;
continue;
}
if(isset($entry->photos)) {
foreach($entry->photos as $photo) {
if($photo->type == 'profile') {
$profile_photo = $photo->value;
continue;
}
}
}

40
include/text.php

@ -646,7 +646,7 @@ function search($s,$id='search-box',$url='/search',$save = false) {
$a = get_app();
$o = '<div id="' . $id . '">';
$o .= '<form action="' . $a->get_baseurl((stristr($url,'network')) ? true : false) . $url . '" method="get" >';
$o .= '<input type="text" name="search" id="search-text" value="' . $s .'" />';
$o .= '<input type="text" name="search" id="search-text" placeholder="' . t('Search') . '" value="' . $s .'" />';
$o .= '<input type="submit" name="submit" id="search-submit" value="' . t('Search') . '" />';
if($save)
$o .= '<input type="submit" name="save" id="search-save" value="' . t('Save') . '" />';
@ -901,24 +901,30 @@ function prepare_body($item,$attach = false) {
foreach($arr as $r) {
$matches = false;
$icon = '';
$cnt = preg_match('|\[attach\]href=\"(.*?)\" length=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"\[\/attach\]|',$r,$matches);
$cnt = preg_match_all('|\[attach\]href=\"(.*?)\" length=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"\[\/attach\]|',$r,$matches, PREG_SET_ORDER);
if($cnt) {
$icontype = strtolower(substr($matches[3],0,strpos($matches[3],'/')));
switch($icontype) {
case 'video':
case 'audio':
case 'image':
case 'text':
$icon = '<div class="attachtype icon s22 type-' . $icontype . '"></div>';
break;
default:
$icon = '<div class="attachtype icon s22 type-unkn"></div>';
break;
foreach($matches as $mtch) {
$icontype = strtolower(substr($mtch[3],0,strpos($mtch[3],'/')));
switch($icontype) {
case 'video':
case 'audio':
case 'image':
case 'text':
$icon = '<div class="attachtype icon s22 type-' . $icontype . '"></div>';
break;
default:
$icon = '<div class="attachtype icon s22 type-unkn"></div>';
break;
}
$title = ((strlen(trim($mtch[4]))) ? escape_tags(trim($mtch[4])) : escape_tags($mtch[1]));
$title .= ' ' . $mtch[2] . ' ' . t('bytes');
if((local_user() == $item['uid']) && $item['contact-id'] != $a->contact['id'])
$the_url = $a->get_baseurl() . '/redir/' . $item['contact-id'] . '?f=1&url=' . $mtch[1];
else
$the_url = $mtch[1];
$s .= '<a href="' . strip_tags($the_url) . '" title="' . $title . '" class="attachlink" target="external-link" >' . $icon . '</a>';
}
$title = ((strlen(trim($matches[4]))) ? escape_tags(trim($matches[4])) : escape_tags($matches[1]));
$title .= ' ' . $matches[2] . ' ' . t('bytes');
$s .= '<a href="' . strip_tags($matches[1]) . '" title="' . $title . '" class="attachlink" target="external-link" >' . $icon . '</a>';
}
}
$s .= '<div class="clear"></div></div>';

6
js/country.js

@ -9,7 +9,7 @@
//
var gLngMaxStateLength=0;
var gLngMaxCountryLength=0;
var gLngNumberCountries=252;
var gLngNumberCountries=253;
var gLngNumberStates=0;
var gLngSelectedCountry=0;
var gLngSelectedState=0;
@ -17,7 +17,7 @@ var gArCountryInfo;
var gArStateInfo;
// NOTE:
// Some editors may exhibit problems viewing 2803 characters...
var sCountryString = "|Afghanistan|Albania|Algeria|American Samoa|Angola|Anguilla|Antartica|Antigua and Barbuda|Argentina|Armenia|Aruba|Ashmore and Cartier Island|Australia|Austria|Azerbaijan|Bahamas|Bahrain|Bangladesh|Barbados|Belarus|Belgium|Belize|Benin|Bermuda|Bhutan|Bolivia|Bosnia and Herzegovina|Botswana|Brazil|British Virgin Islands|Brunei|Bulgaria|Burkina Faso|Burma|Burundi|Cambodia|Cameroon|Canada|Cape Verde|Cayman Islands|Central African Republic|Chad|Chile|China|Christmas Island|Clipperton Island|Cocos (Keeling) Islands|Colombia|Comoros|Congo, Democratic Republic of the|Congo, Republic of the|Cook Islands|Costa Rica|Cote d'Ivoire|Croatia|Cuba|Cyprus|Czech Republic|Denmark|Djibouti|Dominica|Dominican Republic|Ecuador|Egypt|El Salvador|Equatorial Guinea|Eritrea|Estonia|Ethiopia|Europa Island|Falkland Islands (Islas Malvinas)|Faroe Islands|Fiji|Finland|France|French Guiana|French Polynesia|French Southern and Antarctic Lands|Gabon|Gambia, The|Gaza Strip|Georgia|Germany|Ghana|Gibraltar|Glorioso Islands|Greece|Greenland|Grenada|Guadeloupe|Guam|Guatemala|Guernsey|Guinea|Guinea-Bissau|Guyana|Haiti|Heard Island and McDonald Islands|Holy See (Vatican City)|Honduras|Hong Kong|Howland Island|Hungary|Iceland|India|Indonesia|Iran|Iraq|Ireland|Ireland, Northern|Israel|Italy|Jamaica|Jan Mayen|Japan|Jarvis Island|Jersey|Johnston Atoll|Jordan|Juan de Nova Island|Kazakhstan|Kenya|Kiribati|Korea, North|Korea, South|Kuwait|Kyrgyzstan|Laos|Latvia|Lebanon|Lesotho|Liberia|Libya|Liechtenstein|Lithuania|Luxembourg|Macau|Macedonia, Former Yugoslav Republic of|Madagascar|Malawi|Malaysia|Maldives|Mali|Malta|Man, Isle of|Marshall Islands|Martinique|Mauritania|Mauritius|Mayotte|Mexico|Micronesia, Federated States of|Midway Islands|Moldova|Monaco|Mongolia|Montserrat|Morocco|Mozambique|Namibia|Nauru|Nepal|Netherlands|Netherlands Antilles|New Caledonia|New Zealand|Nicaragua|Niger|Nigeria|Niue|Norfolk Island|Northern Mariana Islands|Norway|Oman|Pakistan|Palau|Panama|Papua New Guinea|Paraguay|Peru|Philippines|Pitcaim Islands|Poland|Portugal|Puerto Rico|Qatar|Reunion|Romainia|Russia|Rwanda|Saint Helena|Saint Kitts and Nevis|Saint Lucia|Saint Pierre and Miquelon|Saint Vincent and the Grenadines|Samoa|San Marino|Sao Tome and Principe|Saudi Arabia|Scotland|Senegal|Seychelles|Sierra Leone|Singapore|Slovakia|Slovenia|Solomon Islands|Somalia|South Africa|South Georgia and South Sandwich Islands|Spain|Spratly Islands|Sri Lanka|Sudan|Suriname|Svalbard|Swaziland|Sweden|Switzerland|Syria|Taiwan|Tajikistan|Tanzania|Thailand|Tobago|Toga|Tokelau|Tonga|Trinidad|Tunisia|Turkey|Turkmenistan|Tuvalu|Uganda|Ukraine|United Arab Emirates|United Kingdom|Uruguay|USA|Uzbekistan|Vanuatu|Venezuela|Vietnam|Virgin Islands|Wales|Wallis and Futuna|West Bank|Western Sahara|Yemen|Yugoslavia|Zambia|Zimbabwe";
var sCountryString = "|Afghanistan|Albania|Algeria|American Samoa|Angola|Anguilla|Antartica|Antigua and Barbuda|Argentina|Armenia|Aruba|Ashmore and Cartier Island|Australia|Austria|Azerbaijan|Bahamas|Bahrain|Bangladesh|Barbados|Belarus|Belgium|Belize|Benin|Bermuda|Bhutan|Bolivia|Bosnia and Herzegovina|Botswana|Brazil|British Virgin Islands|Brunei|Bulgaria|Burkina Faso|Burma|Burundi|Cambodia|Cameroon|Canada|Cape Verde|Cayman Islands|Central African Republic|Chad|Chile|China|Christmas Island|Clipperton Island|Cocos (Keeling) Islands|Colombia|Comoros|Congo, Democratic Republic of the|Congo, Republic of the|Cook Islands|Costa Rica|Cote d'Ivoire|Croatia|Cuba|Cyprus|Czech Republic|Denmark|Djibouti|Dominica|Dominican Republic|Ecuador|Egypt|El Salvador|Equatorial Guinea|Eritrea|Estonia|Ethiopia|Europa Island|Falkland Islands (Islas Malvinas)|Faroe Islands|Fiji|Finland|France|French Guiana|French Polynesia|French Southern and Antarctic Lands|Gabon|Gambia, The|Gaza Strip|Georgia|Germany|Ghana|Gibraltar|Glorioso Islands|Greece|Greenland|Grenada|Guadeloupe|Guam|Guatemala|Guernsey|Guinea|Guinea-Bissau|Guyana|Haiti|Heard Island and McDonald Islands|Holy See (Vatican City)|Honduras|Hong Kong|Howland Island|Hungary|Iceland|India|Indonesia|Iran|Iraq|Ireland|Ireland, Northern|Israel|Italy|Jamaica|Jan Mayen|Japan|Jarvis Island|Jersey|Johnston Atoll|Jordan|Juan de Nova Island|Kazakhstan|Kenya|Kiribati|Korea, North|Korea, South|Kuwait|Kyrgyzstan|Laos|Latvia|Lebanon|Lesotho|Liberia|Libya|Liechtenstein|Lithuania|Luxembourg|Macau|Macedonia, Former Yugoslav Republic of|Madagascar|Malawi|Malaysia|Maldives|Mali|Malta|Man, Isle of|Marshall Islands|Martinique|Mauritania|Mauritius|Mayotte|Mexico|Micronesia, Federated States of|Midway Islands|Moldova|Monaco|Mongolia|Montserrat|Morocco|Mozambique|Namibia|Nauru|Nepal|Netherlands|Netherlands Antilles|New Caledonia|New Zealand|Nicaragua|Niger|Nigeria|Niue|Norfolk Island|Northern Mariana Islands|Norway|Oman|Pakistan|Palau|Panama|Papua New Guinea|Paraguay|Peru|Philippines|Pitcaim Islands|Poland|Portugal|Puerto Rico|Qatar|Reunion|Romainia|Russia|Rwanda|Saint Helena|Saint Kitts and Nevis|Saint Lucia|Saint Pierre and Miquelon|Saint Vincent and the Grenadines|Samoa|San Marino|Sao Tome and Principe|Saudi Arabia|Scotland|Senegal|Seychelles|Sierra Leone|Singapore|Slovakia|Slovenia|Solomon Islands|Somalia|South Africa|South Georgia and South Sandwich Islands|Spain|Spratly Islands|Sri Lanka|Sudan|Suriname|Svalbard|Swaziland|Sweden|Switzerland|Syria|Taiwan|Tajikistan|Tanzania|Thailand|Tobago|Toga|Tokelau|Tonga|Trinidad|Tunisia|Turkey|Turkmenistan|Tuvalu|Uganda|Ukraine|United Arab Emirates|United Kingdom|Uruguay|USA|Uzbekistan|Vanuatu|Venezuela|Vietnam|Virgin Islands|Wales|Wallis and Futuna|West Bank|Western Sahara|Yemen|Yugoslavia|Zambia|Zimbabwe|Friendicaland"
var aStates = new Array();
aStates[0]="";
@ -275,7 +275,7 @@ aStates[249]="|'Adan|'Ataq|Abyan|Al Bayda'|Al Hudaydah|Al Jawf|Al Mahrah|Al Mahw
aStates[250]="|Kosovo|Montenegro|Serbia|Vojvodina";
aStates[251]="|Central|Copperbelt|Eastern|Luapula|Lusaka|North-Western|Northern|Southern|Western";
aStates[252]="|Bulawayo|Harare|ManicalandMashonaland Central|Mashonaland East|Mashonaland West|Masvingo|Matabeleland North|Matabeleland South|Midlands";
aStates[253]="Self Hosted|Private Server|Architects Of Sleep|DFRN|Distributed Friend Network|Free-Beer.ch|Foojbook|Free-Haven|Friendica.eu|Friendika.me.4.it|Friendika - I Ask Questions|Frndc.com|Hipatia|Hungerfreunde|Kaluguran Community|Kak Ste?|Karl.Markx.pm|Loozah Social Club|MyFriendica.net|MyFriendNetwork|Oi!|OpenMindSpace|Oradons Friendica|Recolutionari.es|Sysfu Social Club|theshi.re|Tumpambae|Uzmiac|Other";
/*
* gArCountryInfo
* (0) Country name

6
js/main.js

@ -117,6 +117,9 @@
/* nav update event */
$('nav').bind('nav-update', function(e,data){;
var invalid = $(data).find('invalid').text();
if(invalid == 1) { window.location.href=window.location.href }
var net = $(data).find('net').text();
if(net == 0) { net = ''; $('#net-update').removeClass('show') } else { $('#net-update').addClass('show') }
$('#net-update').html(net);
@ -211,7 +214,8 @@
function NavUpdate() {
if(! stopped) {
$.get("ping",function(data) {
var pingCmd = 'ping' + ((localUser != 0) ? '?f=&uid=' + localUser : '');
$.get(pingCmd,function(data) {
$(data).find('result').each(function() {
// send nav-update event
$('nav').trigger('nav-update', this);

17
mod/admin.php

@ -115,7 +115,7 @@ function admin_content(&$a) {
$aside['logs'] = Array($a->get_baseurl(true)."/admin/logs/", t("Logs"), "logs");
$t = get_markup_template("admin_aside.tpl");
$a->page['aside'] = replace_macros( $t, array(
$a->page['aside'] .= replace_macros( $t, array(
'$admin' => $aside,
'$h_pending' => t('User registrations waiting for confirmation'),
'$admurl'=> $a->get_baseurl(true)."/admin/"
@ -182,6 +182,7 @@ function admin_page_summary(&$a) {
Array( t('Community/Celebrity Account'), 0),
Array( t('Automatic Friend Account'), 0)
);
$users=0;
foreach ($r as $u){ $accounts[$u['page-flags']][1] = $u['count']; $users+= $u['count']; }
@ -190,10 +191,22 @@ function admin_page_summary(&$a) {
$r = q("SELECT COUNT(id) as `count` FROM `register`");
$pending = $r[0]['count'];
$r = q("select count(*) as total from deliverq where 1");
$deliverq = (($r) ? $r[0]['total'] : 0);
$r = q("select count(*) as total from queue where 1");
$queue = (($r) ? $r[0]['total'] : 0);
// We can do better, but this is a quick queue status
$queues = array( 'label' => t('Message queues'), 'deliverq' => $deliverq, 'queue' => $queue );
$t = get_markup_template("admin_summary.tpl");
return replace_macros($t, array(
'$title' => t('Administration'),
'$page' => t('Summary'),
'$queues' => $queues,
'$users' => Array( t('Registered users'), $users),
'$accounts' => $accounts,
'$pending' => Array( t('Pending registrations'), $pending),
@ -417,7 +430,7 @@ function admin_page_site(&$a) {
'$maximagesize' => array('maximagesize', t("Maximum image size"), get_config('system','maximagesize'), t("Maximum size in bytes of uploaded images. Default is 0, which means no limits.")),
'$register_policy' => array('register_policy', t("Register policy"), $a->config['register_policy'], "", $register_choices),
'$register_text' => array('register_text', t("Register text"), htmlentities($a->config['register_text'], ENT_QUOTES), t("Will be displayed prominently on the registration page.")),
'$register_text' => array('register_text', t("Register text"), htmlentities($a->config['register_text'], ENT_QUOTES, 'UTF-8'), t("Will be displayed prominently on the registration page.")),
'$abandon_days' => array('abandon_days', t('Accounts abandoned after x days'), get_config('system','account_abandon_days'), t('Will not waste system resources polling external sites for abandonded accounts. Enter 0 for no time limit.')),
'$allowed_sites' => array('allowed_sites', t("Allowed friend domains"), get_config('system','allowed_sites'), t("Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains")),
'$allowed_email' => array('allowed_email', t("Allowed email domains"), get_config('system','allowed_email'), t("Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains")),

15
mod/dfrn_confirm.php

@ -144,19 +144,12 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
* worried about key leakage than anybody cracking it.
*
*/
require_once('include/crypto.php');
$res = openssl_pkey_new(array(
'digest_alg' => 'sha1',
'private_key_bits' => 4096,
'encrypt_key' => false )
);
$private_key = '';
openssl_pkey_export($res, $private_key);
$res = new_keypair(1024);
$pubkey = openssl_pkey_get_details($res);
$public_key = $pubkey["key"];
$private_key = $res['prvkey'];
$public_key = $res['pubkey'];
// Save the private key. Send them the public key.

3
mod/dirfind.php

@ -17,6 +17,9 @@ function dirfind_init(&$a) {
function dirfind_content(&$a) {
$search = notags(trim($_REQUEST['search']));
if(strpos($search,'@') === 0)
$search = substr($search,1);
$o = '';

22
mod/hostxrd.php

@ -8,26 +8,10 @@ function hostxrd_init(&$a) {
$pubkey = get_config('system','site_pubkey');
if(! $pubkey) {
$res = new_keypair(1024);
// should only have to ever do this once.
$res=openssl_pkey_new(array(
'digest_alg' => 'sha1',
'private_key_bits' => 4096,
'encrypt_key' => false ));
$prvkey = '';
openssl_pkey_export($res, $prvkey);
// Get public key
$pkey = openssl_pkey_get_details($res);
$pubkey = $pkey["key"];
set_config('system','site_prvkey', $prvkey);
set_config('system','site_pubkey', $pubkey);
set_config('system','site_prvkey', $res['prvkey']);
set_config('system','site_pubkey', $res['pubkey']);
}
$tpl = file_get_contents('view/xrd_host.tpl');

93
mod/install.php

@ -4,6 +4,12 @@ $install_wizard_pass=1;
function install_init(&$a){
// $baseurl/install/testrwrite to test if rewite in .htaccess is working
if ($a->argc==2 && $a->argv[1]=="testrewrite") {
echo "ok";
killme();
}
global $install_wizard_pass;
if (x($_POST,'pass'))
$install_wizard_pass = intval($_POST['pass']);
@ -110,14 +116,7 @@ function install_content(&$a) {
$wizard_status = "";
$install_title = t('Friendica Social Communications Server - Setup');
if(x($a->data,'txt') && strlen($a->data['txt'])) {
$tpl = get_markup_template('install.tpl');
return replace_macros($tpl, array(
'$title' => $install_title,
'$pass' => t('Database connection'),
'$text' => manual_config($a),
));
}
if(x($a->data,'db_conn_failed')) {
$install_wizard_pass = 2;
@ -128,39 +127,20 @@ function install_content(&$a) {
$wizard_status = t('Could not create table.');
}
$db_return_text="";
if(x($a->data,'db_installed')) {
$txt = '<p style="font-size: 130%;">';
$txt .= t('Your Friendica site database has been installed.') . EOL;
$txt .= t('IMPORTANT: You will need to [manually] setup a scheduled task for the poller.') . EOL ;
$txt .= t('Please see the file "INSTALL.txt".') . EOL ;
$txt .= '<br />';
$txt .= '<a href="' . $a->get_baseurl() . '/register' . '">' . t('Proceed to registration') . '</a>' ;
$txt .= '</p>';
$tpl = get_markup_template('install.tpl');
return replace_macros($tpl, array(
'$title' => $install_title,
'$pass' => t('Proceed with Installation'),
'$text' => $txt,
));
$db_return_text .= $txt;
}
if(x($a->data,'db_failed')) {
$txt = t('You may need to import the file "database.sql" manually using phpmyadmin or mysql.') . EOL;
$txt .= t('Please see the file "INSTALL.txt".') . EOL ."<hr>" ;
$txt .= "<pre>".$a->data['db_failed'] . "</pre>". EOL ;
$tpl = get_markup_template('install.tpl');
return replace_macros($tpl, array(
'$title' => $install_title,
'$pass' => t('Database connection'),
'$status' => t('Database import failed.'),
'$text' => $txt,
));
$db_return_text .= $txt;
}
if($db && $db->connected) {
$r = q("SELECT COUNT(*) as `total` FROM `user`");
if($r && count($r) && $r[0]['total']) {
@ -174,6 +154,19 @@ function install_content(&$a) {
}
}
if(x($a->data,'txt') && strlen($a->data['txt'])) {
$tpl = get_markup_template('install.tpl');
$db_return_text .= manual_config($a);
}
if ($db_return_text!="") {
return replace_macros($tpl, array(
'$title' => $install_title,
'$pass' => "",
'$text' => $db_return_text . what_next(),
));
}
switch ($install_wizard_pass){
case 1: { // System check
@ -191,7 +184,8 @@ function install_content(&$a) {
check_php($phpath, $checks);
check_htaccess($checks);
function check_passed($v, $c){
if ($c['required'])
$v = $v && $c['status'];
@ -321,14 +315,16 @@ function check_php(&$phpath, &$checks) {
$help = "";
if(!$passed) {
$help .= t('Could not find a command line version of PHP in the web server PATH.'). EOL;
$help .= t("If you don't have a command line version of PHP installed on server, you will not be able to run background polling via cron. See <a href='http://friendica.com/node/27'>'Activating scheduled tasks'</a>") . EOL ;
$help .= EOL . EOL ;
$tpl = get_markup_template('field_input.tpl');
$help .= replace_macros($tpl, array(
'$field' => array('phpath', t('PHP executable path'), $phpath, t('Enter full path to php executable')),
'$field' => array('phpath', t('PHP executable path'), $phpath, t('Enter full path to php executable. You can leave this blank to continue the installation.')),
));
$phpath="";
}
check_add($checks, t('Command line PHP'), $passed, true, $help);
check_add($checks, t('Command line PHP').($passed?" (<tt>$phpath</tt>)":""), $passed, false, $help);
if($passed) {
$str = autoname(8);
@ -422,14 +418,26 @@ function check_htconfig(&$checks) {
$status=false;
$help = t('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.') .EOL;
$help .= t('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.').EOL;
$help .= t('Please check with your site documentation or support people to see if this situation can be corrected.').EOL;
$help .= t('If not, you may be required to perform a manual installation. Please see the file "INSTALL.txt" for instructions.').EOL;
$help .= t('At the end of this procedure, we will give you a text to save in a file named .htconfig.php in your Friendica top folder.').EOL;
$help .= t('You can alternatively skip this procedure and perform a manual installation. Please see the file "INSTALL.txt" for instructions.').EOL;
}
check_add($checks, t('.htconfig.php is writable'), $status, true, $help);
check_add($checks, t('.htconfig.php is writable'), $status, false, $help);
}
function check_htaccess(&$checks) {
$a = get_app();
$status = true;
$help = "";
$test = fetch_url($a->get_baseurl()."/install/testrewrite");
if ($test!="ok") {
$status = false;
$help = t('Url rewrite in .htconfig is not working. Check your server configuration.');
}
check_add($checks, t('Url rewrite is working'), $status, true, $help);
}
function manual_config(&$a) {
$data = htmlentities($a->data['txt']);
@ -465,5 +473,16 @@ function load_database($db) {
return $errors;
}
function what_next() {
$a = get_app();
$baseurl = $a->get_baseurl();
return
t('<h1>What next</h1>')
."<p>".t('IMPORTANT: You will need to [manually] setup a scheduled task for the poller.')
.t('Please see the file "INSTALL.txt".')
."</p><p>"
.t("Go to your new Firendica node <a href='$baseurl/register'>registration page</a> and register as new user. Remember to use the same email you have entered as administrator email. This will allow you to enter the site admin panel.")
."</p>";
}

35
mod/item.php

@ -218,14 +218,23 @@ function item_post(&$a) {
$private = ((strlen($str_group_allow) || strlen($str_contact_allow) || strlen($str_group_deny) || strlen($str_contact_deny)) ? 1 : 0);
if(($parent_item) &&
(($parent_item['private'])
// If this is a comment, set the permissions from the parent.
if($parent_item) {
$private = 0;
if(($parent_item['private'])
|| strlen($parent_item['allow_cid'])
|| strlen($parent_item['allow_gid'])
|| strlen($parent_item['deny_cid'])
|| strlen($parent_item['deny_gid'])
)) {
$private = 1;
|| strlen($parent_item['deny_gid'])) {
$private = 1;
}
$str_contact_allow = $parent_item['allow_cid'];
$str_group_allow = $parent_item['allow_gid'];
$str_contact_deny = $parent_item['deny_cid'];
$str_group_deny = $parent_item['deny_gid'];
}
$pubmail_enable = ((x($_REQUEST,'pubmail_enable') && intval($_REQUEST['pubmail_enable']) && (! $private)) ? 1 : 0);
@ -281,18 +290,16 @@ function item_post(&$a) {
$author = null;
$self = false;
if(($_SESSION['uid']) && ($_SESSION['uid'] == $profile_uid)) {
if((local_user()) && (local_user() == $profile_uid)) {
$self = true;
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 1 LIMIT 1",
intval($_SESSION['uid'])
);
}
else {
if((x($_SESSION,'visitor_id')) && (intval($_SESSION['visitor_id']))) {
$r = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1",
intval($_SESSION['visitor_id'])
);
}
elseif(remote_user()) {
$r = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1",
intval(remote_user())
);
}
if(count($r)) {
@ -302,7 +309,7 @@ function item_post(&$a) {
// get contact info for owner
if($profile_uid == $_SESSION['uid']) {
if($profile_uid == local_user()) {
$contact_record = $author;
}
else {
@ -313,8 +320,6 @@ function item_post(&$a) {
$contact_record = $r[0];
}
$post_type = notags(trim($_REQUEST['type']));
if($post_type === 'net-comment') {

6
mod/network.php

@ -108,6 +108,10 @@ function network_content(&$a, $update = 0) {
return login(false);
}
$arr = array('query' => $a->query_string);
call_hooks('network_content_init', $arr);
$o = '';
// item filter tabs
@ -157,7 +161,7 @@ function network_content(&$a, $update = 0) {
$all_active = 'active';
}
$postord_active = '';
if($all_active && x($_GET,'order') && $_GET['order'] !== 'comment') {

4
mod/notes.php

@ -81,7 +81,7 @@ function notes_content(&$a,$update = false) {
$r = q("SELECT COUNT(*) AS `total`
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 and `item`.`moderated` = 0 AND `item`.`deleted` = 0
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `contact`.`self` = 1
AND `item`.`id` = `item`.`parent` AND `item`.`wall` = 0
$sql_extra ",
intval(local_user())
@ -96,7 +96,7 @@ function notes_content(&$a,$update = false) {
$r = q("SELECT `item`.`id` AS `item_id`, `contact`.`uid` AS `contact-uid`
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `contact`.`self` = 1
AND `item`.`id` = `item`.`parent` AND `item`.`wall` = 0
$sql_extra
ORDER BY `item`.`created` DESC LIMIT %d ,%d ",

72
mod/photos.php

@ -287,6 +287,7 @@ function photos_post(&$a) {
if(($a->argc > 2) && ((x($_POST,'desc') !== false) || (x($_POST,'newtag') !== false)) || (x($_POST,'albname') !== false)) {
$desc = ((x($_POST,'desc')) ? notags(trim($_POST['desc'])) : '');
$rawtags = ((x($_POST,'newtag')) ? notags(trim($_POST['newtag'])) : '');
$item_id = ((x($_POST,'item_id')) ? intval($_POST['item_id']) : 0);
@ -300,7 +301,61 @@ function photos_post(&$a) {
if(! strlen($albname))
$albname = datetime_convert('UTC',date_default_timezone_get(),'now', 'Y');
if((x($_POST,'rotate') !== false) && (intval($_POST['rotate']) == 1)) {
logger('rotate');
$r = q("select * from photo where `resource-id` = '%s' and uid = %d and scale = 0 limit 1",
dbesc($resource_id),
intval($page_owner_uid)
);
if(count($r)) {
$ph = new Photo($r[0]['data']);
if($ph->is_valid()) {
$ph->rotate(270);
$width = $ph->getWidth();
$height = $ph->getHeight();
$x = q("update photo set data = '%s', height = %d, width = %d where `resource-id` = '%s' and uid = %d and scale = 0 limit 1",
dbesc($ph->imageString()),
intval($height),
intval($width),
dbesc($resource_id),
intval($page_owner_uid)
);
if($width > 640 || $height > 640) {
$ph->scaleImage(640);
$width = $ph->getWidth();
$height = $ph->getHeight();
$x = q("update photo set data = '%s', height = %d, width = %d where `resource-id` = '%s' and uid = %d and scale = 1 limit 1",
dbesc($ph->imageString()),
intval($height),
intval($width),
dbesc($resource_id),
intval($page_owner_uid)
);
}
if($width > 320 || $height > 320) {
$ph->scaleImage(320);
$width = $ph->getWidth();
$height = $ph->getHeight();
$x = q("update photo set data = '%s', height = %d, width = %d where `resource-id` = '%s' and uid = %d and scale = 2 limit 1",
dbesc($ph->imageString()),
intval($height),
intval($width),
dbesc($resource_id),
intval($page_owner_uid)
);
}
}
}
}
$p = q("SELECT * FROM `photo` WHERE `resource-id` = '%s' AND `uid` = %d ORDER BY `scale` DESC",
dbesc($resource_id),
@ -977,9 +1032,16 @@ function photos_content(&$a) {
$tpl = get_markup_template('photo_album.tpl');
if(count($r))
$twist = 'rotright';
foreach($r as $rr) {
if($twist == 'rotright')
$twist = 'rotleft';
else
$twist = 'rotright';
$o .= replace_macros($tpl,array(
'$id' => $rr['id'],
'$twist' => ' ' . $twist . rand(2,4),
'$photolink' => $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $rr['resource-id'],
'$phototitle' => t('View Photo'),
'$imgsrc' => $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['scale'] . '.jpg',
@ -1098,7 +1160,7 @@ function photos_content(&$a) {
$photo = array(
'href' => $a->get_baseurl() . '/photo/' . $hires['resource-id'] . '-' . $hires['scale'] . '.jpg',
'title'=> t('View Full Size'),
'src' => $a->get_baseurl() . '/photo/' . $lores['resource-id'] . '-' . $lores['scale'] . '.jpg'
'src' => $a->get_baseurl() . '/photo/' . $lores['resource-id'] . '-' . $lores['scale'] . '.jpg' . '?f=&_u=' . datetime_convert('','','','ymdhis')
);
if($nextlink)
@ -1178,6 +1240,7 @@ function photos_content(&$a) {
$edit_tpl = get_markup_template('photo_edit.tpl');
$edit = replace_macros($edit_tpl, array(
'$id' => $ph[0]['id'],
'$rotate' => t('Rotate CW'),
'$album' => template_escape($ph[0]['album']),
'$newalbum' => t('New album name'),
'$nickname' => $a->data['user']['nickname'],
@ -1400,9 +1463,16 @@ function photos_content(&$a) {
$photos = array();
if(count($r)) {
$twist = 'rotright';
foreach($r as $rr) {
if($twist == 'rotright')
$twist = 'rotleft';
else
$twist = 'rotright';
$photos[] = array(
'id' => $rr['id'],
'twist' => ' ' . $twist . rand(2,4),
'link' => $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $rr['resource-id'],
'title' => t('View Photo'),
'src' => $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . ((($rr['scale']) == 6) ? 4 : $rr['scale']) . '.jpg',

8
mod/ping.php

@ -10,8 +10,16 @@ function ping_init(&$a) {
<result>";
$xmlhead="<"."?xml version='1.0' encoding='UTF-8' ?".">";
if(local_user()){
// Different login session than the page that is calling us.
if(intval($_GET['uid']) && intval($_GET['uid']) != local_user()) {
echo '<invalid>1</invalid></result>';
killme();
}
$firehose = intval(get_pconfig(local_user(),'system','notify_full'));
$t = q("select count(*) as total from notify where uid = %d and seen = 0",

2
mod/profiles.php

@ -146,7 +146,7 @@ function profiles_post(&$a) {
$value = $marital;
}
if($withchanged) {
$changes[] = '&hearts; ' . t('Romantic Partner');
$changes[] = '[color=#ff0000]&hearts;[/color] ' . t('Romantic Partner');
$value = strip_tags($with);
}
if($work != $orig[0]['work']) {

2
mod/redir.php

@ -6,7 +6,7 @@ function redir_init(&$a) {
// traditional DFRN
if(local_user() && $a->argc == 2 && intval($a->argv[1])) {
if(local_user() && $a->argc > 1 && intval($a->argv[1])) {
$cid = $a->argv[1];

37
mod/register.php

@ -171,26 +171,17 @@ function register_post(&$a) {
$new_password = autoname(6) . mt_rand(100,9999);
$new_password_encoded = hash('whirlpool',$new_password);
$res=openssl_pkey_new(array(
'digest_alg' => 'sha1',
'private_key_bits' => 4096,
'encrypt_key' => false ));
require_once('include/crypto.php');
// Get private key
$result = new_keypair(1024);
if(empty($res)) {
if($result === false) {
notice( t('SERIOUS ERROR: Generation of security keys failed.') . EOL);
return;
}
$prvkey = '';
openssl_pkey_export($res, $prvkey);
// Get public key
$pkey = openssl_pkey_get_details($res);
$pubkey = $pkey["key"];
$prvkey = $result['prvkey'];
$pubkey = $result['pubkey'];
/**
*
@ -203,21 +194,9 @@ function register_post(&$a) {
*
*/
$sres=openssl_pkey_new(array(
'digest_alg' => 'sha1',
'private_key_bits' => 512,
'encrypt_key' => false ));
// Get private key
$sprvkey = '';
openssl_pkey_export($sres, $sprvkey);
// Get public key
$spkey = openssl_pkey_get_details($sres);
$spubkey = $spkey["key"];
$sres = new_keypair(512);
$sprvkey = $sres['prvkey'];
$spubkey = $sres['pubkey'];
$r = q("INSERT INTO `user` ( `guid`, `username`, `password`, `email`, `openid`, `nickname`,
`pubkey`, `prvkey`, `spubkey`, `sprvkey`, `register_date`, `verified`, `blocked`, `timezone` )

6
mod/search.php

@ -80,7 +80,7 @@ function search_content(&$a) {
$o = '<div id="live-search"></div>' . "\r\n";
$o .= '<h3>' . t('Search This Site') . '</h3>';
$o .= '<h3>' . t('Search') . '</h3>';
if(x($a->data,'search'))
$search = notags(trim($a->data['search']));
@ -101,6 +101,10 @@ function search_content(&$a) {
$tag = true;
$search = substr($search,1);
}
if(strpos($search,'@') === 0) {
require_once('mod/dirfind.php');
return dirfind_content($a);
}
if(! $search)
return $o;

1101
util/messages.po
File diff suppressed because it is too large
View File

4
view/admin_summary.tpl

@ -1,6 +1,10 @@
<div id='adminpage'>
<h1>$title - $page</h1>
<dl>
<dt>$queues.label</dt>
<dd>$queues.deliverq - $queues.queue</dd>
</dl>
<dl>
<dt>$pending.0</dt>
<dd>$pending.1</dt>

8
view/de/friend_complete_eml.tpl

@ -4,15 +4,15 @@ Hallo $[username],
Großartige Neuigkeiten... '$[fn]' auf '$[dfrn_url]' hat
deine Kontaktanfrage auf '$[sitename]' bestätigt.
Ihr seit nun beidseitige Freunde und könnt Statusmitteilungen, Bilder und Emails
ohne einschränkungen austauschen.
Ihr seid nun beidseitige Freunde und könnt Statusmitteilungen, Bilder und Emails
ohne Einschränkungen austauschen.
Rufe deine 'Kontakte' Seite auf $[sitename] auf wenn du
Rufe deine 'Kontakte' Seite auf $[sitename] auf, wenn du
Änderungen an diesem Kontakt vornehmen willst.
$[siteurl]
[Du könntest z.B. ein spezielles Profil anlegen, das Informationen enthällt
[Du könntest z.B. ein spezielles Profil anlegen, das Informationen enthält,
die nicht für die breite Öffentlichkeit sichtbar sein sollen und es für '$[fn]' zum Betrachten freigeben].
Beste Grüße,

16
view/de/intro_complete_eml.tpl

@ -1,19 +1,19 @@
Hallo $[username],
'$[fn]' auf '$[dfrn_url]' wurde akzeptiert
Deine Verbindungsanfrage auf '$[sitename]'.
'$[fn]' auf '$[dfrn_url]' hat deine Verbindungsanfrage
auf '$[sitename]' akzeptiert.
'$[fn]' hat entschieden Dich als "Fan" zu akzeptieren, was ein
paar Formen der Kommunikation einschränkt - wie das schreiben von privaten Nachrichten und einige Profil
Interaktionen. Wenn das ein Promi-Konto oder eine Forum-Seite ist, werden die Einstellungen
automatisch angewendet.
'$[fn]' hat entschieden Dich als "Fan" zu akzeptieren, was zu einigen
Einschränkungen bei der Kommunikation führt - wie zB das Schreiben von privaten Nachrichten und einige Profil
Interaktionen. Sollte dies ein Promi-Konto oder eine Forum-Seite sein, werden die Einstellungen
automatisch angewandt.
'$[fn]' kann wählen, ob die Freundschaft in eine beidseitige oder alles erlaubende
Beziehung in der Zukunft erweitert wird.
Du empfängst jetzt die öffentlichen Beiträge von '$[fn]',
welche auf der "Netzwerk" Seite erscheinen werden
Du empfängst ab sofort die öffentlichen Beiträge von '$[fn]',
auf deiner "Netzwerk" Seite.
$[siteurl]

1547
view/de/messages.po
File diff suppressed because it is too large
View File

28
view/de/register_open_eml.tpl

@ -1,32 +1,32 @@
Hallo $[username],
Danke für deine Anmeldung auf $[sitename]. Dein Account wurde angelegt.
Die Login Details sind die folgenden:
Hier die Login Details:
Adresse der Seite: $[siteurl]
Login Name: $[email]
Passwort: $[password]
Du kannst das Passwort in den "Einstellungen" zu deinem Account ändern
nachdem du dich eingeloggt hast.
Du kannst und solltest das Passwort in den "Einstellungen" zu deinem Account ändern,
nachdem du dich erstmalig eingeloggt hast.
Bitte nimm dir einige Augenblicke Zeit um die anderen Einstellungen auf der Seite zu überprüfen.
Bitte nimm dir einige Augenblicke Zeit, um die anderen Einstellungen auf der Seite kennenzulernen und zu überprüfen.
Eventuell möchtest du außerdem einige grundlegenden Informationen in dein Standart-Profil eintragen
(auf der "Profile" Seite) damit andere Leute dich einfacher finden können.
Eventuell möchtest du außerdem einige grundlegende Informationen in deinem Standardprofil (auf der "Profile" Seite) eintragen,
damit andere Leute dich einfacher finden können.
Wir empfehlen den kompletten Namen anzugeben, ein eigenes Profil-Foto,
ein paar "Profil-Schlüsselwörter" anzugeben (damit man leichter Gleichinteressierte finden kann) - und
natürlich in welchen Land Du lebst; wenn Du es nicht genauer angeben möchtest
dann das.
Wir empfehlen den kompletten Namen anzugeben, ein eigenes Profilbild hochzuladen,
sowie ein paar "Profil-Schlüsselwörter" einzutragen (um leichter Menschen mit gleichen Interessen zu finden) - und
vielleicht auch in welchen Land du lebst; falls du nicht konkreter
werden möchtest.
Wir respektieren Ihr Recht auf Privatsphäre, und keines dieser Elemente sind notwendig.
Wenn Du hier neu bist und keinen kennst, wird man Dir helfen
ein paar neue und interessante Freunde zu finden.
Wir respektieren dein Recht auf Privatsphäre und keine dieser Angaben ist notwendig.
Wenn du ganz neu bei Friendica bist und niemanden kennst, werden sie dir aber helfen
ein paar neue und interessante Freunde zu finden.
Danke dir und willkommen auf $[sitename].
Danke und willkommen auf $[sitename].
Beste Grüße,
$[sitename] Administrator

103
view/de/strings.php

@ -10,7 +10,7 @@ $a->strings["Contact settings applied."] = "Einstellungen zum Kontakt angewandt.
$a->strings["Contact update failed."] = "Konnte den Kontakt nicht aktualisieren.";
$a->strings["Permission denied."] = "Zugriff verweigert.";
$a->strings["Contact not found."] = "Kontakt nicht gefunden.";
$a->strings["Repair Contact Settings"] = "Kontakt-Einstellungen reparieren";
$a->strings["Repair Contact Settings"] = "Kontakteinstellungen reparieren";
$a->strings["<strong>WARNING: This is highly advanced</strong> and if you enter incorrect information your communications with this contact may stop working."] = "<strong>ACHTUNG: Das sind Experten-Einstellungen!</strong> Wenn Du etwas Falsches eingibst, funktioniert die Kommunikation mit diesem Kontakt evtl. nicht mehr.";
$a->strings["Please use your browser 'Back' button <strong>now</strong> if you are uncertain what to do on this page."] = "Bitte nutze den Zurück-Button deines Browsers <strong>jetzt</strong>, wenn du dir unsicher bist, was du tun willst.";
$a->strings["Return to contact editor"] = "Zurück zum Kontakteditor";
@ -33,7 +33,7 @@ $a->strings["File upload failed."] = "Hochladen der Datei fehlgeschlagen.";
$a->strings["Friend suggestion sent."] = "Kontaktvorschlag gesendet.";
$a->strings["Suggest Friends"] = "Kontakte vorschlagen";
$a->strings["Suggest a friend for %s"] = "Schlage %s einen Kontakt vor";
$a->strings["Event description and start time are required."] = "Ereignis Beschreibung und Startzeit sind erforderlich.";
$a->strings["Event description and start time are required."] = "Ereignisbeschreibung und Startzeit sind erforderlich.";
$a->strings["l, F j"] = "l, F j";
$a->strings["Edit event"] = "Veranstaltung bearbeiten";
$a->strings["link to source"] = "Link zum Originalbeitrag";
@ -117,7 +117,7 @@ $a->strings["Community"] = "Gemeinschaft";
$a->strings["No results."] = "Keine Ergebnisse.";
$a->strings["This is Friendica, version"] = "Dies ist Friendica, Version";
$a->strings["running at web location"] = "die unter folgender Webadresse zu finden ist";
$a->strings["Please visit <a href=\"http://friendica.com\">Friendica.com</a> to learn more about the Friendica project."] = "Bitte besuche <a href=\"http://friendica.com\">Friendica.com</a> um mehr über das Friendica Projekt zu erfahren.";
$a->strings["Please visit <a href=\"http://friendica.com\">Friendica.com</a> to learn more about the Friendica project."] = "Bitte besuche <a href=\"http://friendica.com\">Friendica.com</a>, um mehr über das Friendica Projekt zu erfahren.";
$a->strings["Bug reports and issues: please visit"] = "Probleme oder Fehler gefunden? Bitte besuche";
$a->strings["Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - dot com"] = "Vorschläge, Lob, Spenden usw.: E-Mail an \"Info\" at Friendica - dot com";
$a->strings["Installed plugins/addons/apps:"] = "Installierte Plugins/Erweiterungen/Apps";
@ -185,7 +185,7 @@ $a->strings[" - please do not use this form. Instead, enter %s into your Diaspo
$a->strings["Your Identity Address:"] = "Adresse deines Profils:";
$a->strings["Submit Request"] = "Anfrage abschicken";
$a->strings["Friendica Social Communications Server - Setup"] = "Friendica-Server für soziale Netzwerke – Setup";
$a->strings["Database connection"] = "Datenbank-Verbindung";
$a->strings["Database connection"] = "Datenbankverbindung";
$a->strings["Could not connect to database."] = "Verbindung zur Datenbank gescheitert";
$a->strings["Could not create table."] = "Konnte Tabelle nicht erstellen.";
$a->strings["Your Friendica site database has been installed."] = "Die Datenbank deiner Friendica Seite wurde installiert.";
@ -235,7 +235,7 @@ $a->strings["This is most often a permission setting, as the web server may not
$a->strings["Please check with your site documentation or support people to see if this situation can be corrected."] = "Bitte überprüfe die Einstellungen und frage im Zweifelsfall dein Support Team, um diese Situation zu beheben.";
$a->strings["If not, you may be required to perform a manual installation. Please see the file \"INSTALL.txt\" for instructions."] = "Sollte dies nicht möglich sein, musst du die Installation manuell durchführen. Lies dazu bitte in der Datei \"INSTALL.txt\".";
$a->strings[".htconfig.php is writable"] = "Schreibrechte auf .htconfig.php";
$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."] = "Die Konfigurationsdatei \".htconfig.php\" konnte nicht angelegt werden. Bitte verwende den angefügten Text um die Datei im Stammverzeichnis deiner Friendica-Installation zu erzeugen.";
$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."] = "Die Konfigurationsdatei \".htconfig.php\" konnte nicht angelegt werden. Bitte verwende den angefügten Text, um die Datei im Stammverzeichnis deiner Friendica-Installation zu erzeugen.";
$a->strings["Errors encountered creating database tables."] = "Fehler aufgetreten während der Erzeugung der Datenbanktabellen.";
$a->strings["l F d, Y \\@ g:i A"] = "l F d, Y \\@ g:i A";
$a->strings["Time Conversion"] = "Zeitumrechnung";
@ -288,8 +288,8 @@ $a->strings["%s created a new post"] = "%s hat einen neuen Beitrag erstellt";
$a->strings["%s commented on %s's post"] = "%s hat %ss Beitrag kommentiert";
$a->strings["No more network notifications."] = "Keine weiteren Netzwerk-Benachrichtigungen.";
$a->strings["Network Notifications"] = "Netzwerk Benachrichtigungen";
$a->strings["No more system notifications."] = "Keine weiteren System Benachrichtigungen.";
$a->strings["System Notifications"] = "System Benachrichtigungen";
$a->strings["No more system notifications."] = "Keine weiteren Systembenachrichtigungen.";
$a->strings["System Notifications"] = "Systembenachrichtigungen";
$a->strings["No more personal notifications."] = "Keine weiteren persönlichen Benachrichtigungen";
$a->strings["Personal Notifications"] = "Persönliche Benachrichtigungen";
$a->strings["No more home notifications."] = "Keine weiteren Pinnwand-Benachrichtigungen";
@ -320,7 +320,7 @@ $a->strings["%d contact in common"] = array(
$a->strings["View all contacts"] = "Alle Kontakte anzeigen";
$a->strings["Unblock"] = "Entsperren";
$a->strings["Block"] = "Sperren";
$a->strings["Toggle Blocked status"] = "Geblockt-Sttaus ein-/ausschalten";
$a->strings["Toggle Blocked status"] = "Geblockt-Status ein-/ausschalten";
$a->strings["Unignore"] = "Ignorieren aufheben";
$a->strings["Toggle Ignored status"] = "Ignoriert-Status ein-/ausschalten";
$a->strings["Unarchive"] = "Unarchivieren";
@ -329,7 +329,7 @@ $a->strings["Toggle Archive status"] = "Archiviert-Status ein-/ausschalten";
$a->strings["Repair"] = "Reparieren";
$a->strings["Advanced Contact Settings"] = "Fortgeschrittene Kontakteinstellungen";
$a->strings["Contact Editor"] = "Kontakt Editor";
$a->strings["Profile Visibility"] = "Profil Anzeige";
$a->strings["Profile Visibility"] = "Profil-Sichtbarkeit";
$a->strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Bitte wähle eines deiner Profile das angezeigt werden soll, wenn %s dein Profil aufruft.";
$a->strings["Contact Information / Notes"] = "Kontakt Informationen / Notizen";
$a->strings["Edit contact notes"] = "Notizen zum Kontakt bearbiten";
@ -383,8 +383,8 @@ $a->strings["Forgot your Password?"] = "Hast du dein Passwort vergessen?";
$a->strings["Enter your email address and submit to have your password reset. Then check your email for further instructions."] = "Gib deine Email-Adresse an und fordere ein neues Passwort an. Es werden dir dann weitere Informationen per Mail zugesendet.";
$a->strings["Nickname or Email: "] = "Spitzname oder Email:";
$a->strings["Reset"] = "Zurücksetzen";
$a->strings["Account settings"] = "Account Einstellungen";
$a->strings[