Merge remote-tracking branch 'upstream/develop' into manage
This commit is contained in:
commit
d41399496e
50 changed files with 16732 additions and 15722 deletions
49
CHANGELOG
49
CHANGELOG
|
@ -1,24 +1,27 @@
|
||||||
Version 2019.09-dev (UNRELEASED)
|
Version 2019.09 (2019-09-29)
|
||||||
Friendica Core:
|
Friendica Core:
|
||||||
Update to the translations (CS, DE, FR, JA, NL, PL) [translation teams]
|
Update to the translations (CS, DE, EN GB, EN US, FR, JA, NL, PL) [translation teams]
|
||||||
Update to the themes (frio, vier) [JeroenED, MrPetovan, tobiasd, vinzv]
|
Update to the themes (frio, vier) [JeroenED, MrPetovan, tobiasd, vinzv]
|
||||||
Update to the documentation [guzzisti, vinzv]
|
Update to the documentation [annando, tobiasd, guzzisti, vinzv]
|
||||||
Enhanced the log output of the background process [annando]
|
Enhanced the log output of the background process [annando]
|
||||||
Enhanced the vcard translation in the profile (JeroenED)
|
Enhanced the vcard translation in the profile [JeroenED]
|
||||||
Enhanced the delivery count [annando]
|
Enhanced the delivery count [annando]
|
||||||
Enhanced ActivityPub envelopes [MrPetovan]
|
Enhanced ActivityPub envelopes [MrPetovan]
|
||||||
|
Enhanced communication about deleted accounts via AP [annando]
|
||||||
Enhanced the following process [annando]
|
Enhanced the following process [annando]
|
||||||
Enhanced the tests [nupplaphil]
|
Enhanced the tests [nupplaphil]
|
||||||
Enhanced the frontend worker [annando]
|
Enhanced the front-end worker [annando]
|
||||||
Enhanced the img format to allow alternative texts [annando]
|
Enhanced the img format to allow alternative texts [annando]
|
||||||
Enhanced the detection of supported protocols for contacts [annando]
|
Enhanced the detection of supported protocols for contacts [annando]
|
||||||
Enhanced the reshare of items [annando]
|
Enhanced the re-share of items [annando]
|
||||||
Enhanced 2FA process [MrPetovan]
|
Enhanced 2FA process [MrPetovan]
|
||||||
Enhanced server wide theme settings [MrPetovan]
|
Enhanced server wide theme settings [MrPetovan]
|
||||||
Enhanced config loading process [MrPetovan, nupplaphil]
|
Enhanced config loading process [MrPetovan, nupplaphil]
|
||||||
Enhanced handling of emoticons [MrPetovan]
|
Enhanced handling of emoticons [MrPetovan]
|
||||||
Fixed a bug in the admin panel leading to orphand options [tobiasd]
|
Enhanced performance [annando]
|
||||||
|
Fixed a bug in the admin panel leading to orphaned options [tobiasd]
|
||||||
Fixed a problem that could lead to duplicated Pleroma contacts [annando]
|
Fixed a problem that could lead to duplicated Pleroma contacts [annando]
|
||||||
|
Fixed a problem with the hide profile setting [annando]
|
||||||
Fixed the problem sending out the post when hitting the enter key in the ACL dialog [MrPetovan]
|
Fixed the problem sending out the post when hitting the enter key in the ACL dialog [MrPetovan]
|
||||||
Fixed a bug in HTML special character escaping of event titles [MrPetovan]
|
Fixed a bug in HTML special character escaping of event titles [MrPetovan]
|
||||||
Fixed a bug in HTML special character conversion in item titles [MrPetovan]
|
Fixed a bug in HTML special character conversion in item titles [MrPetovan]
|
||||||
|
@ -26,7 +29,19 @@ Version 2019.09-dev (UNRELEASED)
|
||||||
Fixed a bug that prevented the display of images in some postings from diaspora* [MrPetovan]
|
Fixed a bug that prevented the display of images in some postings from diaspora* [MrPetovan]
|
||||||
Fixed a bug in setting the permissions on uploaded images [annando]
|
Fixed a bug in setting the permissions on uploaded images [annando]
|
||||||
Fixed a bug that lead to potentially unwanted importing threads started by contacts of contacts [annando]
|
Fixed a bug that lead to potentially unwanted importing threads started by contacts of contacts [annando]
|
||||||
|
Fixed implicit self mentions [MrPetovan]
|
||||||
Fixed display of register links on closed nodes landing pages [MrPetovan]
|
Fixed display of register links on closed nodes landing pages [MrPetovan]
|
||||||
|
Fixed the display of [spoiler] tags [MrPetovan]
|
||||||
|
Fixed an issue with photo permissions in private mails [annando]
|
||||||
|
Fixed a bug in the process of following Pleroma accounts [annando]
|
||||||
|
Fixed a bug that caused notifications about locally deleted items [annando]
|
||||||
|
Fixed the link to the source of an event [MrPetovan]
|
||||||
|
Fixed a problem that caused authors from twitter postings having no profile pic [annando]
|
||||||
|
Fixed a bug in BBCode -> Markdown conversation for font size [annando]
|
||||||
|
Fixed a BBCode parser problem with the audio tag [MrPetovan]
|
||||||
|
Fixed a session problem [annando]
|
||||||
|
Fixed a problem with the auto-installer [nupplaphil]
|
||||||
|
Fixed a bug with magic links redirection for non profiles [annando]
|
||||||
General code cleaning [annando, MrPetovan, nupplaphil]
|
General code cleaning [annando, MrPetovan, nupplaphil]
|
||||||
Removed contacts auto completion (in /contacts [MrPetovan]
|
Removed contacts auto completion (in /contacts [MrPetovan]
|
||||||
Replaced FontAwesome by ForkAwesome in frio theme [vinzv]
|
Replaced FontAwesome by ForkAwesome in frio theme [vinzv]
|
||||||
|
@ -37,19 +52,29 @@ Version 2019.09-dev (UNRELEASED)
|
||||||
Added support of wildcards to server block lists [MrPetovan]
|
Added support of wildcards to server block lists [MrPetovan]
|
||||||
Added app specific passwords when using 2FA [MrPetovan]
|
Added app specific passwords when using 2FA [MrPetovan]
|
||||||
Added fetching of postings via URL to interact with public postings [annando]
|
Added fetching of postings via URL to interact with public postings [annando]
|
||||||
|
Added opt-out flag for federated search engines and associated header information for profiles [annando]
|
||||||
|
|
||||||
Friendica Addons:
|
Friendica Addons:
|
||||||
Update to the translation (CS, DE, FR, JA, NL SV) [translation teams]
|
Update to the translation (CS, DE, EN GB, EN US, ES, FR, JA, NL SV) [translation teams]
|
||||||
General code cleanup [nupplaphil, Quix0r]
|
General code cleanup [nupplaphil, Quix0r]
|
||||||
|
blockbot:
|
||||||
|
Added translations
|
||||||
|
Added more bots [annando]
|
||||||
|
Added admin panel settings [annando]
|
||||||
|
tumblr:
|
||||||
|
Changed used URLs to https adopting tumblrs change [annando]
|
||||||
twitter:
|
twitter:
|
||||||
Enhanced handling of multi image postings [annando]
|
Enhanced handling of multi image postings [annando]
|
||||||
|
Enhanced display of quoted tweets [MrPetovan]
|
||||||
Added alternative text support for images [annando]
|
Added alternative text support for images [annando]
|
||||||
|
|
||||||
Closed Issues:
|
Closed Issues:
|
||||||
3816, 4815, 6384, 6675, 7235, 7293, 7314, 7317, 7337, 7338, 7346,
|
870, 1605, 2199, 3239, 3816, 4117, 4815, 5721, 6384, 6521, 6553,
|
||||||
7350, 7367, 7383, 7396, 7397, 7401, 7406, 7408, 7426, 7428, 7456,
|
6675, 7212, 7235, 7285, 7293, 7314, 7317, 7337, 7338, 7346, 7350,
|
||||||
7442, 7457, 7468, 7471, 7473, 7488, 7497, 7498, 7501, 7507, 7522,
|
7367, 7383, 7396, 7397, 7401, 7406, 7408, 7426, 7428, 7456, 7442,
|
||||||
7527, 7536, 7542, 7545, 7576, 7586
|
7457, 7468, 7471, 7473, 7488, 7497, 7498, 7501, 7507, 7521, 7526,
|
||||||
|
7527, 7536, 7542, 7545, 7576, 7586, 7594, 7597, 7603, 7610, 7618,
|
||||||
|
7629, 7635, 7638, 7663, 7665, 7672
|
||||||
|
|
||||||
Version 2019.06 (2019-06-23)
|
Version 2019.06 (2019-06-23)
|
||||||
Friendica Core:
|
Friendica Core:
|
||||||
|
|
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
||||||
2019.09-rc
|
2019.12-dev
|
||||||
|
|
|
@ -36,6 +36,7 @@ use Dice\Dice;
|
||||||
use Friendica\App\Mode;
|
use Friendica\App\Mode;
|
||||||
use Friendica\BaseObject;
|
use Friendica\BaseObject;
|
||||||
use Friendica\Util\ExAuth;
|
use Friendica\Util\ExAuth;
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
if (sizeof($_SERVER["argv"]) == 0) {
|
if (sizeof($_SERVER["argv"]) == 0) {
|
||||||
die();
|
die();
|
||||||
|
@ -54,6 +55,8 @@ chdir($directory);
|
||||||
require dirname(__DIR__) . '/vendor/autoload.php';
|
require dirname(__DIR__) . '/vendor/autoload.php';
|
||||||
|
|
||||||
$dice = (new Dice())->addRules(include __DIR__ . '/../static/dependencies.config.php');
|
$dice = (new Dice())->addRules(include __DIR__ . '/../static/dependencies.config.php');
|
||||||
|
$dice = $dice->addRule(LoggerInterface::class,['constructParams' => ['auth_ejabberd']]);
|
||||||
|
|
||||||
BaseObject::setDependencyInjection($dice);
|
BaseObject::setDependencyInjection($dice);
|
||||||
|
|
||||||
$appMode = $dice->create(Mode::class);
|
$appMode = $dice->create(Mode::class);
|
||||||
|
|
|
@ -2,9 +2,11 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Dice\Dice;
|
use Dice\Dice;
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
require dirname(__DIR__) . '/vendor/autoload.php';
|
require dirname(__DIR__) . '/vendor/autoload.php';
|
||||||
|
|
||||||
$dice = (new Dice())->addRules(include __DIR__ . '/../static/dependencies.config.php');
|
$dice = (new Dice())->addRules(include __DIR__ . '/../static/dependencies.config.php');
|
||||||
|
$dice = $dice->addRule(LoggerInterface::class,['constructParams' => ['console']]);
|
||||||
|
|
||||||
(new Friendica\Core\Console($dice, $argv))->execute();
|
(new Friendica\Core\Console($dice, $argv))->execute();
|
||||||
|
|
|
@ -12,6 +12,7 @@ use Friendica\Core\Config;
|
||||||
use Friendica\Core\Logger;
|
use Friendica\Core\Logger;
|
||||||
use Friendica\Core\Worker;
|
use Friendica\Core\Worker;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
// Get options
|
// Get options
|
||||||
$shortopts = 'f';
|
$shortopts = 'f';
|
||||||
|
@ -33,6 +34,7 @@ if (!file_exists("boot.php") && (sizeof($_SERVER["argv"]) != 0)) {
|
||||||
require dirname(__DIR__) . '/vendor/autoload.php';
|
require dirname(__DIR__) . '/vendor/autoload.php';
|
||||||
|
|
||||||
$dice = (new Dice())->addRules(include __DIR__ . '/../static/dependencies.config.php');
|
$dice = (new Dice())->addRules(include __DIR__ . '/../static/dependencies.config.php');
|
||||||
|
$dice = $dice->addRule(LoggerInterface::class,['constructParams' => ['daemon']]);
|
||||||
|
|
||||||
\Friendica\BaseObject::setDependencyInjection($dice);
|
\Friendica\BaseObject::setDependencyInjection($dice);
|
||||||
$a = \Friendica\BaseObject::getApp();
|
$a = \Friendica\BaseObject::getApp();
|
||||||
|
|
|
@ -11,6 +11,7 @@ use Friendica\BaseObject;
|
||||||
use Friendica\Core\Config;
|
use Friendica\Core\Config;
|
||||||
use Friendica\Core\Update;
|
use Friendica\Core\Update;
|
||||||
use Friendica\Core\Worker;
|
use Friendica\Core\Worker;
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
// Get options
|
// Get options
|
||||||
$shortopts = 'sn';
|
$shortopts = 'sn';
|
||||||
|
@ -32,6 +33,7 @@ if (!file_exists("boot.php") && (sizeof($_SERVER["argv"]) != 0)) {
|
||||||
require dirname(__DIR__) . '/vendor/autoload.php';
|
require dirname(__DIR__) . '/vendor/autoload.php';
|
||||||
|
|
||||||
$dice = (new Dice())->addRules(include __DIR__ . '/../static/dependencies.config.php');
|
$dice = (new Dice())->addRules(include __DIR__ . '/../static/dependencies.config.php');
|
||||||
|
$dice = $dice->addRule(LoggerInterface::class,['constructParams' => ['worker']]);
|
||||||
|
|
||||||
BaseObject::setDependencyInjection($dice);
|
BaseObject::setDependencyInjection($dice);
|
||||||
$a = BaseObject::getApp();
|
$a = BaseObject::getApp();
|
||||||
|
|
17
boot.php
17
boot.php
|
@ -31,7 +31,7 @@ use Friendica\Util\DateTimeFormat;
|
||||||
|
|
||||||
define('FRIENDICA_PLATFORM', 'Friendica');
|
define('FRIENDICA_PLATFORM', 'Friendica');
|
||||||
define('FRIENDICA_CODENAME', 'Dalmatian Bellflower');
|
define('FRIENDICA_CODENAME', 'Dalmatian Bellflower');
|
||||||
define('FRIENDICA_VERSION', '2019.09-rc');
|
define('FRIENDICA_VERSION', '2019.12-dev');
|
||||||
define('DFRN_PROTOCOL_VERSION', '2.23');
|
define('DFRN_PROTOCOL_VERSION', '2.23');
|
||||||
define('NEW_UPDATE_ROUTINE_VERSION', 1170);
|
define('NEW_UPDATE_ROUTINE_VERSION', 1170);
|
||||||
|
|
||||||
|
@ -413,7 +413,7 @@ function public_contact()
|
||||||
*
|
*
|
||||||
* @return int|bool visitor_id or false
|
* @return int|bool visitor_id or false
|
||||||
*/
|
*/
|
||||||
function remote_user()
|
function remote_user($uid = null)
|
||||||
{
|
{
|
||||||
// You cannot be both local and remote.
|
// You cannot be both local and remote.
|
||||||
// Unncommented by rabuzarus because remote authentication to local
|
// Unncommented by rabuzarus because remote authentication to local
|
||||||
|
@ -422,13 +422,22 @@ function remote_user()
|
||||||
// return false;
|
// return false;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
if (empty($_SESSION)) {
|
if (empty($_SESSION['authenticated'])) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($_SESSION['authenticated']) && !empty($_SESSION['visitor_id'])) {
|
if (!is_null($uid) && !empty($_SESSION['remote'])) {
|
||||||
|
/// @todo replace it with this:
|
||||||
|
// if (!empty($_SESSION['remote'][$uid])) ...
|
||||||
|
foreach ($_SESSION['remote'] as $visitor) {
|
||||||
|
if ($visitor['uid'] == $uid) {
|
||||||
|
return $visitor['cid'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} elseif (is_null($uid) && !empty($_SESSION['visitor_id'])) {
|
||||||
return intval($_SESSION['visitor_id']);
|
return intval($_SESSION['visitor_id']);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
564
composer.lock
generated
564
composer.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -602,6 +602,9 @@ While taking pictures in the woods I had a really strange encounter...</td>
|
||||||
The [abstract] element is not working with connectors where we post HTML directly, like Tumblr, Wordpress or Pump.io.
|
The [abstract] element is not working with connectors where we post HTML directly, like Tumblr, Wordpress or Pump.io.
|
||||||
For the native connections--that is to e.g. Friendica, Hubzilla, Diaspora or GNU Social--the full posting is used and the contacts instance will display the posting as desired.
|
For the native connections--that is to e.g. Friendica, Hubzilla, Diaspora or GNU Social--the full posting is used and the contacts instance will display the posting as desired.
|
||||||
|
|
||||||
|
For postings that are delivered via ActivityPub, the text from the abstract is placed in the summary field.
|
||||||
|
On Mastodon this field is used for the content warning.
|
||||||
|
|
||||||
## Special
|
## Special
|
||||||
|
|
||||||
<table class="bbcodes">
|
<table class="bbcodes">
|
||||||
|
|
|
@ -580,6 +580,9 @@ Für Verbindungen zu Netzwerken, zu denen Friendica den HTML Code postet, wi
|
||||||
Bei nativen Verbindungen; das heißt zu z.B. Friendica, Hubzilla, Diaspora oder GNU Social Kontakten; wird der ungekürzte Beitrag übertragen.
|
Bei nativen Verbindungen; das heißt zu z.B. Friendica, Hubzilla, Diaspora oder GNU Social Kontakten; wird der ungekürzte Beitrag übertragen.
|
||||||
Die Instanz des Kontakts kümmert sich um die Darstellung.
|
Die Instanz des Kontakts kümmert sich um die Darstellung.
|
||||||
|
|
||||||
|
Wird ein Beitrag über das ActivityPub Protokoll übermittelt, wird der Text des Abstracts für das "summary" (Zusammenfassung) Feld verwendet.
|
||||||
|
Dieses Feld wird von Mastodon für die Inhaltswarnung (content warning) verwendet.
|
||||||
|
|
||||||
## Special
|
## Special
|
||||||
|
|
||||||
<table class="bbcodes">
|
<table class="bbcodes">
|
||||||
|
|
|
@ -10,24 +10,14 @@ Wir freuen uns nicht, wenn Leute Friendica verlassen, aber wenn du deinen Accoun
|
||||||
in deinem Webbrowser. Du musst dabei eingeloggt sein.
|
in deinem Webbrowser. Du musst dabei eingeloggt sein.
|
||||||
|
|
||||||
Du wirst nach deinem Passwort gefragt, um die Anfrage zu bestätigen.
|
Du wirst nach deinem Passwort gefragt, um die Anfrage zu bestätigen.
|
||||||
Wenn dieses mit deinem gespeichertem Passwort übereinstimmt, dann wird dein Account sofort gelöscht.
|
Wenn dieses mit deinem gespeichertem Passwort übereinstimmt, dann wird dein Account als "gelöscht" markiert.
|
||||||
Anders als andere Netzwerke, behalten wir die Daten **nicht** für eine gewisse Zeit, falls du deine Meinung noch änderst.
|
Dies passiert sofort und kann nicht rückgängig gemacht werden.
|
||||||
Deine Nutzerdetails, deine Unterhaltungen, deine Photos, deine Freunde - alles; wird sofort gelöscht und du wirst ausgeloggt.
|
Die meisten Deiner Inhalte und Benutzerdaten werden kurzfristig danach durch Hintergrundprozesse gelöscht.
|
||||||
|
|
||||||
Wenn Beiträge ablaufen, schicken wir Mitteilungen an Friendica, um diese zu löschen.
|
Parallel dazu senden wir eine Mitteilung an die Server deiner Kontakte, damit sie deine dort vorliegenden Daten ebenfalls löschen.
|
||||||
Diaspora hat keine automatische Löschfunktion, so dass diese Funktion in dem Netzwerk deaktiviert ist.
|
Wir haben keinen Einfluss darauf, wie sorgfältig und ob überhaupt diese Systeme der Löschaufforderung nachgehen.
|
||||||
Und hoffentlich ist klar, dass das Löschen auch in anderen Netzwerken nicht funktioniert.
|
|
||||||
Wenn du manuell einen Beitrag bzw. eine Reihe von Beiträgen löschst, dann senden wir individuelle Mitteilungen zu Friendica und Diaspora für jeden gelöschten Post.
|
|
||||||
|
|
||||||
Diaspora versäumt dieses oft.
|
Aus technischen Gründen benötigen wir für die Übetragung dieser Mitteilung ein paar Benutzerdaten.
|
||||||
|
Diese Daten werden dann nach einer Frist von etwa sieben Tagen ebenfalls gelöscht.
|
||||||
|
|
||||||
Wenn du einen Beitrag löscht, aber jemand diesem Beitrag folgt, wird es trotzdem gelöscht.
|
Wir speichern deinen Benutzernamen dauerhaft, damit sich niemand einen Account unter deinem Spitznamen anlegen kann.
|
||||||
Dein Wunsch hat Priorität.
|
|
||||||
|
|
||||||
Wenn du deinen Account löscht, dann löschen wir alle Beiträge, dein Profil, die Nutzerdaten etc. sofort.
|
|
||||||
|
|
||||||
Um einen Gesamtlöschauftrag zu versenden, bräuchten wir zunächst noch deinen Account; auch, um deinen Freunden zu zeigen, wer diese Anfrage stellt.
|
|
||||||
Das können wir nicht tun, wenn du keinen Account mehr hast.
|
|
||||||
|
|
||||||
Deine Freunde können möglicherweise noch deine Beiträge sehen, wenn dein Account gelöscht wurde, aber es gibt keinen öffentlichen Ort in Friendica mehr, wo diese angeschaut werden können.
|
|
||||||
Wenn du Freunde bei Diaspora hast, kann es sein, dass deine Beiträge weiterhin vorhanden und für andere aus diesem Netzwerk sichtbar sind.
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ if (!file_exists(__DIR__ . '/vendor/autoload.php')) {
|
||||||
require __DIR__ . '/vendor/autoload.php';
|
require __DIR__ . '/vendor/autoload.php';
|
||||||
|
|
||||||
$dice = (new Dice())->addRules(include __DIR__ . '/static/dependencies.config.php');
|
$dice = (new Dice())->addRules(include __DIR__ . '/static/dependencies.config.php');
|
||||||
|
$dice = $dice->addRule(Friendica\App\Mode::class, ['call' => [['determineRunMode', [false, $_SERVER], Dice::CHAIN_CALL]]]);
|
||||||
|
|
||||||
\Friendica\BaseObject::setDependencyInjection($dice);
|
\Friendica\BaseObject::setDependencyInjection($dice);
|
||||||
|
|
||||||
|
|
|
@ -227,6 +227,7 @@ function community_getitems($start, $itemspage, $content, $accounttype)
|
||||||
$values = [$start, $itemspage];
|
$values = [$start, $itemspage];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// @todo Use "unsearchable" here as well (instead of "hidewall")
|
||||||
$r = DBA::p("SELECT `item`.`uri`, `author`.`url` AS `author-link` FROM `thread`
|
$r = DBA::p("SELECT `item`.`uri`, `author`.`url` AS `author-link` FROM `thread`
|
||||||
STRAIGHT_JOIN `user` ON `user`.`uid` = `thread`.`uid` AND NOT `user`.`hidewall`
|
STRAIGHT_JOIN `user` ON `user`.`uid` = `thread`.`uid` AND NOT `user`.`hidewall`
|
||||||
STRAIGHT_JOIN `item` ON `item`.`id` = `thread`.`iid`
|
STRAIGHT_JOIN `item` ON `item`.`id` = `thread`.`iid`
|
||||||
|
@ -237,9 +238,9 @@ function community_getitems($start, $itemspage, $content, $accounttype)
|
||||||
return DBA::toArray($r);
|
return DBA::toArray($r);
|
||||||
} elseif ($content == 'global') {
|
} elseif ($content == 'global') {
|
||||||
if (!is_null($accounttype)) {
|
if (!is_null($accounttype)) {
|
||||||
$condition = ["`uid` = ? AND `owner`.`contact-type` = ?", 0, $accounttype];
|
$condition = ["`uid` = ? AND NOT `author`.`unsearchable` AND NOT `owner`.`unsearchable` AND `owner`.`contact-type` = ?", 0, $accounttype];
|
||||||
} else {
|
} else {
|
||||||
$condition = ['uid' => 0];
|
$condition = ["`uid` = ? AND NOT `author`.`unsearchable` AND NOT `owner`.`unsearchable`", 0];
|
||||||
}
|
}
|
||||||
|
|
||||||
$r = Item::selectThreadForUser(0, ['uri'], $condition, ['order' => ['commented' => true], 'limit' => [$start, $itemspage]]);
|
$r = Item::selectThreadForUser(0, ['uri'], $condition, ['order' => ['commented' => true], 'limit' => [$start, $itemspage]]);
|
||||||
|
|
|
@ -114,7 +114,7 @@ function dfrn_poll_init(App $a)
|
||||||
$_SESSION['remote'] = [];
|
$_SESSION['remote'] = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
$_SESSION['remote'][] = ['cid' => $r[0]['id'], 'uid' => $r[0]['uid'], 'url' => $r[0]['url']];
|
$_SESSION['remote'][$r[0]['uid']] = ['cid' => $r[0]['id'], 'uid' => $r[0]['uid']];
|
||||||
|
|
||||||
$_SESSION['visitor_id'] = $r[0]['id'];
|
$_SESSION['visitor_id'] = $r[0]['id'];
|
||||||
$_SESSION['visitor_home'] = $r[0]['url'];
|
$_SESSION['visitor_home'] = $r[0]['url'];
|
||||||
|
@ -521,7 +521,7 @@ function dfrn_poll_content(App $a)
|
||||||
$_SESSION['remote'] = [];
|
$_SESSION['remote'] = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
$_SESSION['remote'][] = ['cid' => $r[0]['id'], 'uid' => $r[0]['uid'], 'url' => $r[0]['url']];
|
$_SESSION['remote'][$r[0]['uid']] = ['cid' => $r[0]['id'], 'uid' => $r[0]['uid']];
|
||||||
$_SESSION['visitor_id'] = $r[0]['id'];
|
$_SESSION['visitor_id'] = $r[0]['id'];
|
||||||
$_SESSION['visitor_home'] = $r[0]['url'];
|
$_SESSION['visitor_home'] = $r[0]['url'];
|
||||||
$_SESSION['visitor_visiting'] = $r[0]['uid'];
|
$_SESSION['visitor_visiting'] = $r[0]['uid'];
|
||||||
|
|
|
@ -284,10 +284,6 @@ function item_post(App $a) {
|
||||||
|
|
||||||
$private = ((strlen($str_group_allow) || strlen($str_contact_allow) || strlen($str_group_deny) || strlen($str_contact_deny)) ? 1 : 0);
|
$private = ((strlen($str_group_allow) || strlen($str_contact_allow) || strlen($str_group_deny) || strlen($str_contact_deny)) ? 1 : 0);
|
||||||
|
|
||||||
if ($user['hidewall']) {
|
|
||||||
$private = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If this is a comment, set the permissions from the parent.
|
// If this is a comment, set the permissions from the parent.
|
||||||
|
|
||||||
if ($toplevel_item) {
|
if ($toplevel_item) {
|
||||||
|
|
|
@ -49,11 +49,15 @@ function notifications_post(App $a)
|
||||||
if ($_POST['submit'] == L10n::t('Discard')) {
|
if ($_POST['submit'] == L10n::t('Discard')) {
|
||||||
DBA::delete('intro', ['id' => $intro_id]);
|
DBA::delete('intro', ['id' => $intro_id]);
|
||||||
if (!$fid) {
|
if (!$fid) {
|
||||||
// The check for pending is in case the friendship was already approved
|
// When the contact entry had been created just for that intro, we want to get rid of it now
|
||||||
// and we just want to get rid of the pending contact
|
|
||||||
$condition = ['id' => $contact_id, 'uid' => local_user(),
|
$condition = ['id' => $contact_id, 'uid' => local_user(),
|
||||||
'self' => false, 'pending' => true, 'rel' => [0, Contact::FOLLOWER]];
|
'self' => false, 'pending' => true, 'rel' => [0, Contact::FOLLOWER]];
|
||||||
if (DBA::exists('contact', $condition)) {
|
$contact_pending = DBA::exists('contact', $condition);
|
||||||
|
|
||||||
|
// Remove the "pending" to stop the reappearing in any case
|
||||||
|
DBA::update('contact', ['pending' => false], ['id' => $contact_id]);
|
||||||
|
|
||||||
|
if ($contact_pending) {
|
||||||
Contact::remove($contact_id);
|
Contact::remove($contact_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -154,17 +154,8 @@ function photos_post(App $a)
|
||||||
|
|
||||||
if (local_user() && (local_user() == $page_owner_uid)) {
|
if (local_user() && (local_user() == $page_owner_uid)) {
|
||||||
$can_post = true;
|
$can_post = true;
|
||||||
} elseif ($community_page && remote_user()) {
|
} elseif ($community_page && remote_user($page_owner_uid)) {
|
||||||
$contact_id = 0;
|
$contact_id = remote_user($page_owner_uid);
|
||||||
|
|
||||||
if (!empty($_SESSION['remote']) && is_array($_SESSION['remote'])) {
|
|
||||||
foreach ($_SESSION['remote'] as $v) {
|
|
||||||
if ($v['uid'] == $page_owner_uid) {
|
|
||||||
$contact_id = $v['cid'];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($contact_id > 0) {
|
if ($contact_id > 0) {
|
||||||
if (DBA::exists('contact', ['id' => $contact_id, 'uid' => $page_owner_uid, 'blocked' => false, 'pending' => false])) {
|
if (DBA::exists('contact', ['id' => $contact_id, 'uid' => $page_owner_uid, 'blocked' => false, 'pending' => false])) {
|
||||||
|
|
|
@ -594,7 +594,7 @@ function profiles_content(App $a) {
|
||||||
'$default' => (($is_default) ? '<p id="profile-edit-default-desc">' . L10n::t('This is your <strong>public</strong> profile.<br />It <strong>may</strong> be visible to anybody using the internet.') . '</p>' : ""),
|
'$default' => (($is_default) ? '<p id="profile-edit-default-desc">' . L10n::t('This is your <strong>public</strong> profile.<br />It <strong>may</strong> be visible to anybody using the internet.') . '</p>' : ""),
|
||||||
'$name' => ['name', L10n::t('Your Full Name:'), $r[0]['name']],
|
'$name' => ['name', L10n::t('Your Full Name:'), $r[0]['name']],
|
||||||
'$pdesc' => ['pdesc', L10n::t('Title/Description:'), $r[0]['pdesc']],
|
'$pdesc' => ['pdesc', L10n::t('Title/Description:'), $r[0]['pdesc']],
|
||||||
'$dob' => Temporal::getDateofBirthField($r[0]['dob']),
|
'$dob' => Temporal::getDateofBirthField($r[0]['dob'], $a->user['timezone']),
|
||||||
'$hide_friends' => $hide_friends,
|
'$hide_friends' => $hide_friends,
|
||||||
'$address' => ['address', L10n::t('Street Address:'), $r[0]['address']],
|
'$address' => ['address', L10n::t('Street Address:'), $r[0]['address']],
|
||||||
'$locality' => ['locality', L10n::t('Locality/City:'), $r[0]['locality']],
|
'$locality' => ['locality', L10n::t('Locality/City:'), $r[0]['locality']],
|
||||||
|
|
|
@ -15,16 +15,16 @@ function redir_init(App $a) {
|
||||||
|
|
||||||
$url = defaults($_GET, 'url', '');
|
$url = defaults($_GET, 'url', '');
|
||||||
$quiet = !empty($_GET['quiet']) ? '&quiet=1' : '';
|
$quiet = !empty($_GET['quiet']) ? '&quiet=1' : '';
|
||||||
$con_url = defaults($_GET, 'conurl', '');
|
|
||||||
|
|
||||||
if ($a->argc > 1 && intval($a->argv[1])) {
|
if ($a->argc > 1 && intval($a->argv[1])) {
|
||||||
$cid = intval($a->argv[1]);
|
$cid = intval($a->argv[1]);
|
||||||
} elseif (local_user() && !empty($con_url)) {
|
|
||||||
$cid = Contact::getIdForURL($con_url, local_user());
|
|
||||||
} else {
|
} else {
|
||||||
$cid = 0;
|
$cid = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Try magic auth before the legacy stuff
|
||||||
|
redir_magic($a, $cid, $url);
|
||||||
|
|
||||||
if (!empty($cid)) {
|
if (!empty($cid)) {
|
||||||
$fields = ['id', 'uid', 'nurl', 'url', 'addr', 'name', 'network', 'poll', 'issued-id', 'dfrn-id', 'duplex', 'pending'];
|
$fields = ['id', 'uid', 'nurl', 'url', 'addr', 'name', 'network', 'poll', 'issued-id', 'dfrn-id', 'duplex', 'pending'];
|
||||||
$contact = DBA::selectFirst('contact', $fields, ['id' => $cid, 'uid' => [0, local_user()]]);
|
$contact = DBA::selectFirst('contact', $fields, ['id' => $cid, 'uid' => [0, local_user()]]);
|
||||||
|
@ -140,3 +140,63 @@ function redir_init(App $a) {
|
||||||
notice(L10n::t('Contact not found.'));
|
notice(L10n::t('Contact not found.'));
|
||||||
$a->internalRedirect();
|
$a->internalRedirect();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function redir_magic($a, $cid, $url)
|
||||||
|
{
|
||||||
|
$visitor = Profile::getMyURL();
|
||||||
|
if (!empty($visitor)) {
|
||||||
|
Logger::info('Got my url', ['visitor' => $visitor]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @todo Most likely these lines are superfluous. We will remove them in the next version
|
||||||
|
if (empty($visitor) && remote_user()) {
|
||||||
|
$contact = DBA::selectFirst('contact', ['url'], ['id' => remote_user()]);
|
||||||
|
if (!empty($contact['url'])) {
|
||||||
|
$visitor = $contact['url'];
|
||||||
|
Logger::info('Got remote user', ['visitor' => $visitor]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($visitor) && local_user()) {
|
||||||
|
$contact = DBA::selectFirst('contact', ['url'], ['id' => local_user()]);
|
||||||
|
if (!empty($contact['url'])) {
|
||||||
|
$visitor = $contact['url'];
|
||||||
|
Logger::info('Got local user', ['visitor' => $visitor]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$contact = DBA::selectFirst('contact', ['url'], ['id' => $cid]);
|
||||||
|
if (!DBA::isResult($contact)) {
|
||||||
|
Logger::info('Contact not found', ['id' => $cid]);
|
||||||
|
// Shouldn't happen under normal conditions
|
||||||
|
notice(L10n::t('Contact not found.'));
|
||||||
|
if (!empty($url)) {
|
||||||
|
$a->redirect($url);
|
||||||
|
} else {
|
||||||
|
$a->internalRedirect();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$contact_url = $contact['url'];
|
||||||
|
$target_url = defaults($url, $contact_url);
|
||||||
|
}
|
||||||
|
|
||||||
|
$basepath = Contact::getBasepath($contact_url);
|
||||||
|
|
||||||
|
// We don't use magic auth when there is no visitor, we are on the same system or we visit our own stuff
|
||||||
|
if (empty($visitor) || Strings::compareLink($basepath, System::baseUrl()) || Strings::compareLink($contact_url, $visitor)) {
|
||||||
|
Logger::info('Redirecting without magic', ['target' => $target_url, 'visitor' => $visitor, 'contact' => $contact_url]);
|
||||||
|
$a->redirect($target_url);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test for magic auth on the target system
|
||||||
|
$serverret = Network::curl($basepath . '/magic');
|
||||||
|
if ($serverret->isSuccess()) {
|
||||||
|
$separator = strpos($target_url, '?') ? '&' : '?';
|
||||||
|
$target_url .= $separator . 'zrl=' . urlencode($visitor) . '&addr=' . urlencode($contact_url);
|
||||||
|
|
||||||
|
Logger::info('Redirecting with magic', ['target' => $target_url, 'visitor' => $visitor, 'contact' => $contact_url]);
|
||||||
|
$a->redirect($target_url);
|
||||||
|
} else {
|
||||||
|
Logger::info('No magic for contact', ['contact' => $contact_url]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -106,15 +106,16 @@ class Mode
|
||||||
/**
|
/**
|
||||||
* Checks if the site is called via a backend process
|
* Checks if the site is called via a backend process
|
||||||
*
|
*
|
||||||
|
* @param bool $isBackend True, if the call is from a backend script (daemon, worker, ...)
|
||||||
* @param Module $module The pre-loaded module (just name, not class!)
|
* @param Module $module The pre-loaded module (just name, not class!)
|
||||||
* @param array $server The $_SERVER variable
|
* @param array $server The $_SERVER variable
|
||||||
* @param MobileDetect $mobileDetect The mobile detection library
|
* @param MobileDetect $mobileDetect The mobile detection library
|
||||||
*
|
*
|
||||||
* @return Mode returns the determined mode
|
* @return Mode returns the determined mode
|
||||||
*/
|
*/
|
||||||
public function determineRunMode(Module $module, array $server, MobileDetect $mobileDetect)
|
public function determineRunMode(bool $isBackend, Module $module, array $server, MobileDetect $mobileDetect)
|
||||||
{
|
{
|
||||||
$isBackend = basename(($server['PHP_SELF'] ?? ''), '.php') !== 'index' ||
|
$isBackend = $isBackend ||
|
||||||
$module->isBackend();
|
$module->isBackend();
|
||||||
$isMobile = $mobileDetect->isMobile();
|
$isMobile = $mobileDetect->isMobile();
|
||||||
$isTablet = $mobileDetect->isTablet();
|
$isTablet = $mobileDetect->isTablet();
|
||||||
|
|
|
@ -129,16 +129,13 @@ HELP;
|
||||||
$config_file = $this->getOption(['f', 'file']);
|
$config_file = $this->getOption(['f', 'file']);
|
||||||
|
|
||||||
if (!empty($config_file)) {
|
if (!empty($config_file)) {
|
||||||
if ($config_file != 'config' . DIRECTORY_SEPARATOR . 'local.config.php') {
|
|
||||||
// Copy config file
|
if (!file_exists($config_file)) {
|
||||||
$this->out("Copying config file...\n");
|
throw new RuntimeException("ERROR: Config file does not exist.\n");
|
||||||
if (!copy($basePathConf . DIRECTORY_SEPARATOR . $config_file, $basePathConf . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'local.config.php')) {
|
|
||||||
throw new RuntimeException("ERROR: Saving config file failed. Please copy '$config_file' to '" . $basePathConf . "'" . DIRECTORY_SEPARATOR . "config" . DIRECTORY_SEPARATOR . "local.config.php' manually.\n");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//reload the config cache
|
//reload the config cache
|
||||||
$loader = new ConfigFileLoader($basePathConf);
|
$loader = new ConfigFileLoader($config_file);
|
||||||
$loader->setupCache($configCache);
|
$loader->setupCache($configCache);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
@ -195,7 +192,7 @@ HELP;
|
||||||
$installer->createConfig($configCache);
|
$installer->createConfig($configCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->out(" Complete!\n\n");
|
$this->out("Complete!\n\n");
|
||||||
|
|
||||||
// Check database connection
|
// Check database connection
|
||||||
$this->out("Checking database...\n");
|
$this->out("Checking database...\n");
|
||||||
|
@ -219,6 +216,14 @@ HELP;
|
||||||
throw new RuntimeException($errorMessage);
|
throw new RuntimeException($errorMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!empty($config_file) && $config_file != 'config' . DIRECTORY_SEPARATOR . 'local.config.php') {
|
||||||
|
// Copy config file
|
||||||
|
$this->out("Copying config file...\n");
|
||||||
|
if (!copy($basePathConf . DIRECTORY_SEPARATOR . $config_file, $basePathConf . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'local.config.php')) {
|
||||||
|
throw new RuntimeException("ERROR: Saving config file failed. Please copy '$config_file' to '" . $basePathConf . "'" . DIRECTORY_SEPARATOR . "config" . DIRECTORY_SEPARATOR . "local.config.php' manually.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$this->out(" Complete!\n\n");
|
$this->out(" Complete!\n\n");
|
||||||
|
|
||||||
// Install theme
|
// Install theme
|
||||||
|
|
|
@ -1466,6 +1466,11 @@ class BBCode extends BaseObject
|
||||||
|
|
||||||
$text = str_replace('[hr]', '<hr />', $text);
|
$text = str_replace('[hr]', '<hr />', $text);
|
||||||
|
|
||||||
|
if (!$for_plaintext) {
|
||||||
|
// Autolinker for isolated URLs
|
||||||
|
$text = preg_replace(Strings::autoLinkRegEx(), '[url]$1[/url]', $text);
|
||||||
|
}
|
||||||
|
|
||||||
// This is actually executed in Item::prepareBody()
|
// This is actually executed in Item::prepareBody()
|
||||||
|
|
||||||
$nosmile = strpos($text, '[nosmile]') !== false;
|
$nosmile = strpos($text, '[nosmile]') !== false;
|
||||||
|
@ -1648,9 +1653,7 @@ class BBCode extends BaseObject
|
||||||
$text = Smilies::replace($text);
|
$text = Smilies::replace($text);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if the HTML is used to generate plain text, then don't do this search, but replace all URL of that kind to text
|
|
||||||
if (!$for_plaintext) {
|
if (!$for_plaintext) {
|
||||||
$text = preg_replace(Strings::autoLinkRegEx(), '[url]$1[/url]', $text);
|
|
||||||
if (in_array($simple_html, [7, 9])) {
|
if (in_array($simple_html, [7, 9])) {
|
||||||
$text = preg_replace_callback("/\[url\](.*?)\[\/url\]/ism", 'self::convertUrlForOStatusCallback', $text);
|
$text = preg_replace_callback("/\[url\](.*?)\[\/url\]/ism", 'self::convertUrlForOStatusCallback', $text);
|
||||||
$text = preg_replace_callback("/\[url\=(.*?)\](.*?)\[\/url\]/ism", 'self::convertUrlForOStatusCallback', $text);
|
$text = preg_replace_callback("/\[url\=(.*?)\](.*?)\[\/url\]/ism", 'self::convertUrlForOStatusCallback', $text);
|
||||||
|
|
|
@ -42,14 +42,32 @@ class HTML
|
||||||
return $cleaned;
|
return $cleaned;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function tagToBBCode(DOMDocument $doc, $tag, $attributes, $startbb, $endbb)
|
/**
|
||||||
|
* Search all instances of a specific HTML tag node in the provided DOM document and replaces them with BBCode text nodes.
|
||||||
|
*
|
||||||
|
* @see HTML::tagToBBCodeSub()
|
||||||
|
*/
|
||||||
|
private static function tagToBBCode(DOMDocument $doc, string $tag, array $attributes, string $startbb, string $endbb, bool $ignoreChildren = false)
|
||||||
{
|
{
|
||||||
do {
|
do {
|
||||||
$done = self::tagToBBCodeSub($doc, $tag, $attributes, $startbb, $endbb);
|
$done = self::tagToBBCodeSub($doc, $tag, $attributes, $startbb, $endbb, $ignoreChildren);
|
||||||
} while ($done);
|
} while ($done);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function tagToBBCodeSub(DOMDocument $doc, $tag, $attributes, $startbb, $endbb)
|
/**
|
||||||
|
* Search the first specific HTML tag node in the provided DOM document and replaces it with BBCode text nodes.
|
||||||
|
*
|
||||||
|
* @param DOMDocument $doc
|
||||||
|
* @param string $tag HTML tag name
|
||||||
|
* @param array $attributes Array of attributes to match and optionally use the value from
|
||||||
|
* @param string $startbb BBCode tag opening
|
||||||
|
* @param string $endbb BBCode tag closing
|
||||||
|
* @param bool $ignoreChildren If set to false, the HTML tag children will be appended as text inside the BBCode tag
|
||||||
|
* Otherwise, they will be entirely ignored. Useful for simple BBCode that draw their
|
||||||
|
* inner value from an attribute value and disregard the tag children.
|
||||||
|
* @return bool Whether a replacement was done
|
||||||
|
*/
|
||||||
|
private static function tagToBBCodeSub(DOMDocument $doc, string $tag, array $attributes, string $startbb, string $endbb, bool $ignoreChildren = false)
|
||||||
{
|
{
|
||||||
$savestart = str_replace('$', '\x01', $startbb);
|
$savestart = str_replace('$', '\x01', $startbb);
|
||||||
$replace = false;
|
$replace = false;
|
||||||
|
@ -98,7 +116,7 @@ class HTML
|
||||||
|
|
||||||
$node->parentNode->insertBefore($StartCode, $node);
|
$node->parentNode->insertBefore($StartCode, $node);
|
||||||
|
|
||||||
if ($node->hasChildNodes()) {
|
if (!$ignoreChildren && $node->hasChildNodes()) {
|
||||||
/** @var \DOMNode $child */
|
/** @var \DOMNode $child */
|
||||||
foreach ($node->childNodes as $key => $child) {
|
foreach ($node->childNodes as $key => $child) {
|
||||||
/* Remove empty text nodes at the start or at the end of the children list */
|
/* Remove empty text nodes at the start or at the end of the children list */
|
||||||
|
@ -296,14 +314,14 @@ class HTML
|
||||||
self::tagToBBCode($doc, 'a', ['href' => '/mailto:(.+)/'], '[mail=$1]', '[/mail]');
|
self::tagToBBCode($doc, 'a', ['href' => '/mailto:(.+)/'], '[mail=$1]', '[/mail]');
|
||||||
self::tagToBBCode($doc, 'a', ['href' => '/(.+)/'], '[url=$1]', '[/url]');
|
self::tagToBBCode($doc, 'a', ['href' => '/(.+)/'], '[url=$1]', '[/url]');
|
||||||
|
|
||||||
self::tagToBBCode($doc, 'img', ['src' => '/(.+)/', 'alt' => '/(.+)/'], '[img=$1]$2', '[/img]');
|
self::tagToBBCode($doc, 'img', ['src' => '/(.+)/', 'alt' => '/(.+)/'], '[img=$1]$2', '[/img]', true);
|
||||||
self::tagToBBCode($doc, 'img', ['src' => '/(.+)/', 'width' => '/(\d+)/', 'height' => '/(\d+)/'], '[img=$2x$3]$1', '[/img]');
|
self::tagToBBCode($doc, 'img', ['src' => '/(.+)/', 'width' => '/(\d+)/', 'height' => '/(\d+)/'], '[img=$2x$3]$1', '[/img]', true);
|
||||||
self::tagToBBCode($doc, 'img', ['src' => '/(.+)/'], '[img]$1', '[/img]');
|
self::tagToBBCode($doc, 'img', ['src' => '/(.+)/'], '[img]$1', '[/img]', true);
|
||||||
|
|
||||||
|
|
||||||
self::tagToBBCode($doc, 'video', ['src' => '/(.+)/'], '[video]$1', '[/video]');
|
self::tagToBBCode($doc, 'video', ['src' => '/(.+)/'], '[video]$1', '[/video]', true);
|
||||||
self::tagToBBCode($doc, 'audio', ['src' => '/(.+)/'], '[audio]$1', '[/audio]');
|
self::tagToBBCode($doc, 'audio', ['src' => '/(.+)/'], '[audio]$1', '[/audio]', true);
|
||||||
self::tagToBBCode($doc, 'iframe', ['src' => '/(.+)/'], '[iframe]$1', '[/iframe]');
|
self::tagToBBCode($doc, 'iframe', ['src' => '/(.+)/'], '[iframe]$1', '[/iframe]', true);
|
||||||
|
|
||||||
self::tagToBBCode($doc, 'key', [], '[code]', '[/code]');
|
self::tagToBBCode($doc, 'key', [], '[code]', '[/code]');
|
||||||
self::tagToBBCode($doc, 'code', [], '[code]', '[/code]');
|
self::tagToBBCode($doc, 'code', [], '[code]', '[/code]');
|
||||||
|
|
|
@ -337,16 +337,9 @@ class Widget
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$cid = $zcid = 0;
|
$zcid = 0;
|
||||||
|
|
||||||
if (!empty($_SESSION['remote'])) {
|
$cid = remote_user($profile_uid);
|
||||||
foreach ($_SESSION['remote'] as $visitor) {
|
|
||||||
if ($visitor['uid'] == $profile_uid) {
|
|
||||||
$cid = $visitor['cid'];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$cid) {
|
if (!$cid) {
|
||||||
if (Profile::getMyURL()) {
|
if (Profile::getMyURL()) {
|
||||||
|
|
|
@ -9,8 +9,10 @@ use Friendica\App;
|
||||||
use Friendica\Core\Session\CacheSessionHandler;
|
use Friendica\Core\Session\CacheSessionHandler;
|
||||||
use Friendica\Core\Session\DatabaseSessionHandler;
|
use Friendica\Core\Session\DatabaseSessionHandler;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
|
use Friendica\Model\Contact;
|
||||||
use Friendica\Model\User;
|
use Friendica\Model\User;
|
||||||
use Friendica\Util\DateTimeFormat;
|
use Friendica\Util\DateTimeFormat;
|
||||||
|
use Friendica\Util\Strings;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* High-level Session service class
|
* High-level Session service class
|
||||||
|
@ -118,8 +120,21 @@ class Session
|
||||||
'my_url' => $a->getBaseURL() . '/profile/' . $user_record['nickname'],
|
'my_url' => $a->getBaseURL() . '/profile/' . $user_record['nickname'],
|
||||||
'my_address' => $user_record['nickname'] . '@' . substr($a->getBaseURL(), strpos($a->getBaseURL(), '://') + 3),
|
'my_address' => $user_record['nickname'] . '@' . substr($a->getBaseURL(), strpos($a->getBaseURL(), '://') + 3),
|
||||||
'addr' => defaults($_SERVER, 'REMOTE_ADDR', '0.0.0.0'),
|
'addr' => defaults($_SERVER, 'REMOTE_ADDR', '0.0.0.0'),
|
||||||
|
'remote' => []
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$remote_contacts = DBA::select('contact', ['id', 'uid'], ['nurl' => Strings::normaliseLink($_SESSION['my_url']), 'rel' => [Contact::FOLLOWER, Contact::FRIEND], 'self' => false]);
|
||||||
|
while ($contact = DBA::fetch($remote_contacts)) {
|
||||||
|
if (($contact['uid'] == 0) || Contact::isBlockedByUser($contact['id'], $contact['uid'])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @todo Change it to this format to save space
|
||||||
|
// $_SESSION['remote'][$contact['uid']] = $contact['id'];
|
||||||
|
$_SESSION['remote'][$contact['uid']] = ['cid' => $contact['id'], 'uid' => $contact['uid']];
|
||||||
|
}
|
||||||
|
DBA::close($remote_contacts);
|
||||||
|
|
||||||
$member_since = strtotime($user_record['register_date']);
|
$member_since = strtotime($user_record['register_date']);
|
||||||
self::set('new_member', time() < ($member_since + ( 60 * 60 * 24 * 14)));
|
self::set('new_member', time() < ($member_since + ( 60 * 60 * 24 * 14)));
|
||||||
|
|
||||||
|
|
|
@ -90,9 +90,12 @@ class Database
|
||||||
public function connect()
|
public function connect()
|
||||||
{
|
{
|
||||||
if (!is_null($this->connection) && $this->connected()) {
|
if (!is_null($this->connection) && $this->connected()) {
|
||||||
return true;
|
return $this->connected;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset connected state
|
||||||
|
$this->connected = false;
|
||||||
|
|
||||||
$port = 0;
|
$port = 0;
|
||||||
$serveraddr = trim($this->configCache->get('database', 'hostname'));
|
$serveraddr = trim($this->configCache->get('database', 'hostname'));
|
||||||
$serverdata = explode(':', $serveraddr);
|
$serverdata = explode(':', $serveraddr);
|
||||||
|
@ -187,19 +190,20 @@ class Database
|
||||||
*/
|
*/
|
||||||
public function disconnect()
|
public function disconnect()
|
||||||
{
|
{
|
||||||
if (is_null($this->connection)) {
|
if (!is_null($this->connection)) {
|
||||||
return;
|
switch ($this->driver) {
|
||||||
|
case 'pdo':
|
||||||
|
$this->connection = null;
|
||||||
|
break;
|
||||||
|
case 'mysqli':
|
||||||
|
$this->connection->close();
|
||||||
|
$this->connection = null;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ($this->driver) {
|
$this->driver = null;
|
||||||
case 'pdo':
|
$this->connected = false;
|
||||||
$this->connection = null;
|
|
||||||
break;
|
|
||||||
case 'mysqli':
|
|
||||||
$this->connection->close();
|
|
||||||
$this->connection = null;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -369,6 +373,7 @@ class Database
|
||||||
$connected = $this->connection->ping();
|
$connected = $this->connection->ping();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $connected;
|
return $connected;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,19 +38,17 @@ class LoggerFactory
|
||||||
'Friendica\\Util\\Logger',
|
'Friendica\\Util\\Logger',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
private $channel;
|
||||||
* Retrieve the channel based on the __FILE__
|
|
||||||
*
|
public function __construct(string $channel)
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
private function findChannel()
|
|
||||||
{
|
{
|
||||||
return basename($_SERVER['PHP_SELF'], '.php');
|
$this->channel = $channel;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new PSR-3 compliant logger instances
|
* Creates a new PSR-3 compliant logger instances
|
||||||
*
|
*
|
||||||
|
* @param Database $database The Friendica Database instance
|
||||||
* @param Configuration $config The config
|
* @param Configuration $config The config
|
||||||
* @param Profiler $profiler The profiler of the app
|
* @param Profiler $profiler The profiler of the app
|
||||||
*
|
*
|
||||||
|
@ -59,7 +57,7 @@ class LoggerFactory
|
||||||
* @throws \Exception
|
* @throws \Exception
|
||||||
* @throws InternalServerErrorException
|
* @throws InternalServerErrorException
|
||||||
*/
|
*/
|
||||||
public function create(Database $database, Configuration $config, Profiler $profiler)
|
public function create( Database $database, Configuration $config, Profiler $profiler)
|
||||||
{
|
{
|
||||||
if (empty($config->get('system', 'debugging', false))) {
|
if (empty($config->get('system', 'debugging', false))) {
|
||||||
$logger = new VoidLogger();
|
$logger = new VoidLogger();
|
||||||
|
@ -76,7 +74,7 @@ class LoggerFactory
|
||||||
$loggerTimeZone = new \DateTimeZone('UTC');
|
$loggerTimeZone = new \DateTimeZone('UTC');
|
||||||
Monolog\Logger::setTimezone($loggerTimeZone);
|
Monolog\Logger::setTimezone($loggerTimeZone);
|
||||||
|
|
||||||
$logger = new Monolog\Logger($this->findChannel());
|
$logger = new Monolog\Logger($this->channel);
|
||||||
$logger->pushProcessor(new Monolog\Processor\PsrLogMessageProcessor());
|
$logger->pushProcessor(new Monolog\Processor\PsrLogMessageProcessor());
|
||||||
$logger->pushProcessor(new Monolog\Processor\ProcessIdProcessor());
|
$logger->pushProcessor(new Monolog\Processor\ProcessIdProcessor());
|
||||||
$logger->pushProcessor(new Monolog\Processor\UidProcessor());
|
$logger->pushProcessor(new Monolog\Processor\UidProcessor());
|
||||||
|
@ -91,7 +89,7 @@ class LoggerFactory
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'syslog':
|
case 'syslog':
|
||||||
$logger = new SyslogLogger($this->findChannel(), $introspection, $loglevel);
|
$logger = new SyslogLogger($this->channel, $introspection, $loglevel);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'stream':
|
case 'stream':
|
||||||
|
@ -99,7 +97,7 @@ class LoggerFactory
|
||||||
$stream = $config->get('system', 'logfile');
|
$stream = $config->get('system', 'logfile');
|
||||||
// just add a stream in case it's either writable or not file
|
// just add a stream in case it's either writable or not file
|
||||||
if (!is_file($stream) || is_writable($stream)) {
|
if (!is_file($stream) || is_writable($stream)) {
|
||||||
$logger = new StreamLogger($this->findChannel(), $stream, $introspection, $loglevel);
|
$logger = new StreamLogger($this->channel, $stream, $introspection, $loglevel);
|
||||||
} else {
|
} else {
|
||||||
$logger = new VoidLogger();
|
$logger = new VoidLogger();
|
||||||
}
|
}
|
||||||
|
|
|
@ -270,14 +270,17 @@ class Contact extends BaseObject
|
||||||
* @param string $url The contact link
|
* @param string $url The contact link
|
||||||
*
|
*
|
||||||
* @return string basepath
|
* @return string basepath
|
||||||
|
* @return boolean $dont_update Don't update the contact
|
||||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
||||||
* @throws \ImagickException
|
* @throws \ImagickException
|
||||||
*/
|
*/
|
||||||
public static function getBasepath($url)
|
public static function getBasepath($url, $dont_update = false)
|
||||||
{
|
{
|
||||||
$contact = DBA::selectFirst('contact', ['baseurl'], ['uid' => 0, 'nurl' => Strings::normaliseLink($url)]);
|
$contact = DBA::selectFirst('contact', ['baseurl'], ['uid' => 0, 'nurl' => Strings::normaliseLink($url)]);
|
||||||
if (!empty($contact['baseurl'])) {
|
if (!empty($contact['baseurl'])) {
|
||||||
return $contact['baseurl'];
|
return $contact['baseurl'];
|
||||||
|
} elseif ($dont_update) {
|
||||||
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
self::updateFromProbeByURL($url, true);
|
self::updateFromProbeByURL($url, true);
|
||||||
|
@ -290,6 +293,18 @@ class Contact extends BaseObject
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the given contact url is on the same server
|
||||||
|
*
|
||||||
|
* @param string $url The contact link
|
||||||
|
*
|
||||||
|
* @return boolean Is it the same server?
|
||||||
|
*/
|
||||||
|
public static function isLocal($url)
|
||||||
|
{
|
||||||
|
return Strings::compareLink(self::getBasepath($url, true), System::baseUrl());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the public contact id of the given user id
|
* Returns the public contact id of the given user id
|
||||||
*
|
*
|
||||||
|
@ -668,21 +683,21 @@ class Contact extends BaseObject
|
||||||
public static function updateSelfFromUserID($uid, $update_avatar = false)
|
public static function updateSelfFromUserID($uid, $update_avatar = false)
|
||||||
{
|
{
|
||||||
$fields = ['id', 'name', 'nick', 'location', 'about', 'keywords', 'gender', 'avatar',
|
$fields = ['id', 'name', 'nick', 'location', 'about', 'keywords', 'gender', 'avatar',
|
||||||
'xmpp', 'contact-type', 'forum', 'prv', 'avatar-date', 'url', 'nurl',
|
'xmpp', 'contact-type', 'forum', 'prv', 'avatar-date', 'url', 'nurl', 'unsearchable',
|
||||||
'photo', 'thumb', 'micro', 'addr', 'request', 'notify', 'poll', 'confirm', 'poco'];
|
'photo', 'thumb', 'micro', 'addr', 'request', 'notify', 'poll', 'confirm', 'poco'];
|
||||||
$self = DBA::selectFirst('contact', $fields, ['uid' => $uid, 'self' => true]);
|
$self = DBA::selectFirst('contact', $fields, ['uid' => $uid, 'self' => true]);
|
||||||
if (!DBA::isResult($self)) {
|
if (!DBA::isResult($self)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$fields = ['nickname', 'page-flags', 'account-type'];
|
$fields = ['nickname', 'page-flags', 'account-type', 'hidewall'];
|
||||||
$user = DBA::selectFirst('user', $fields, ['uid' => $uid]);
|
$user = DBA::selectFirst('user', $fields, ['uid' => $uid]);
|
||||||
if (!DBA::isResult($user)) {
|
if (!DBA::isResult($user)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$fields = ['name', 'photo', 'thumb', 'about', 'address', 'locality', 'region',
|
$fields = ['name', 'photo', 'thumb', 'about', 'address', 'locality', 'region',
|
||||||
'country-name', 'gender', 'pub_keywords', 'xmpp'];
|
'country-name', 'gender', 'pub_keywords', 'xmpp', 'net-publish'];
|
||||||
$profile = DBA::selectFirst('profile', $fields, ['uid' => $uid, 'is-default' => true]);
|
$profile = DBA::selectFirst('profile', $fields, ['uid' => $uid, 'is-default' => true]);
|
||||||
if (!DBA::isResult($profile)) {
|
if (!DBA::isResult($profile)) {
|
||||||
return;
|
return;
|
||||||
|
@ -727,6 +742,7 @@ class Contact extends BaseObject
|
||||||
$fields['avatar'] = System::baseUrl() . '/photo/profile/' .$uid . '.' . $file_suffix;
|
$fields['avatar'] = System::baseUrl() . '/photo/profile/' .$uid . '.' . $file_suffix;
|
||||||
$fields['forum'] = $user['page-flags'] == User::PAGE_FLAGS_COMMUNITY;
|
$fields['forum'] = $user['page-flags'] == User::PAGE_FLAGS_COMMUNITY;
|
||||||
$fields['prv'] = $user['page-flags'] == User::PAGE_FLAGS_PRVGROUP;
|
$fields['prv'] = $user['page-flags'] == User::PAGE_FLAGS_PRVGROUP;
|
||||||
|
$fields['unsearchable'] = $user['hidewall'] || !$profile['net-publish'];
|
||||||
|
|
||||||
// it seems as if ported accounts can have wrong values, so we make sure that now everything is fine.
|
// it seems as if ported accounts can have wrong values, so we make sure that now everything is fine.
|
||||||
$fields['url'] = System::baseUrl() . '/profile/' . $user['nickname'];
|
$fields['url'] = System::baseUrl() . '/profile/' . $user['nickname'];
|
||||||
|
@ -1177,7 +1193,7 @@ class Contact extends BaseObject
|
||||||
$sparkle = false;
|
$sparkle = false;
|
||||||
if (($contact['network'] === Protocol::DFRN) && !$contact['self'] && empty($contact['pending'])) {
|
if (($contact['network'] === Protocol::DFRN) && !$contact['self'] && empty($contact['pending'])) {
|
||||||
$sparkle = true;
|
$sparkle = true;
|
||||||
$profile_link = System::baseUrl() . '/redir/' . $contact['id'] . '?url=' . $contact['url'];
|
$profile_link = System::baseUrl() . '/redir/' . $contact['id'];
|
||||||
} else {
|
} else {
|
||||||
$profile_link = $contact['url'];
|
$profile_link = $contact['url'];
|
||||||
}
|
}
|
||||||
|
@ -1462,7 +1478,6 @@ class Contact extends BaseObject
|
||||||
|
|
||||||
if (empty($data)) {
|
if (empty($data)) {
|
||||||
$data = Probe::uri($url, "", $uid);
|
$data = Probe::uri($url, "", $uid);
|
||||||
|
|
||||||
// Ensure that there is a gserver entry
|
// Ensure that there is a gserver entry
|
||||||
if (!empty($data['baseurl']) && ($data['network'] != Protocol::PHANTOM)) {
|
if (!empty($data['baseurl']) && ($data['network'] != Protocol::PHANTOM)) {
|
||||||
PortableContact::checkServer($data['baseurl']);
|
PortableContact::checkServer($data['baseurl']);
|
||||||
|
@ -2021,9 +2036,8 @@ class Contact extends BaseObject
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If Probe::uri fails the network code will be different (mostly "feed" or "unkn")
|
// If Probe::uri fails the network code will be different ("feed" or "unkn")
|
||||||
if (!in_array($ret['network'], Protocol::NATIVE_SUPPORT) ||
|
if (in_array($ret['network'], [Protocol::FEED, Protocol::PHANTOM]) && ($ret['network'] != $contact['network'])) {
|
||||||
(in_array($ret['network'], [Protocol::FEED, Protocol::PHANTOM]) && ($ret['network'] != $contact['network']))) {
|
|
||||||
if ($force && ($uid == 0)) {
|
if ($force && ($uid == 0)) {
|
||||||
self::updateContact($id, $uid, $ret['url'], ['last-update' => $updated, 'failure_update' => $updated]);
|
self::updateContact($id, $uid, $ret['url'], ['last-update' => $updated, 'failure_update' => $updated]);
|
||||||
}
|
}
|
||||||
|
@ -2063,7 +2077,7 @@ class Contact extends BaseObject
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($ret['network'] != Protocol::FEED) {
|
if (!empty($ret['photo']) && ($ret['network'] != Protocol::FEED)) {
|
||||||
self::updateAvatar($ret['photo'], $uid, $id, $update || $force);
|
self::updateAvatar($ret['photo'], $uid, $id, $update || $force);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2487,6 +2501,9 @@ class Contact extends BaseObject
|
||||||
['id' => $contact['id'], 'uid' => $importer['uid']]);
|
['id' => $contact['id'], 'uid' => $importer['uid']]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ensure to always have the correct network type, independent from the connection request method
|
||||||
|
self::updateFromProbe($contact['id'], '', true);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
// send email notification to owner?
|
// send email notification to owner?
|
||||||
|
@ -2512,15 +2529,14 @@ class Contact extends BaseObject
|
||||||
'writable' => 1,
|
'writable' => 1,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$contact_record = [
|
$contact_id = DBA::lastInsertId();
|
||||||
'id' => DBA::lastInsertId(),
|
|
||||||
'network' => $network,
|
|
||||||
'name' => $name,
|
|
||||||
'url' => $url,
|
|
||||||
'photo' => $photo
|
|
||||||
];
|
|
||||||
|
|
||||||
Contact::updateAvatar($photo, $importer["uid"], $contact_record["id"], true);
|
// Ensure to always have the correct network type, independent from the connection request method
|
||||||
|
self::updateFromProbe($contact_id, '', true);
|
||||||
|
|
||||||
|
Contact::updateAvatar($photo, $importer["uid"], $contact_id, true);
|
||||||
|
|
||||||
|
$contact_record = DBA::selectFirst('contact', ['id', 'network', 'name', 'url', 'photo'], ['id' => $contact_id]);
|
||||||
|
|
||||||
/// @TODO Encapsulate this into a function/method
|
/// @TODO Encapsulate this into a function/method
|
||||||
$fields = ['uid', 'username', 'email', 'page-flags', 'notify-flags', 'language'];
|
$fields = ['uid', 'username', 'email', 'page-flags', 'notify-flags', 'language'];
|
||||||
|
@ -2728,7 +2744,7 @@ class Contact extends BaseObject
|
||||||
|
|
||||||
$redirect = 'redir/' . $contact['id'];
|
$redirect = 'redir/' . $contact['id'];
|
||||||
|
|
||||||
if ($url != '') {
|
if (($url != '') && !Strings::compareLink($contact['url'], $url)) {
|
||||||
$redirect .= '?url=' . $url;
|
$redirect .= '?url=' . $url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -248,7 +248,7 @@ class Profile
|
||||||
*/
|
*/
|
||||||
public static function getByNickname($nickname, $uid = 0, $profile_id = 0)
|
public static function getByNickname($nickname, $uid = 0, $profile_id = 0)
|
||||||
{
|
{
|
||||||
if (remote_user() && !empty($_SESSION['remote'])) {
|
if (remote_user($uid) && !empty($_SESSION['remote'])) {
|
||||||
foreach ($_SESSION['remote'] as $visitor) {
|
foreach ($_SESSION['remote'] as $visitor) {
|
||||||
if ($visitor['uid'] == $uid) {
|
if ($visitor['uid'] == $uid) {
|
||||||
$contact = DBA::selectFirst('contact', ['profile-id'], ['id' => $visitor['cid']]);
|
$contact = DBA::selectFirst('contact', ['profile-id'], ['id' => $visitor['cid']]);
|
||||||
|
@ -1124,13 +1124,13 @@ class Profile
|
||||||
/// @todo replace this and the query for this variable with some cleaner functionality
|
/// @todo replace this and the query for this variable with some cleaner functionality
|
||||||
$_SESSION['remote'] = [];
|
$_SESSION['remote'] = [];
|
||||||
|
|
||||||
$remote_contacts = DBA::select('contact', ['id', 'uid'], ['nurl' => $visitor['nurl'], 'rel' => [Contact::FOLLOWER, Contact::FRIEND]]);
|
$remote_contacts = DBA::select('contact', ['id', 'uid'], ['nurl' => $visitor['nurl'], 'rel' => [Contact::FOLLOWER, Contact::FRIEND], 'self' => false]);
|
||||||
while ($contact = DBA::fetch($remote_contacts)) {
|
while ($contact = DBA::fetch($remote_contacts)) {
|
||||||
if (($contact['uid'] == 0) || Contact::isBlockedByUser($visitor['id'], $contact['uid'])) {
|
if (($contact['uid'] == 0) || Contact::isBlockedByUser($visitor['id'], $contact['uid'])) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$_SESSION['remote'][] = ['cid' => $contact['id'], 'uid' => $contact['uid'], 'url' => $visitor['url']];
|
$_SESSION['remote'][$contact['uid']] = ['cid' => $contact['id'], 'uid' => $contact['uid']];
|
||||||
}
|
}
|
||||||
|
|
||||||
$a->contact = $visitor;
|
$a->contact = $visitor;
|
||||||
|
|
|
@ -33,13 +33,10 @@ class Magic extends BaseModule
|
||||||
$test = (!empty($_REQUEST['test']) ? intval($_REQUEST['test']) : 0);
|
$test = (!empty($_REQUEST['test']) ? intval($_REQUEST['test']) : 0);
|
||||||
$owa = (!empty($_REQUEST['owa']) ? intval($_REQUEST['owa']) : 0);
|
$owa = (!empty($_REQUEST['owa']) ? intval($_REQUEST['owa']) : 0);
|
||||||
|
|
||||||
// NOTE: I guess $dest isn't just the profile url (could be also
|
if (!empty($addr)) {
|
||||||
// other profile pages e.g. photo). We need to find a solution
|
|
||||||
// to be able to redirct to other pages than the contact profile.
|
|
||||||
$cid = Contact::getIdForURL($dest);
|
|
||||||
|
|
||||||
if (!$cid && !empty($addr)) {
|
|
||||||
$cid = Contact::getIdForURL($addr);
|
$cid = Contact::getIdForURL($addr);
|
||||||
|
} else {
|
||||||
|
$cid = Contact::getIdForURL($dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$cid) {
|
if (!$cid) {
|
||||||
|
|
|
@ -36,7 +36,6 @@ class Contacts extends BaseModule
|
||||||
throw new \Friendica\Network\HTTPException\NotFoundException(L10n::t('User not found.'));
|
throw new \Friendica\Network\HTTPException\NotFoundException(L10n::t('User not found.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$a->data['user'] = $user;
|
|
||||||
$a->profile_uid = $user['uid'];
|
$a->profile_uid = $user['uid'];
|
||||||
|
|
||||||
Profile::load($a, $nickname);
|
Profile::load($a, $nickname);
|
||||||
|
|
|
@ -1504,10 +1504,39 @@ class Probe
|
||||||
$data['baseurl'] = 'https://twitter.com';
|
$data['baseurl'] = 'https://twitter.com';
|
||||||
|
|
||||||
$curlResult = Network::curl($data['url'], false);
|
$curlResult = Network::curl($data['url'], false);
|
||||||
if ($curlResult->isSuccess()) {
|
if (!$curlResult->isSuccess()) {
|
||||||
return $data;
|
return [];
|
||||||
}
|
}
|
||||||
return [];
|
|
||||||
|
$body = $curlResult->getBody();
|
||||||
|
$doc = new DOMDocument();
|
||||||
|
@$doc->loadHTML($body);
|
||||||
|
$xpath = new DOMXPath($doc);
|
||||||
|
|
||||||
|
$list = $xpath->query('//img[@class]');
|
||||||
|
foreach ($list as $node) {
|
||||||
|
$img_attr = [];
|
||||||
|
if ($node->attributes->length) {
|
||||||
|
foreach ($node->attributes as $attribute) {
|
||||||
|
$img_attr[$attribute->name] = $attribute->value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($img_attr['class'])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strpos($img_attr['class'], 'ProfileAvatar-image') !== false) {
|
||||||
|
if (!empty($img_attr['src'])) {
|
||||||
|
$data['photo'] = $img_attr['src'];
|
||||||
|
}
|
||||||
|
if (!empty($img_attr['alt'])) {
|
||||||
|
$data['name'] = $img_attr['alt'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -544,6 +544,10 @@ class Transmitter
|
||||||
|
|
||||||
$contacts = DBA::select('contact', ['url', 'network', 'protocol'], $condition);
|
$contacts = DBA::select('contact', ['url', 'network', 'protocol'], $condition);
|
||||||
while ($contact = DBA::fetch($contacts)) {
|
while ($contact = DBA::fetch($contacts)) {
|
||||||
|
if (Contact::isLocal($contact['url'])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (!in_array($contact['network'], $networks) && ($contact['protocol'] != Protocol::ACTIVITYPUB)) {
|
if (!in_array($contact['network'], $networks) && ($contact['protocol'] != Protocol::ACTIVITYPUB)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -611,6 +615,10 @@ class Transmitter
|
||||||
if ($receiver == $item_profile['followers']) {
|
if ($receiver == $item_profile['followers']) {
|
||||||
$inboxes = array_merge($inboxes, self::fetchTargetInboxesforUser($uid, $personal));
|
$inboxes = array_merge($inboxes, self::fetchTargetInboxesforUser($uid, $personal));
|
||||||
} else {
|
} else {
|
||||||
|
if (Contact::isLocal($receiver)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$profile = APContact::getByURL($receiver, false);
|
$profile = APContact::getByURL($receiver, false);
|
||||||
if (!empty($profile)) {
|
if (!empty($profile)) {
|
||||||
if (empty($profile['sharedinbox']) || $personal || $blindcopy) {
|
if (empty($profile['sharedinbox']) || $personal || $blindcopy) {
|
||||||
|
|
|
@ -33,7 +33,7 @@ class Security extends BaseObject
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (remote_user()) {
|
if (remote_user($owner)) {
|
||||||
// use remembered decision and avoid a DB lookup for each and every display item
|
// use remembered decision and avoid a DB lookup for each and every display item
|
||||||
// DO NOT use this function if there are going to be multiple owners
|
// DO NOT use this function if there are going to be multiple owners
|
||||||
// We have a contact-id for an authenticated remote user, this block determines if the contact
|
// We have a contact-id for an authenticated remote user, this block determines if the contact
|
||||||
|
@ -44,17 +44,7 @@ class Security extends BaseObject
|
||||||
} elseif ($verified === 1) {
|
} elseif ($verified === 1) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
$cid = 0;
|
$cid = remote_user($owner);
|
||||||
|
|
||||||
if (!empty($_SESSION['remote'])) {
|
|
||||||
foreach ($_SESSION['remote'] as $visitor) {
|
|
||||||
if ($visitor['uid'] == $owner) {
|
|
||||||
$cid = $visitor['cid'];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$cid) {
|
if (!$cid) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,13 +122,12 @@ class Temporal
|
||||||
* @brief Wrapper for date selector, tailored for use in birthday fields.
|
* @brief Wrapper for date selector, tailored for use in birthday fields.
|
||||||
*
|
*
|
||||||
* @param string $dob Date of Birth
|
* @param string $dob Date of Birth
|
||||||
|
* @param string $timezone
|
||||||
* @return string Formatted HTML
|
* @return string Formatted HTML
|
||||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
* @throws \Exception
|
||||||
*/
|
*/
|
||||||
public static function getDateofBirthField($dob)
|
public static function getDateofBirthField(string $dob, string $timezone = 'UTC')
|
||||||
{
|
{
|
||||||
$a = \get_app();
|
|
||||||
|
|
||||||
list($year, $month, $day) = sscanf($dob, '%4d-%2d-%2d');
|
list($year, $month, $day) = sscanf($dob, '%4d-%2d-%2d');
|
||||||
|
|
||||||
if ($dob < '0000-01-01') {
|
if ($dob < '0000-01-01') {
|
||||||
|
@ -137,7 +136,7 @@ class Temporal
|
||||||
$value = DateTimeFormat::utc(($year > 1000) ? $dob : '1000-' . $month . '-' . $day, 'Y-m-d');
|
$value = DateTimeFormat::utc(($year > 1000) ? $dob : '1000-' . $month . '-' . $day, 'Y-m-d');
|
||||||
}
|
}
|
||||||
|
|
||||||
$age = (intval($value) ? self::getAgeByTimezone($value, $a->user["timezone"], $a->user["timezone"]) : "");
|
$age = (intval($value) ? self::getAgeByTimezone($value, $timezone, $timezone) : "");
|
||||||
|
|
||||||
$tpl = Renderer::getMarkupTemplate("field_input.tpl");
|
$tpl = Renderer::getMarkupTemplate("field_input.tpl");
|
||||||
$o = Renderer::replaceMacros($tpl,
|
$o = Renderer::replaceMacros($tpl,
|
||||||
|
|
|
@ -304,8 +304,11 @@ class CronJobs
|
||||||
/// - set contact-id in item when not present
|
/// - set contact-id in item when not present
|
||||||
|
|
||||||
// Add intro entries for pending contacts
|
// Add intro entries for pending contacts
|
||||||
|
// We don't do this for DFRN entries since such revived contact requests seem to mostly fail.
|
||||||
$pending_contacts = DBA::p("SELECT `uid`, `id`, `url`, `network`, `created` FROM `contact`
|
$pending_contacts = DBA::p("SELECT `uid`, `id`, `url`, `network`, `created` FROM `contact`
|
||||||
WHERE `pending` AND `rel` IN (?, ?) AND NOT EXISTS (SELECT `id` FROM `intro` WHERE `contact-id` = `contact`.`id`)", 0, Contact::FOLLOWER);
|
WHERE `pending` AND `rel` IN (?, ?) AND `network` != ?
|
||||||
|
AND NOT EXISTS (SELECT `id` FROM `intro` WHERE `contact-id` = `contact`.`id`)",
|
||||||
|
0, Contact::FOLLOWER, Protocol::DFRN);
|
||||||
while ($contact = DBA::fetch($pending_contacts)) {
|
while ($contact = DBA::fetch($pending_contacts)) {
|
||||||
DBA::insert('intro', ['uid' => $contact['uid'], 'contact-id' => $contact['id'], 'blocked' => false,
|
DBA::insert('intro', ['uid' => $contact['uid'], 'contact-id' => $contact['id'], 'blocked' => false,
|
||||||
'hash' => Strings::getRandomHex(), 'datetime' => $contact['created']]);
|
'hash' => Strings::getRandomHex(), 'datetime' => $contact['created']]);
|
||||||
|
|
|
@ -568,6 +568,11 @@ class Notifier
|
||||||
*/
|
*/
|
||||||
private static function skipDFRN($contact, $item, $cmd)
|
private static function skipDFRN($contact, $item, $cmd)
|
||||||
{
|
{
|
||||||
|
// Use DFRN if we are on the same site
|
||||||
|
if (!empty($contact['url']) && Contact::isLocal($contact['url'])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Don't skip when author or owner don't have AP profiles
|
// Don't skip when author or owner don't have AP profiles
|
||||||
if ((!empty($item['author-link']) && empty(APContact::getByURL($item['author-link'], false))) || (!empty($item['owner-link']) && empty(APContact::getByURL($item['owner-link'], false)))) {
|
if ((!empty($item['author-link']) && empty(APContact::getByURL($item['author-link'], false))) || (!empty($item['owner-link']) && empty(APContact::getByURL($item['owner-link'], false)))) {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
|
|
||||||
if (!defined('DB_UPDATE_VERSION')) {
|
if (!defined('DB_UPDATE_VERSION')) {
|
||||||
define('DB_UPDATE_VERSION', 1322);
|
define('DB_UPDATE_VERSION', 1323);
|
||||||
}
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
|
|
@ -62,7 +62,7 @@ return [
|
||||||
],
|
],
|
||||||
App\Mode::class => [
|
App\Mode::class => [
|
||||||
'call' => [
|
'call' => [
|
||||||
['determineRunMode', [$_SERVER], Dice::CHAIN_CALL],
|
['determineRunMode', [true, $_SERVER], Dice::CHAIN_CALL],
|
||||||
['determine', [], Dice::CHAIN_CALL],
|
['determine', [], Dice::CHAIN_CALL],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
@ -114,12 +114,18 @@ return [
|
||||||
*/
|
*/
|
||||||
LoggerInterface::class => [
|
LoggerInterface::class => [
|
||||||
'instanceOf' => Factory\LoggerFactory::class,
|
'instanceOf' => Factory\LoggerFactory::class,
|
||||||
|
'constructParams' => [
|
||||||
|
'index',
|
||||||
|
],
|
||||||
'call' => [
|
'call' => [
|
||||||
['create', [], Dice::CHAIN_CALL],
|
['create', ['index'], Dice::CHAIN_CALL],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
'$devLogger' => [
|
'$devLogger' => [
|
||||||
'instanceOf' => Factory\LoggerFactory::class,
|
'instanceOf' => Factory\LoggerFactory::class,
|
||||||
|
'constructParams' => [
|
||||||
|
'dev',
|
||||||
|
],
|
||||||
'call' => [
|
'call' => [
|
||||||
['createDev', [], Dice::CHAIN_CALL],
|
['createDev', [], Dice::CHAIN_CALL],
|
||||||
]
|
]
|
||||||
|
|
|
@ -3,17 +3,9 @@
|
||||||
* This file is loaded by PHPUnit before any test.
|
* This file is loaded by PHPUnit before any test.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use PHPUnit\DbUnit\DataSet\YamlDataSet;
|
|
||||||
use PHPUnit\DbUnit\TestCaseTrait;
|
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
// Backward compatibility
|
// Backward compatibility
|
||||||
if (!class_exists(TestCase::class)) {
|
if (!class_exists(TestCase::class)) {
|
||||||
class_alias(PHPUnit_Framework_TestCase::class, TestCase::class);
|
class_alias(PHPUnit_Framework_TestCase::class, TestCase::class);
|
||||||
}
|
}
|
||||||
if (!trait_exists(TestCaseTrait::class)) {
|
|
||||||
class_alias(PHPUnit_Extensions_Database_TestCase_Trait::class, TestCaseTrait::class);
|
|
||||||
}
|
|
||||||
if (!class_exists(YamlDataSet::class)) {
|
|
||||||
class_alias(PHPUnit_Extensions_Database_DataSet_YamlDataSet::class, YamlDataSet::class);
|
|
||||||
}
|
|
||||||
|
|
|
@ -183,13 +183,13 @@ class ModeTest extends MockedTest
|
||||||
/**
|
/**
|
||||||
* Test if not called by index is backend
|
* Test if not called by index is backend
|
||||||
*/
|
*/
|
||||||
public function testIsBackendNotIndex()
|
public function testIsBackendNotIsBackend()
|
||||||
{
|
{
|
||||||
$server = ['PHP_SELF' => '/daemon.php'];
|
$server = [];
|
||||||
$module = new Module();
|
$module = new Module();
|
||||||
$mobileDetect = new MobileDetect();
|
$mobileDetect = new MobileDetect();
|
||||||
|
|
||||||
$mode = (new Mode())->determineRunMode($module, $server, $mobileDetect);
|
$mode = (new Mode())->determineRunMode(true, $module, $server, $mobileDetect);
|
||||||
|
|
||||||
$this->assertTrue($mode->isBackend());
|
$this->assertTrue($mode->isBackend());
|
||||||
}
|
}
|
||||||
|
@ -199,11 +199,11 @@ class ModeTest extends MockedTest
|
||||||
*/
|
*/
|
||||||
public function testIsBackendButIndex()
|
public function testIsBackendButIndex()
|
||||||
{
|
{
|
||||||
$server = ['PHP_SELF' => '/index.php'];
|
$server = [];
|
||||||
$module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, true);
|
$module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, true);
|
||||||
$mobileDetect = new MobileDetect();
|
$mobileDetect = new MobileDetect();
|
||||||
|
|
||||||
$mode = (new Mode())->determineRunMode($module, $server, $mobileDetect);
|
$mode = (new Mode())->determineRunMode(false, $module, $server, $mobileDetect);
|
||||||
|
|
||||||
$this->assertTrue($mode->isBackend());
|
$this->assertTrue($mode->isBackend());
|
||||||
}
|
}
|
||||||
|
@ -213,11 +213,11 @@ class ModeTest extends MockedTest
|
||||||
*/
|
*/
|
||||||
public function testIsNotBackend()
|
public function testIsNotBackend()
|
||||||
{
|
{
|
||||||
$server = ['PHP_SELF' => '/index.php'];
|
$server = [];
|
||||||
$module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, false);
|
$module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, false);
|
||||||
$mobileDetect = new MobileDetect();
|
$mobileDetect = new MobileDetect();
|
||||||
|
|
||||||
$mode = (new Mode())->determineRunMode($module, $server, $mobileDetect);
|
$mode = (new Mode())->determineRunMode(false, $module, $server, $mobileDetect);
|
||||||
|
|
||||||
$this->assertFalse($mode->isBackend());
|
$this->assertFalse($mode->isBackend());
|
||||||
}
|
}
|
||||||
|
@ -235,7 +235,7 @@ class ModeTest extends MockedTest
|
||||||
$module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, false);
|
$module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, false);
|
||||||
$mobileDetect = new MobileDetect();
|
$mobileDetect = new MobileDetect();
|
||||||
|
|
||||||
$mode = (new Mode())->determineRunMode($module, $server, $mobileDetect);
|
$mode = (new Mode())->determineRunMode(true, $module, $server, $mobileDetect);
|
||||||
|
|
||||||
$this->assertTrue($mode->isAjax());
|
$this->assertTrue($mode->isAjax());
|
||||||
}
|
}
|
||||||
|
@ -249,7 +249,7 @@ class ModeTest extends MockedTest
|
||||||
$module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, false);
|
$module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, false);
|
||||||
$mobileDetect = new MobileDetect();
|
$mobileDetect = new MobileDetect();
|
||||||
|
|
||||||
$mode = (new Mode())->determineRunMode($module, $server, $mobileDetect);
|
$mode = (new Mode())->determineRunMode(true, $module, $server, $mobileDetect);
|
||||||
|
|
||||||
$this->assertFalse($mode->isAjax());
|
$this->assertFalse($mode->isAjax());
|
||||||
}
|
}
|
||||||
|
@ -265,7 +265,7 @@ class ModeTest extends MockedTest
|
||||||
$mobileDetect->shouldReceive('isMobile')->andReturn(true);
|
$mobileDetect->shouldReceive('isMobile')->andReturn(true);
|
||||||
$mobileDetect->shouldReceive('isTablet')->andReturn(true);
|
$mobileDetect->shouldReceive('isTablet')->andReturn(true);
|
||||||
|
|
||||||
$mode = (new Mode())->determineRunMode($module, $server, $mobileDetect);
|
$mode = (new Mode())->determineRunMode(true, $module, $server, $mobileDetect);
|
||||||
|
|
||||||
$this->assertTrue($mode->isMobile());
|
$this->assertTrue($mode->isMobile());
|
||||||
$this->assertTrue($mode->isTablet());
|
$this->assertTrue($mode->isTablet());
|
||||||
|
@ -283,7 +283,7 @@ class ModeTest extends MockedTest
|
||||||
$mobileDetect->shouldReceive('isMobile')->andReturn(false);
|
$mobileDetect->shouldReceive('isMobile')->andReturn(false);
|
||||||
$mobileDetect->shouldReceive('isTablet')->andReturn(false);
|
$mobileDetect->shouldReceive('isTablet')->andReturn(false);
|
||||||
|
|
||||||
$mode = (new Mode())->determineRunMode($module, $server, $mobileDetect);
|
$mode = (new Mode())->determineRunMode(true, $module, $server, $mobileDetect);
|
||||||
|
|
||||||
$this->assertFalse($mode->isMobile());
|
$this->assertFalse($mode->isMobile());
|
||||||
$this->assertFalse($mode->isTablet());
|
$this->assertFalse($mode->isTablet());
|
||||||
|
|
|
@ -179,41 +179,48 @@ class BBCodeTest extends MockedTest
|
||||||
'bug-2199-named-size' => [
|
'bug-2199-named-size' => [
|
||||||
'expectedHtml' => '<span style="font-size: xx-large; line-height: initial;">Test text</span>',
|
'expectedHtml' => '<span style="font-size: xx-large; line-height: initial;">Test text</span>',
|
||||||
'text' => '[size=xx-large]Test text[/size]',
|
'text' => '[size=xx-large]Test text[/size]',
|
||||||
'simpleHtml' => 0,
|
|
||||||
],
|
],
|
||||||
'bug-2199-numeric-size' => [
|
'bug-2199-numeric-size' => [
|
||||||
'expectedHtml' => '<span style="font-size: 24px; line-height: initial;">Test text</span>',
|
'expectedHtml' => '<span style="font-size: 24px; line-height: initial;">Test text</span>',
|
||||||
'text' => '[size=24]Test text[/size]',
|
'text' => '[size=24]Test text[/size]',
|
||||||
'simpleHtml' => 0,
|
|
||||||
],
|
],
|
||||||
'bug-2199-diaspora-no-named-size' => [
|
'bug-2199-diaspora-no-named-size' => [
|
||||||
'expectedHtml' => 'Test text',
|
'expectedHtml' => 'Test text',
|
||||||
'text' => '[size=xx-large]Test text[/size]',
|
'text' => '[size=xx-large]Test text[/size]',
|
||||||
|
'try_oembed' => false,
|
||||||
// Triggers the diaspora compatible output
|
// Triggers the diaspora compatible output
|
||||||
'simpleHtml' => 3,
|
'simpleHtml' => 3,
|
||||||
],
|
],
|
||||||
'bug-2199-diaspora-no-numeric-size' => [
|
'bug-2199-diaspora-no-numeric-size' => [
|
||||||
'expectedHtml' => 'Test text',
|
'expectedHtml' => 'Test text',
|
||||||
'text' => '[size=24]Test text[/size]',
|
'text' => '[size=24]Test text[/size]',
|
||||||
|
'try_oembed' => false,
|
||||||
// Triggers the diaspora compatible output
|
// Triggers the diaspora compatible output
|
||||||
'simpleHtml' => 3,
|
'simpleHtml' => 3,
|
||||||
],
|
],
|
||||||
|
'bug-7665-audio-tag' => [
|
||||||
|
'expectedHtml' => '<audio src="http://www.cendrones.fr/colloque2017/jonathanbocquet.mp3" controls="controls"><a href="http://www.cendrones.fr/colloque2017/jonathanbocquet.mp3">http://www.cendrones.fr/colloque2017/jonathanbocquet.mp3</a></audio>',
|
||||||
|
'text' => '[audio]http://www.cendrones.fr/colloque2017/jonathanbocquet.mp3[/audio]',
|
||||||
|
'try_oembed' => true,
|
||||||
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test convert bbcodes to HTML
|
* Test convert bbcodes to HTML
|
||||||
|
*
|
||||||
* @dataProvider dataBBCodes
|
* @dataProvider dataBBCodes
|
||||||
*
|
*
|
||||||
* @param string $expectedHtml Expected HTML output
|
* @param string $expectedHtml Expected HTML output
|
||||||
* @param string $text BBCode text
|
* @param string $text BBCode text
|
||||||
|
* @param bool $try_oembed Whether to convert multimedia BBCode tag
|
||||||
* @param int $simpleHtml BBCode::convert method $simple_html parameter value, optional.
|
* @param int $simpleHtml BBCode::convert method $simple_html parameter value, optional.
|
||||||
* @param bool $forPlaintext BBCode::convert method $for_plaintext parameter value, optional.
|
* @param bool $forPlaintext BBCode::convert method $for_plaintext parameter value, optional.
|
||||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
||||||
*/
|
*/
|
||||||
public function testConvert($expectedHtml, $text, $simpleHtml = 0, $forPlaintext = false)
|
public function testConvert($expectedHtml, $text, $try_oembed = false, $simpleHtml = 0, $forPlaintext = false)
|
||||||
{
|
{
|
||||||
$actual = BBCode::convert($text, false, $simpleHtml, $forPlaintext);
|
$actual = BBCode::convert($text, $try_oembed, $simpleHtml, $forPlaintext);
|
||||||
|
|
||||||
$this->assertEquals($expectedHtml, $actual);
|
$this->assertEquals($expectedHtml, $actual);
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,4 +50,30 @@ class HTMLTest extends MockedTest
|
||||||
|
|
||||||
$this->assertEquals($expected, $output);
|
$this->assertEquals($expected, $output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function dataHTMLText()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'bug-7665-audio-tag' => [
|
||||||
|
'expectedBBCode' => '[audio]http://www.cendrones.fr/colloque2017/jonathanbocquet.mp3[/audio]',
|
||||||
|
'html' => '<audio src="http://www.cendrones.fr/colloque2017/jonathanbocquet.mp3" controls="controls"><a href="http://www.cendrones.fr/colloque2017/jonathanbocquet.mp3">http://www.cendrones.fr/colloque2017/jonathanbocquet.mp3</a></audio>',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test convert bbcodes to HTML
|
||||||
|
*
|
||||||
|
* @dataProvider dataHTMLText
|
||||||
|
*
|
||||||
|
* @param string $expectedBBCode Expected BBCode output
|
||||||
|
* @param string $html HTML text
|
||||||
|
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
||||||
|
*/
|
||||||
|
public function testToBBCode($expectedBBCode, $html)
|
||||||
|
{
|
||||||
|
$actual = HTML::toBBCode($html);
|
||||||
|
|
||||||
|
$this->assertEquals($expectedBBCode, $actual);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
12
update.php
12
update.php
|
@ -384,3 +384,15 @@ function update_1318()
|
||||||
Worker::add(PRIORITY_LOW, 'ProfileUpdate');
|
Worker::add(PRIORITY_LOW, 'ProfileUpdate');
|
||||||
return Update::SUCCESS;
|
return Update::SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function update_1323()
|
||||||
|
{
|
||||||
|
$users = DBA::select('user', ['uid']);
|
||||||
|
while ($user = DBA::fetch($users)) {
|
||||||
|
Contact::updateSelfFromUserID($user['uid']);
|
||||||
|
}
|
||||||
|
DBA::close($users);
|
||||||
|
|
||||||
|
return Update::SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -45,8 +45,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: friendica\n"
|
"Project-Id-Version: friendica\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2019-09-12 09:52+0200\n"
|
"POT-Creation-Date: 2019-09-15 07:45+0200\n"
|
||||||
"PO-Revision-Date: 2019-09-14 05:33+0000\n"
|
"PO-Revision-Date: 2019-09-16 08:06+0000\n"
|
||||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
|
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
|
||||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
@ -67,12 +67,12 @@ msgstr "Möchtest du wirklich dieses Item löschen?"
|
||||||
|
|
||||||
#: include/items.php:394 mod/api.php:109 mod/profiles.php:526
|
#: include/items.php:394 mod/api.php:109 mod/profiles.php:526
|
||||||
#: mod/profiles.php:529 mod/profiles.php:551 mod/dfrn_request.php:640
|
#: mod/profiles.php:529 mod/profiles.php:551 mod/dfrn_request.php:640
|
||||||
#: mod/follow.php:163 mod/message.php:150 mod/settings.php:1089
|
#: mod/follow.php:163 mod/message.php:150 mod/suggest.php:73
|
||||||
#: mod/settings.php:1095 mod/settings.php:1102 mod/settings.php:1106
|
#: mod/settings.php:1089 mod/settings.php:1095 mod/settings.php:1102
|
||||||
#: mod/settings.php:1110 mod/settings.php:1114 mod/settings.php:1118
|
#: mod/settings.php:1106 mod/settings.php:1110 mod/settings.php:1114
|
||||||
#: mod/settings.php:1122 mod/settings.php:1142 mod/settings.php:1143
|
#: mod/settings.php:1118 mod/settings.php:1122 mod/settings.php:1142
|
||||||
#: mod/settings.php:1144 mod/settings.php:1145 mod/settings.php:1146
|
#: mod/settings.php:1143 mod/settings.php:1144 mod/settings.php:1145
|
||||||
#: mod/suggest.php:73 src/Module/Register.php:97 src/Module/Contact.php:423
|
#: mod/settings.php:1146 src/Module/Register.php:97 src/Module/Contact.php:423
|
||||||
msgid "Yes"
|
msgid "Yes"
|
||||||
msgstr "Ja"
|
msgstr "Ja"
|
||||||
|
|
||||||
|
@ -80,8 +80,8 @@ msgstr "Ja"
|
||||||
#: mod/tagrm.php:115 mod/unfollow.php:132 mod/dfrn_request.php:650
|
#: mod/tagrm.php:115 mod/unfollow.php:132 mod/dfrn_request.php:650
|
||||||
#: mod/editpost.php:110 mod/fbrowser.php:110 mod/fbrowser.php:139
|
#: mod/editpost.php:110 mod/fbrowser.php:110 mod/fbrowser.php:139
|
||||||
#: mod/follow.php:174 mod/message.php:153 mod/photos.php:1084
|
#: mod/follow.php:174 mod/message.php:153 mod/photos.php:1084
|
||||||
#: mod/photos.php:1191 mod/settings.php:678 mod/settings.php:704
|
#: mod/photos.php:1191 mod/suggest.php:76 mod/settings.php:678
|
||||||
#: mod/suggest.php:76 src/Module/Contact.php:426
|
#: mod/settings.php:704 src/Module/Contact.php:426
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Abbrechen"
|
msgstr "Abbrechen"
|
||||||
|
|
||||||
|
@ -98,9 +98,9 @@ msgstr "Abbrechen"
|
||||||
#: mod/message.php:56 mod/message.php:101 mod/network.php:37 mod/notes.php:27
|
#: mod/message.php:56 mod/message.php:101 mod/network.php:37 mod/notes.php:27
|
||||||
#: mod/photos.php:178 mod/photos.php:962 mod/poke.php:141
|
#: mod/photos.php:178 mod/photos.php:962 mod/poke.php:141
|
||||||
#: mod/profile_photo.php:32 mod/profile_photo.php:177
|
#: mod/profile_photo.php:32 mod/profile_photo.php:177
|
||||||
#: mod/profile_photo.php:197 mod/settings.php:52 mod/settings.php:165
|
#: mod/profile_photo.php:197 mod/suggest.php:39 mod/events.php:208
|
||||||
#: mod/settings.php:667 mod/suggest.php:39 mod/events.php:208 mod/item.php:170
|
#: mod/item.php:170 mod/notifications.php:73 mod/settings.php:52
|
||||||
#: mod/notifications.php:73 src/Module/Attach.php:42
|
#: mod/settings.php:165 mod/settings.php:667 src/Module/Attach.php:42
|
||||||
#: src/Module/FollowConfirm.php:27 src/Module/Group.php:31
|
#: src/Module/FollowConfirm.php:27 src/Module/Group.php:31
|
||||||
#: src/Module/Group.php:77 src/Module/Invite.php:22 src/Module/Invite.php:110
|
#: src/Module/Group.php:77 src/Module/Invite.php:22 src/Module/Invite.php:110
|
||||||
#: src/Module/Notifications/Notify.php:19 src/Module/Profile/Contacts.php:50
|
#: src/Module/Notifications/Notify.php:19 src/Module/Profile/Contacts.php:50
|
||||||
|
@ -1740,7 +1740,7 @@ msgstr "Neues Profil anlegen"
|
||||||
msgid "Access denied."
|
msgid "Access denied."
|
||||||
msgstr "Zugriff verweigert."
|
msgstr "Zugriff verweigert."
|
||||||
|
|
||||||
#: mod/cal.php:140 mod/display.php:303 src/Module/Profile.php:184
|
#: mod/cal.php:140 mod/display.php:303 src/Module/Profile.php:185
|
||||||
msgid "Access to this profile has been restricted."
|
msgid "Access to this profile has been restricted."
|
||||||
msgstr "Der Zugriff zu diesem Profil wurde eingeschränkt."
|
msgstr "Der Zugriff zu diesem Profil wurde eingeschränkt."
|
||||||
|
|
||||||
|
@ -2985,6 +2985,331 @@ msgstr "Beiträge, die mit %s getaggt sind"
|
||||||
msgid "Results for: %s"
|
msgid "Results for: %s"
|
||||||
msgstr "Ergebnisse für: %s"
|
msgstr "Ergebnisse für: %s"
|
||||||
|
|
||||||
|
#: mod/subthread.php:104
|
||||||
|
#, php-format
|
||||||
|
msgid "%1$s is following %2$s's %3$s"
|
||||||
|
msgstr "%1$s folgt %2$s %3$s"
|
||||||
|
|
||||||
|
#: mod/suggest.php:28
|
||||||
|
msgid "Contact suggestion successfully ignored."
|
||||||
|
msgstr "Kontaktvorschlag erfolgreich ignoriert."
|
||||||
|
|
||||||
|
#: mod/suggest.php:52
|
||||||
|
msgid ""
|
||||||
|
"No suggestions available. If this is a new site, please try again in 24 "
|
||||||
|
"hours."
|
||||||
|
msgstr "Keine Vorschläge verfügbar. Falls der Server frisch aufgesetzt wurde, versuche es bitte in 24 Stunden noch einmal."
|
||||||
|
|
||||||
|
#: mod/suggest.php:71
|
||||||
|
msgid "Do you really want to delete this suggestion?"
|
||||||
|
msgstr "Möchtest du wirklich diese Empfehlung löschen?"
|
||||||
|
|
||||||
|
#: mod/suggest.php:89 mod/suggest.php:109
|
||||||
|
msgid "Ignore/Hide"
|
||||||
|
msgstr "Ignorieren/Verbergen"
|
||||||
|
|
||||||
|
#: mod/suggest.php:119 view/theme/vier/theme.php:204 src/Content/Widget.php:69
|
||||||
|
msgid "Friend Suggestions"
|
||||||
|
msgstr "Kontaktvorschläge"
|
||||||
|
|
||||||
|
#: mod/uexport.php:52
|
||||||
|
msgid "Export account"
|
||||||
|
msgstr "Account exportieren"
|
||||||
|
|
||||||
|
#: mod/uexport.php:52
|
||||||
|
msgid ""
|
||||||
|
"Export your account info and contacts. Use this to make a backup of your "
|
||||||
|
"account and/or to move it to another server."
|
||||||
|
msgstr "Exportiere Deine Account-Informationen und Kontakte. Verwende dies, um ein Backup Deines Accounts anzulegen und/oder damit auf einen anderen Server umzuziehen."
|
||||||
|
|
||||||
|
#: mod/uexport.php:53
|
||||||
|
msgid "Export all"
|
||||||
|
msgstr "Alles exportieren"
|
||||||
|
|
||||||
|
#: mod/uexport.php:53
|
||||||
|
msgid ""
|
||||||
|
"Export your accout info, contacts and all your items as json. Could be a "
|
||||||
|
"very big file, and could take a lot of time. Use this to make a full backup "
|
||||||
|
"of your account (photos are not exported)"
|
||||||
|
msgstr "Exportiere Deine Account-Informationen, Kontakte und alle Einträge als JSON Datei. Dies könnte eine sehr große Datei werden und dementsprechend viel Zeit benötigen. Verwende dies, um ein komplettes Backup Deines Accounts anzulegen (Fotos werden nicht exportiert)."
|
||||||
|
|
||||||
|
#: mod/uexport.php:59 mod/settings.php:131
|
||||||
|
#: src/Module/BaseSettingsModule.php:89
|
||||||
|
msgid "Export personal data"
|
||||||
|
msgstr "Persönliche Daten exportieren"
|
||||||
|
|
||||||
|
#: mod/videos.php:123
|
||||||
|
msgid "No videos selected"
|
||||||
|
msgstr "Keine Videos ausgewählt"
|
||||||
|
|
||||||
|
#: mod/videos.php:280 src/Model/Item.php:3477
|
||||||
|
msgid "View Video"
|
||||||
|
msgstr "Video ansehen"
|
||||||
|
|
||||||
|
#: mod/videos.php:295
|
||||||
|
msgid "Recent Videos"
|
||||||
|
msgstr "Neueste Videos"
|
||||||
|
|
||||||
|
#: mod/videos.php:297
|
||||||
|
msgid "Upload New Videos"
|
||||||
|
msgstr "Neues Video hochladen"
|
||||||
|
|
||||||
|
#: mod/display.php:254 mod/display.php:339
|
||||||
|
msgid "The requested item doesn't exist or has been deleted."
|
||||||
|
msgstr "Der angeforderte Beitrag existiert nicht oder wurde gelöscht."
|
||||||
|
|
||||||
|
#: mod/display.php:417
|
||||||
|
msgid "The feed for this item is unavailable."
|
||||||
|
msgstr "Der Feed für diesen Beitrag ist nicht verfügbar."
|
||||||
|
|
||||||
|
#: mod/events.php:118 mod/events.php:120
|
||||||
|
msgid "Event can not end before it has started."
|
||||||
|
msgstr "Die Veranstaltung kann nicht enden, bevor sie beginnt."
|
||||||
|
|
||||||
|
#: mod/events.php:127 mod/events.php:129
|
||||||
|
msgid "Event title and start time are required."
|
||||||
|
msgstr "Der Veranstaltungstitel und die Anfangszeit müssen angegeben werden."
|
||||||
|
|
||||||
|
#: mod/events.php:385
|
||||||
|
msgid "Create New Event"
|
||||||
|
msgstr "Neue Veranstaltung erstellen"
|
||||||
|
|
||||||
|
#: mod/events.php:508
|
||||||
|
msgid "Event details"
|
||||||
|
msgstr "Veranstaltungsdetails"
|
||||||
|
|
||||||
|
#: mod/events.php:509
|
||||||
|
msgid "Starting date and Title are required."
|
||||||
|
msgstr "Anfangszeitpunkt und Titel werden benötigt"
|
||||||
|
|
||||||
|
#: mod/events.php:510 mod/events.php:515
|
||||||
|
msgid "Event Starts:"
|
||||||
|
msgstr "Veranstaltungsbeginn:"
|
||||||
|
|
||||||
|
#: mod/events.php:523 mod/events.php:548
|
||||||
|
msgid "Finish date/time is not known or not relevant"
|
||||||
|
msgstr "Enddatum/-zeit ist nicht bekannt oder nicht relevant"
|
||||||
|
|
||||||
|
#: mod/events.php:525 mod/events.php:530
|
||||||
|
msgid "Event Finishes:"
|
||||||
|
msgstr "Veranstaltungsende:"
|
||||||
|
|
||||||
|
#: mod/events.php:536 mod/events.php:549
|
||||||
|
msgid "Adjust for viewer timezone"
|
||||||
|
msgstr "An Zeitzone des Betrachters anpassen"
|
||||||
|
|
||||||
|
#: mod/events.php:538
|
||||||
|
msgid "Description:"
|
||||||
|
msgstr "Beschreibung"
|
||||||
|
|
||||||
|
#: mod/events.php:540 mod/notifications.php:272 src/Model/Event.php:68
|
||||||
|
#: src/Model/Event.php:95 src/Model/Event.php:437 src/Model/Event.php:933
|
||||||
|
#: src/Model/Profile.php:447 src/Module/Directory.php:137
|
||||||
|
#: src/Module/Contact.php:607
|
||||||
|
msgid "Location:"
|
||||||
|
msgstr "Ort:"
|
||||||
|
|
||||||
|
#: mod/events.php:542 mod/events.php:544
|
||||||
|
msgid "Title:"
|
||||||
|
msgstr "Titel:"
|
||||||
|
|
||||||
|
#: mod/events.php:545 mod/events.php:546
|
||||||
|
msgid "Share this event"
|
||||||
|
msgstr "Veranstaltung teilen"
|
||||||
|
|
||||||
|
#: mod/events.php:553 src/Model/Profile.php:890
|
||||||
|
msgid "Basic"
|
||||||
|
msgstr "Allgemein"
|
||||||
|
|
||||||
|
#: mod/events.php:554 src/Model/Profile.php:891 src/Module/Admin/Site.php:573
|
||||||
|
#: src/Module/Contact.php:880
|
||||||
|
msgid "Advanced"
|
||||||
|
msgstr "Erweitert"
|
||||||
|
|
||||||
|
#: mod/events.php:571
|
||||||
|
msgid "Failed to remove event"
|
||||||
|
msgstr "Entfernen der Veranstaltung fehlgeschlagen"
|
||||||
|
|
||||||
|
#: mod/events.php:573
|
||||||
|
msgid "Event removed"
|
||||||
|
msgstr "Veranstaltung enfternt"
|
||||||
|
|
||||||
|
#: mod/item.php:123
|
||||||
|
msgid "Unable to locate original post."
|
||||||
|
msgstr "Konnte den Originalbeitrag nicht finden."
|
||||||
|
|
||||||
|
#: mod/item.php:323
|
||||||
|
msgid "Empty post discarded."
|
||||||
|
msgstr "Leerer Beitrag wurde verworfen."
|
||||||
|
|
||||||
|
#: mod/item.php:803
|
||||||
|
#, php-format
|
||||||
|
msgid ""
|
||||||
|
"This message was sent to you by %s, a member of the Friendica social "
|
||||||
|
"network."
|
||||||
|
msgstr "Diese Nachricht wurde dir von %s geschickt, einem Mitglied des Sozialen Netzwerks Friendica."
|
||||||
|
|
||||||
|
#: mod/item.php:805
|
||||||
|
#, php-format
|
||||||
|
msgid "You may visit them online at %s"
|
||||||
|
msgstr "Du kannst sie online unter %s besuchen"
|
||||||
|
|
||||||
|
#: mod/item.php:806
|
||||||
|
msgid ""
|
||||||
|
"Please contact the sender by replying to this post if you do not wish to "
|
||||||
|
"receive these messages."
|
||||||
|
msgstr "Falls du diese Beiträge nicht erhalten möchtest, kontaktiere bitte den Autor, indem du auf diese Nachricht antwortest."
|
||||||
|
|
||||||
|
#: mod/item.php:810
|
||||||
|
#, php-format
|
||||||
|
msgid "%s posted an update."
|
||||||
|
msgstr "%s hat ein Update veröffentlicht."
|
||||||
|
|
||||||
|
#: mod/notifications.php:40
|
||||||
|
msgid "Invalid request identifier."
|
||||||
|
msgstr "Invalid request identifier."
|
||||||
|
|
||||||
|
#: mod/notifications.php:96 src/Content/Nav.php:249
|
||||||
|
msgid "Notifications"
|
||||||
|
msgstr "Benachrichtigungen"
|
||||||
|
|
||||||
|
#: mod/notifications.php:115
|
||||||
|
msgid "Network Notifications"
|
||||||
|
msgstr "Netzwerkbenachrichtigungen"
|
||||||
|
|
||||||
|
#: mod/notifications.php:120
|
||||||
|
msgid "System Notifications"
|
||||||
|
msgstr "Systembenachrichtigungen"
|
||||||
|
|
||||||
|
#: mod/notifications.php:125
|
||||||
|
msgid "Personal Notifications"
|
||||||
|
msgstr "Persönliche Benachrichtigungen"
|
||||||
|
|
||||||
|
#: mod/notifications.php:130
|
||||||
|
msgid "Home Notifications"
|
||||||
|
msgstr "Pinnwandbenachrichtigungen"
|
||||||
|
|
||||||
|
#: mod/notifications.php:153
|
||||||
|
msgid "Show unread"
|
||||||
|
msgstr "Ungelesene anzeigen"
|
||||||
|
|
||||||
|
#: mod/notifications.php:153
|
||||||
|
msgid "Show all"
|
||||||
|
msgstr "Alle anzeigen"
|
||||||
|
|
||||||
|
#: mod/notifications.php:164
|
||||||
|
msgid "Show Ignored Requests"
|
||||||
|
msgstr "Zeige ignorierte Anfragen"
|
||||||
|
|
||||||
|
#: mod/notifications.php:164
|
||||||
|
msgid "Hide Ignored Requests"
|
||||||
|
msgstr "Verberge ignorierte Anfragen"
|
||||||
|
|
||||||
|
#: mod/notifications.php:177 mod/notifications.php:262
|
||||||
|
msgid "Notification type:"
|
||||||
|
msgstr "Art der Benachrichtigung:"
|
||||||
|
|
||||||
|
#: mod/notifications.php:180
|
||||||
|
msgid "Suggested by:"
|
||||||
|
msgstr "Vorgeschlagen von:"
|
||||||
|
|
||||||
|
#: mod/notifications.php:192 mod/notifications.php:279
|
||||||
|
#: src/Module/Contact.php:594
|
||||||
|
msgid "Hide this contact from others"
|
||||||
|
msgstr "Verbirg diesen Kontakt vor Anderen"
|
||||||
|
|
||||||
|
#: mod/notifications.php:194 mod/notifications.php:288
|
||||||
|
#: src/Model/Contact.php:1238 src/Module/Admin/Users.php:286
|
||||||
|
msgid "Approve"
|
||||||
|
msgstr "Genehmigen"
|
||||||
|
|
||||||
|
#: mod/notifications.php:214
|
||||||
|
msgid "Claims to be known to you: "
|
||||||
|
msgstr "Behauptet, dich zu kennen: "
|
||||||
|
|
||||||
|
#: mod/notifications.php:215
|
||||||
|
msgid "yes"
|
||||||
|
msgstr "ja"
|
||||||
|
|
||||||
|
#: mod/notifications.php:215
|
||||||
|
msgid "no"
|
||||||
|
msgstr "nein"
|
||||||
|
|
||||||
|
#: mod/notifications.php:216 mod/notifications.php:220
|
||||||
|
msgid "Shall your connection be bidirectional or not?"
|
||||||
|
msgstr "Soll die Verbindung beidseitig sein oder nicht?"
|
||||||
|
|
||||||
|
#: mod/notifications.php:217 mod/notifications.php:221
|
||||||
|
#, php-format
|
||||||
|
msgid ""
|
||||||
|
"Accepting %s as a friend allows %s to subscribe to your posts, and you will "
|
||||||
|
"also receive updates from them in your news feed."
|
||||||
|
msgstr "Akzeptierst du %s als Kontakt, erlaubst du damit das Lesen deiner Beiträge und abonnierst selbst auch die Beiträge von %s."
|
||||||
|
|
||||||
|
#: mod/notifications.php:218
|
||||||
|
#, php-format
|
||||||
|
msgid ""
|
||||||
|
"Accepting %s as a subscriber allows them to subscribe to your posts, but you"
|
||||||
|
" will not receive updates from them in your news feed."
|
||||||
|
msgstr "Wenn du %s als Abonnent akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten."
|
||||||
|
|
||||||
|
#: mod/notifications.php:222
|
||||||
|
#, php-format
|
||||||
|
msgid ""
|
||||||
|
"Accepting %s as a sharer allows them to subscribe to your posts, but you "
|
||||||
|
"will not receive updates from them in your news feed."
|
||||||
|
msgstr "Wenn du %s als Teilender akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten."
|
||||||
|
|
||||||
|
#: mod/notifications.php:233
|
||||||
|
msgid "Friend"
|
||||||
|
msgstr "Kontakt"
|
||||||
|
|
||||||
|
#: mod/notifications.php:234
|
||||||
|
msgid "Sharer"
|
||||||
|
msgstr "Teilender"
|
||||||
|
|
||||||
|
#: mod/notifications.php:234
|
||||||
|
msgid "Subscriber"
|
||||||
|
msgstr "Abonnent"
|
||||||
|
|
||||||
|
#: mod/notifications.php:274 src/Model/Profile.php:453
|
||||||
|
#: src/Model/Profile.php:832 src/Module/Directory.php:145
|
||||||
|
#: src/Module/Contact.php:611
|
||||||
|
msgid "About:"
|
||||||
|
msgstr "Über:"
|
||||||
|
|
||||||
|
#: mod/notifications.php:278 src/Model/Profile.php:450
|
||||||
|
#: src/Model/Profile.php:771 src/Module/Directory.php:142
|
||||||
|
msgid "Gender:"
|
||||||
|
msgstr "Geschlecht:"
|
||||||
|
|
||||||
|
#: mod/notifications.php:285 src/Model/Profile.php:558
|
||||||
|
#: src/Module/Contact.php:295
|
||||||
|
msgid "Network:"
|
||||||
|
msgstr "Netzwerk:"
|
||||||
|
|
||||||
|
#: mod/notifications.php:299
|
||||||
|
msgid "No introductions."
|
||||||
|
msgstr "Keine Kontaktanfragen."
|
||||||
|
|
||||||
|
#: mod/notifications.php:333
|
||||||
|
#, php-format
|
||||||
|
msgid "No more %s notifications."
|
||||||
|
msgstr "Keine weiteren %s-Benachrichtigungen"
|
||||||
|
|
||||||
|
#: mod/openid.php:30
|
||||||
|
msgid "OpenID protocol error. No ID returned."
|
||||||
|
msgstr "OpenID Protokollfehler. Keine ID zurückgegeben."
|
||||||
|
|
||||||
|
#: mod/openid.php:60
|
||||||
|
msgid ""
|
||||||
|
"Account not found and OpenID registration is not permitted on this site."
|
||||||
|
msgstr "Nutzerkonto wurde nicht gefunden und OpenID-Registrierung ist auf diesem Server nicht gestattet."
|
||||||
|
|
||||||
|
#: mod/openid.php:108 src/Module/Login.php:88 src/Module/Login.php:139
|
||||||
|
msgid "Login failed."
|
||||||
|
msgstr "Anmeldung fehlgeschlagen."
|
||||||
|
|
||||||
#: mod/settings.php:65 src/Module/BaseSettingsModule.php:24
|
#: mod/settings.php:65 src/Module/BaseSettingsModule.php:24
|
||||||
msgid "Account"
|
msgid "Account"
|
||||||
msgstr "Nutzerkonto"
|
msgstr "Nutzerkonto"
|
||||||
|
@ -3029,11 +3354,6 @@ msgstr "Delegationen"
|
||||||
msgid "Connected apps"
|
msgid "Connected apps"
|
||||||
msgstr "Verbundene Programme"
|
msgstr "Verbundene Programme"
|
||||||
|
|
||||||
#: mod/settings.php:131 mod/uexport.php:59
|
|
||||||
#: src/Module/BaseSettingsModule.php:89
|
|
||||||
msgid "Export personal data"
|
|
||||||
msgstr "Persönliche Daten exportieren"
|
|
||||||
|
|
||||||
#: mod/settings.php:138 src/Module/BaseSettingsModule.php:96
|
#: mod/settings.php:138 src/Module/BaseSettingsModule.php:96
|
||||||
msgid "Remove account"
|
msgid "Remove account"
|
||||||
msgstr "Konto löschen"
|
msgstr "Konto löschen"
|
||||||
|
@ -3605,6 +3925,13 @@ msgid ""
|
||||||
"href=\"%s\">%s</a>). Your profile will be visible in public."
|
"href=\"%s\">%s</a>). Your profile will be visible in public."
|
||||||
msgstr "Dein Profil wird in den globalen Friendica-Verzeichnissen (z.B. <a href=\"%s\">%s</a>) veröffentlicht. Dein Profil wird öffentlich auffindbar sein."
|
msgstr "Dein Profil wird in den globalen Friendica-Verzeichnissen (z.B. <a href=\"%s\">%s</a>) veröffentlicht. Dein Profil wird öffentlich auffindbar sein."
|
||||||
|
|
||||||
|
#: mod/settings.php:1095
|
||||||
|
msgid ""
|
||||||
|
"This setting also determines whether Friendica will inform search engines "
|
||||||
|
"that your profile should be indexed or not. Third-party search engines may "
|
||||||
|
"or may not respect this setting."
|
||||||
|
msgstr "Diese Einstellung bestimmt auch, ob Friendica Suchmaschinen mitteilt, dass das Profil indiziert werden darf oder nicht. Ob sich Suchmaschinen von Drittanbietern daran halten, kann Friendica nicht beeinflussen."
|
||||||
|
|
||||||
#: mod/settings.php:1102
|
#: mod/settings.php:1102
|
||||||
msgid "Hide your contact/friend list from viewers of your default profile?"
|
msgid "Hide your contact/friend list from viewers of your default profile?"
|
||||||
msgstr "Liste der Kontakte vor Betrachtern des Standardprofils verbergen?"
|
msgstr "Liste der Kontakte vor Betrachtern des Standardprofils verbergen?"
|
||||||
|
@ -3905,326 +4232,6 @@ msgstr "Wenn du dein Profil von einem anderen Server umgezogen hast und einige d
|
||||||
msgid "Resend relocate message to contacts"
|
msgid "Resend relocate message to contacts"
|
||||||
msgstr "Umzugsbenachrichtigung erneut an Kontakte senden"
|
msgstr "Umzugsbenachrichtigung erneut an Kontakte senden"
|
||||||
|
|
||||||
#: mod/subthread.php:104
|
|
||||||
#, php-format
|
|
||||||
msgid "%1$s is following %2$s's %3$s"
|
|
||||||
msgstr "%1$s folgt %2$s %3$s"
|
|
||||||
|
|
||||||
#: mod/suggest.php:28
|
|
||||||
msgid "Contact suggestion successfully ignored."
|
|
||||||
msgstr "Kontaktvorschlag erfolgreich ignoriert."
|
|
||||||
|
|
||||||
#: mod/suggest.php:52
|
|
||||||
msgid ""
|
|
||||||
"No suggestions available. If this is a new site, please try again in 24 "
|
|
||||||
"hours."
|
|
||||||
msgstr "Keine Vorschläge verfügbar. Falls der Server frisch aufgesetzt wurde, versuche es bitte in 24 Stunden noch einmal."
|
|
||||||
|
|
||||||
#: mod/suggest.php:71
|
|
||||||
msgid "Do you really want to delete this suggestion?"
|
|
||||||
msgstr "Möchtest du wirklich diese Empfehlung löschen?"
|
|
||||||
|
|
||||||
#: mod/suggest.php:89 mod/suggest.php:109
|
|
||||||
msgid "Ignore/Hide"
|
|
||||||
msgstr "Ignorieren/Verbergen"
|
|
||||||
|
|
||||||
#: mod/suggest.php:119 view/theme/vier/theme.php:204 src/Content/Widget.php:69
|
|
||||||
msgid "Friend Suggestions"
|
|
||||||
msgstr "Kontaktvorschläge"
|
|
||||||
|
|
||||||
#: mod/uexport.php:52
|
|
||||||
msgid "Export account"
|
|
||||||
msgstr "Account exportieren"
|
|
||||||
|
|
||||||
#: mod/uexport.php:52
|
|
||||||
msgid ""
|
|
||||||
"Export your account info and contacts. Use this to make a backup of your "
|
|
||||||
"account and/or to move it to another server."
|
|
||||||
msgstr "Exportiere Deine Account-Informationen und Kontakte. Verwende dies, um ein Backup Deines Accounts anzulegen und/oder damit auf einen anderen Server umzuziehen."
|
|
||||||
|
|
||||||
#: mod/uexport.php:53
|
|
||||||
msgid "Export all"
|
|
||||||
msgstr "Alles exportieren"
|
|
||||||
|
|
||||||
#: mod/uexport.php:53
|
|
||||||
msgid ""
|
|
||||||
"Export your accout info, contacts and all your items as json. Could be a "
|
|
||||||
"very big file, and could take a lot of time. Use this to make a full backup "
|
|
||||||
"of your account (photos are not exported)"
|
|
||||||
msgstr "Exportiere Deine Account-Informationen, Kontakte und alle Einträge als JSON Datei. Dies könnte eine sehr große Datei werden und dementsprechend viel Zeit benötigen. Verwende dies, um ein komplettes Backup Deines Accounts anzulegen (Fotos werden nicht exportiert)."
|
|
||||||
|
|
||||||
#: mod/videos.php:123
|
|
||||||
msgid "No videos selected"
|
|
||||||
msgstr "Keine Videos ausgewählt"
|
|
||||||
|
|
||||||
#: mod/videos.php:280 src/Model/Item.php:3477
|
|
||||||
msgid "View Video"
|
|
||||||
msgstr "Video ansehen"
|
|
||||||
|
|
||||||
#: mod/videos.php:295
|
|
||||||
msgid "Recent Videos"
|
|
||||||
msgstr "Neueste Videos"
|
|
||||||
|
|
||||||
#: mod/videos.php:297
|
|
||||||
msgid "Upload New Videos"
|
|
||||||
msgstr "Neues Video hochladen"
|
|
||||||
|
|
||||||
#: mod/display.php:254 mod/display.php:339
|
|
||||||
msgid "The requested item doesn't exist or has been deleted."
|
|
||||||
msgstr "Der angeforderte Beitrag existiert nicht oder wurde gelöscht."
|
|
||||||
|
|
||||||
#: mod/display.php:417
|
|
||||||
msgid "The feed for this item is unavailable."
|
|
||||||
msgstr "Der Feed für diesen Beitrag ist nicht verfügbar."
|
|
||||||
|
|
||||||
#: mod/events.php:118 mod/events.php:120
|
|
||||||
msgid "Event can not end before it has started."
|
|
||||||
msgstr "Die Veranstaltung kann nicht enden, bevor sie beginnt."
|
|
||||||
|
|
||||||
#: mod/events.php:127 mod/events.php:129
|
|
||||||
msgid "Event title and start time are required."
|
|
||||||
msgstr "Der Veranstaltungstitel und die Anfangszeit müssen angegeben werden."
|
|
||||||
|
|
||||||
#: mod/events.php:385
|
|
||||||
msgid "Create New Event"
|
|
||||||
msgstr "Neue Veranstaltung erstellen"
|
|
||||||
|
|
||||||
#: mod/events.php:508
|
|
||||||
msgid "Event details"
|
|
||||||
msgstr "Veranstaltungsdetails"
|
|
||||||
|
|
||||||
#: mod/events.php:509
|
|
||||||
msgid "Starting date and Title are required."
|
|
||||||
msgstr "Anfangszeitpunkt und Titel werden benötigt"
|
|
||||||
|
|
||||||
#: mod/events.php:510 mod/events.php:515
|
|
||||||
msgid "Event Starts:"
|
|
||||||
msgstr "Veranstaltungsbeginn:"
|
|
||||||
|
|
||||||
#: mod/events.php:523 mod/events.php:548
|
|
||||||
msgid "Finish date/time is not known or not relevant"
|
|
||||||
msgstr "Enddatum/-zeit ist nicht bekannt oder nicht relevant"
|
|
||||||
|
|
||||||
#: mod/events.php:525 mod/events.php:530
|
|
||||||
msgid "Event Finishes:"
|
|
||||||
msgstr "Veranstaltungsende:"
|
|
||||||
|
|
||||||
#: mod/events.php:536 mod/events.php:549
|
|
||||||
msgid "Adjust for viewer timezone"
|
|
||||||
msgstr "An Zeitzone des Betrachters anpassen"
|
|
||||||
|
|
||||||
#: mod/events.php:538
|
|
||||||
msgid "Description:"
|
|
||||||
msgstr "Beschreibung"
|
|
||||||
|
|
||||||
#: mod/events.php:540 mod/notifications.php:272 src/Model/Event.php:68
|
|
||||||
#: src/Model/Event.php:95 src/Model/Event.php:437 src/Model/Event.php:933
|
|
||||||
#: src/Model/Profile.php:447 src/Module/Directory.php:137
|
|
||||||
#: src/Module/Contact.php:607
|
|
||||||
msgid "Location:"
|
|
||||||
msgstr "Ort:"
|
|
||||||
|
|
||||||
#: mod/events.php:542 mod/events.php:544
|
|
||||||
msgid "Title:"
|
|
||||||
msgstr "Titel:"
|
|
||||||
|
|
||||||
#: mod/events.php:545 mod/events.php:546
|
|
||||||
msgid "Share this event"
|
|
||||||
msgstr "Veranstaltung teilen"
|
|
||||||
|
|
||||||
#: mod/events.php:553 src/Model/Profile.php:890
|
|
||||||
msgid "Basic"
|
|
||||||
msgstr "Allgemein"
|
|
||||||
|
|
||||||
#: mod/events.php:554 src/Model/Profile.php:891 src/Module/Admin/Site.php:573
|
|
||||||
#: src/Module/Contact.php:880
|
|
||||||
msgid "Advanced"
|
|
||||||
msgstr "Erweitert"
|
|
||||||
|
|
||||||
#: mod/events.php:571
|
|
||||||
msgid "Failed to remove event"
|
|
||||||
msgstr "Entfernen der Veranstaltung fehlgeschlagen"
|
|
||||||
|
|
||||||
#: mod/events.php:573
|
|
||||||
msgid "Event removed"
|
|
||||||
msgstr "Veranstaltung enfternt"
|
|
||||||
|
|
||||||
#: mod/item.php:123
|
|
||||||
msgid "Unable to locate original post."
|
|
||||||
msgstr "Konnte den Originalbeitrag nicht finden."
|
|
||||||
|
|
||||||
#: mod/item.php:323
|
|
||||||
msgid "Empty post discarded."
|
|
||||||
msgstr "Leerer Beitrag wurde verworfen."
|
|
||||||
|
|
||||||
#: mod/item.php:803
|
|
||||||
#, php-format
|
|
||||||
msgid ""
|
|
||||||
"This message was sent to you by %s, a member of the Friendica social "
|
|
||||||
"network."
|
|
||||||
msgstr "Diese Nachricht wurde dir von %s geschickt, einem Mitglied des Sozialen Netzwerks Friendica."
|
|
||||||
|
|
||||||
#: mod/item.php:805
|
|
||||||
#, php-format
|
|
||||||
msgid "You may visit them online at %s"
|
|
||||||
msgstr "Du kannst sie online unter %s besuchen"
|
|
||||||
|
|
||||||
#: mod/item.php:806
|
|
||||||
msgid ""
|
|
||||||
"Please contact the sender by replying to this post if you do not wish to "
|
|
||||||
"receive these messages."
|
|
||||||
msgstr "Falls du diese Beiträge nicht erhalten möchtest, kontaktiere bitte den Autor, indem du auf diese Nachricht antwortest."
|
|
||||||
|
|
||||||
#: mod/item.php:810
|
|
||||||
#, php-format
|
|
||||||
msgid "%s posted an update."
|
|
||||||
msgstr "%s hat ein Update veröffentlicht."
|
|
||||||
|
|
||||||
#: mod/notifications.php:40
|
|
||||||
msgid "Invalid request identifier."
|
|
||||||
msgstr "Invalid request identifier."
|
|
||||||
|
|
||||||
#: mod/notifications.php:96 src/Content/Nav.php:249
|
|
||||||
msgid "Notifications"
|
|
||||||
msgstr "Benachrichtigungen"
|
|
||||||
|
|
||||||
#: mod/notifications.php:115
|
|
||||||
msgid "Network Notifications"
|
|
||||||
msgstr "Netzwerkbenachrichtigungen"
|
|
||||||
|
|
||||||
#: mod/notifications.php:120
|
|
||||||
msgid "System Notifications"
|
|
||||||
msgstr "Systembenachrichtigungen"
|
|
||||||
|
|
||||||
#: mod/notifications.php:125
|
|
||||||
msgid "Personal Notifications"
|
|
||||||
msgstr "Persönliche Benachrichtigungen"
|
|
||||||
|
|
||||||
#: mod/notifications.php:130
|
|
||||||
msgid "Home Notifications"
|
|
||||||
msgstr "Pinnwandbenachrichtigungen"
|
|
||||||
|
|
||||||
#: mod/notifications.php:153
|
|
||||||
msgid "Show unread"
|
|
||||||
msgstr "Ungelesene anzeigen"
|
|
||||||
|
|
||||||
#: mod/notifications.php:153
|
|
||||||
msgid "Show all"
|
|
||||||
msgstr "Alle anzeigen"
|
|
||||||
|
|
||||||
#: mod/notifications.php:164
|
|
||||||
msgid "Show Ignored Requests"
|
|
||||||
msgstr "Zeige ignorierte Anfragen"
|
|
||||||
|
|
||||||
#: mod/notifications.php:164
|
|
||||||
msgid "Hide Ignored Requests"
|
|
||||||
msgstr "Verberge ignorierte Anfragen"
|
|
||||||
|
|
||||||
#: mod/notifications.php:177 mod/notifications.php:262
|
|
||||||
msgid "Notification type:"
|
|
||||||
msgstr "Art der Benachrichtigung:"
|
|
||||||
|
|
||||||
#: mod/notifications.php:180
|
|
||||||
msgid "Suggested by:"
|
|
||||||
msgstr "Vorgeschlagen von:"
|
|
||||||
|
|
||||||
#: mod/notifications.php:192 mod/notifications.php:279
|
|
||||||
#: src/Module/Contact.php:594
|
|
||||||
msgid "Hide this contact from others"
|
|
||||||
msgstr "Verbirg diesen Kontakt vor Anderen"
|
|
||||||
|
|
||||||
#: mod/notifications.php:194 mod/notifications.php:288
|
|
||||||
#: src/Model/Contact.php:1238 src/Module/Admin/Users.php:286
|
|
||||||
msgid "Approve"
|
|
||||||
msgstr "Genehmigen"
|
|
||||||
|
|
||||||
#: mod/notifications.php:214
|
|
||||||
msgid "Claims to be known to you: "
|
|
||||||
msgstr "Behauptet, dich zu kennen: "
|
|
||||||
|
|
||||||
#: mod/notifications.php:215
|
|
||||||
msgid "yes"
|
|
||||||
msgstr "ja"
|
|
||||||
|
|
||||||
#: mod/notifications.php:215
|
|
||||||
msgid "no"
|
|
||||||
msgstr "nein"
|
|
||||||
|
|
||||||
#: mod/notifications.php:216 mod/notifications.php:220
|
|
||||||
msgid "Shall your connection be bidirectional or not?"
|
|
||||||
msgstr "Soll die Verbindung beidseitig sein oder nicht?"
|
|
||||||
|
|
||||||
#: mod/notifications.php:217 mod/notifications.php:221
|
|
||||||
#, php-format
|
|
||||||
msgid ""
|
|
||||||
"Accepting %s as a friend allows %s to subscribe to your posts, and you will "
|
|
||||||
"also receive updates from them in your news feed."
|
|
||||||
msgstr "Akzeptierst du %s als Kontakt, erlaubst du damit das Lesen deiner Beiträge und abonnierst selbst auch die Beiträge von %s."
|
|
||||||
|
|
||||||
#: mod/notifications.php:218
|
|
||||||
#, php-format
|
|
||||||
msgid ""
|
|
||||||
"Accepting %s as a subscriber allows them to subscribe to your posts, but you"
|
|
||||||
" will not receive updates from them in your news feed."
|
|
||||||
msgstr "Wenn du %s als Abonnent akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten."
|
|
||||||
|
|
||||||
#: mod/notifications.php:222
|
|
||||||
#, php-format
|
|
||||||
msgid ""
|
|
||||||
"Accepting %s as a sharer allows them to subscribe to your posts, but you "
|
|
||||||
"will not receive updates from them in your news feed."
|
|
||||||
msgstr "Wenn du %s als Teilender akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten."
|
|
||||||
|
|
||||||
#: mod/notifications.php:233
|
|
||||||
msgid "Friend"
|
|
||||||
msgstr "Kontakt"
|
|
||||||
|
|
||||||
#: mod/notifications.php:234
|
|
||||||
msgid "Sharer"
|
|
||||||
msgstr "Teilender"
|
|
||||||
|
|
||||||
#: mod/notifications.php:234
|
|
||||||
msgid "Subscriber"
|
|
||||||
msgstr "Abonnent"
|
|
||||||
|
|
||||||
#: mod/notifications.php:274 src/Model/Profile.php:453
|
|
||||||
#: src/Model/Profile.php:832 src/Module/Directory.php:145
|
|
||||||
#: src/Module/Contact.php:611
|
|
||||||
msgid "About:"
|
|
||||||
msgstr "Über:"
|
|
||||||
|
|
||||||
#: mod/notifications.php:278 src/Model/Profile.php:450
|
|
||||||
#: src/Model/Profile.php:771 src/Module/Directory.php:142
|
|
||||||
msgid "Gender:"
|
|
||||||
msgstr "Geschlecht:"
|
|
||||||
|
|
||||||
#: mod/notifications.php:285 src/Model/Profile.php:558
|
|
||||||
#: src/Module/Contact.php:295
|
|
||||||
msgid "Network:"
|
|
||||||
msgstr "Netzwerk:"
|
|
||||||
|
|
||||||
#: mod/notifications.php:299
|
|
||||||
msgid "No introductions."
|
|
||||||
msgstr "Keine Kontaktanfragen."
|
|
||||||
|
|
||||||
#: mod/notifications.php:333
|
|
||||||
#, php-format
|
|
||||||
msgid "No more %s notifications."
|
|
||||||
msgstr "Keine weiteren %s-Benachrichtigungen"
|
|
||||||
|
|
||||||
#: mod/openid.php:30
|
|
||||||
msgid "OpenID protocol error. No ID returned."
|
|
||||||
msgstr "OpenID Protokollfehler. Keine ID zurückgegeben."
|
|
||||||
|
|
||||||
#: mod/openid.php:60
|
|
||||||
msgid ""
|
|
||||||
"Account not found and OpenID registration is not permitted on this site."
|
|
||||||
msgstr "Nutzerkonto wurde nicht gefunden und OpenID-Registrierung ist auf diesem Server nicht gestattet."
|
|
||||||
|
|
||||||
#: mod/openid.php:108 src/Module/Login.php:88 src/Module/Login.php:139
|
|
||||||
msgid "Login failed."
|
|
||||||
msgstr "Anmeldung fehlgeschlagen."
|
|
||||||
|
|
||||||
#: view/theme/duepuntozero/config.php:55 src/Model/User.php:745
|
#: view/theme/duepuntozero/config.php:55 src/Model/User.php:745
|
||||||
msgid "default"
|
msgid "default"
|
||||||
msgstr "Standard"
|
msgstr "Standard"
|
||||||
|
@ -4570,31 +4577,6 @@ msgstr "Schnell-Start"
|
||||||
msgid "Help"
|
msgid "Help"
|
||||||
msgstr "Hilfe"
|
msgstr "Hilfe"
|
||||||
|
|
||||||
#: src/Core/ACL.php:288 src/Module/Item/Compose.php:139
|
|
||||||
msgid "Post to Email"
|
|
||||||
msgstr "An E-Mail senden"
|
|
||||||
|
|
||||||
#: src/Core/ACL.php:300
|
|
||||||
msgid "Visible to everybody"
|
|
||||||
msgstr "Für jeden sichtbar"
|
|
||||||
|
|
||||||
#: src/Core/ACL.php:311
|
|
||||||
msgid "Connectors"
|
|
||||||
msgstr "Connectoren"
|
|
||||||
|
|
||||||
#: src/Core/ACL.php:313
|
|
||||||
msgid "Hide your profile details from unknown viewers?"
|
|
||||||
msgstr "Profil-Details vor unbekannten Betrachtern verbergen?"
|
|
||||||
|
|
||||||
#: src/Core/ACL.php:313
|
|
||||||
#, php-format
|
|
||||||
msgid "Connectors disabled, since \"%s\" is enabled."
|
|
||||||
msgstr "Konnektoren sind nicht verfügbar, da \"%s\" aktiv ist."
|
|
||||||
|
|
||||||
#: src/Core/ACL.php:315
|
|
||||||
msgid "Close"
|
|
||||||
msgstr "Schließen"
|
|
||||||
|
|
||||||
#: src/Core/L10n/L10n.php:370 src/Model/Event.php:397
|
#: src/Core/L10n/L10n.php:370 src/Model/Event.php:397
|
||||||
msgid "Tuesday"
|
msgid "Tuesday"
|
||||||
msgstr "Dienstag"
|
msgstr "Dienstag"
|
||||||
|
@ -5201,6 +5183,31 @@ msgstr "Bitte lade ein Profilbild hoch."
|
||||||
msgid "Welcome back %s"
|
msgid "Welcome back %s"
|
||||||
msgstr "Willkommen zurück %s"
|
msgstr "Willkommen zurück %s"
|
||||||
|
|
||||||
|
#: src/Core/ACL.php:288 src/Module/Item/Compose.php:139
|
||||||
|
msgid "Post to Email"
|
||||||
|
msgstr "An E-Mail senden"
|
||||||
|
|
||||||
|
#: src/Core/ACL.php:300
|
||||||
|
msgid "Visible to everybody"
|
||||||
|
msgstr "Für jeden sichtbar"
|
||||||
|
|
||||||
|
#: src/Core/ACL.php:311
|
||||||
|
msgid "Connectors"
|
||||||
|
msgstr "Connectoren"
|
||||||
|
|
||||||
|
#: src/Core/ACL.php:313
|
||||||
|
msgid "Hide your profile details from unknown viewers?"
|
||||||
|
msgstr "Profil-Details vor unbekannten Betrachtern verbergen?"
|
||||||
|
|
||||||
|
#: src/Core/ACL.php:313
|
||||||
|
#, php-format
|
||||||
|
msgid "Connectors disabled, since \"%s\" is enabled."
|
||||||
|
msgstr "Konnektoren sind nicht verfügbar, da \"%s\" aktiv ist."
|
||||||
|
|
||||||
|
#: src/Core/ACL.php:315
|
||||||
|
msgid "Close"
|
||||||
|
msgstr "Schließen"
|
||||||
|
|
||||||
#: src/Util/Temporal.php:147 src/Model/Profile.php:784
|
#: src/Util/Temporal.php:147 src/Model/Profile.php:784
|
||||||
msgid "Birthday:"
|
msgid "Birthday:"
|
||||||
msgstr "Geburtstag:"
|
msgstr "Geburtstag:"
|
||||||
|
@ -5271,36 +5278,6 @@ msgstr "in %1$d %2$s"
|
||||||
msgid "%1$d %2$s ago"
|
msgid "%1$d %2$s ago"
|
||||||
msgstr "vor %1$d %2$s"
|
msgstr "vor %1$d %2$s"
|
||||||
|
|
||||||
#: src/Content/Text/BBCode.php:465
|
|
||||||
msgid "view full size"
|
|
||||||
msgstr "Volle Größe anzeigen"
|
|
||||||
|
|
||||||
#: src/Content/Text/BBCode.php:899 src/Content/Text/BBCode.php:1562
|
|
||||||
#: src/Content/Text/BBCode.php:1563
|
|
||||||
msgid "Image/photo"
|
|
||||||
msgstr "Bild/Foto"
|
|
||||||
|
|
||||||
#: src/Content/Text/BBCode.php:1017
|
|
||||||
#, php-format
|
|
||||||
msgid "<a href=\"%1$s\" target=\"_blank\">%2$s</a> %3$s"
|
|
||||||
msgstr "<a href=\"%1$s\" target=\"_blank\">%2$s</a> %3$s"
|
|
||||||
|
|
||||||
#: src/Content/Text/BBCode.php:1489 src/Content/Text/BBCode.php:1511
|
|
||||||
msgid "$1 wrote:"
|
|
||||||
msgstr "$1 hat geschrieben:"
|
|
||||||
|
|
||||||
#: src/Content/Text/BBCode.php:1565 src/Content/Text/BBCode.php:1566
|
|
||||||
msgid "Encrypted content"
|
|
||||||
msgstr "Verschlüsselter Inhalt"
|
|
||||||
|
|
||||||
#: src/Content/Text/BBCode.php:1790
|
|
||||||
msgid "Invalid source protocol"
|
|
||||||
msgstr "Ungültiges Quell-Protokoll"
|
|
||||||
|
|
||||||
#: src/Content/Text/BBCode.php:1805
|
|
||||||
msgid "Invalid link protocol"
|
|
||||||
msgstr "Ungültiges Link-Protokoll"
|
|
||||||
|
|
||||||
#: src/Content/Text/HTML.php:793
|
#: src/Content/Text/HTML.php:793
|
||||||
msgid "Loading more entries..."
|
msgid "Loading more entries..."
|
||||||
msgstr "lade weitere Einträge..."
|
msgstr "lade weitere Einträge..."
|
||||||
|
@ -5327,11 +5304,40 @@ msgstr "Volltext"
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Tags"
|
msgstr "Tags"
|
||||||
|
|
||||||
#: src/Content/Text/HTML.php:944 src/Model/Item.php:3527
|
#: src/Content/Text/HTML.php:944 src/Content/Text/BBCode.php:1478
|
||||||
#: src/Model/Item.php:3538
|
|
||||||
msgid "Click to open/close"
|
msgid "Click to open/close"
|
||||||
msgstr "Zum Öffnen/Schließen klicken"
|
msgstr "Zum Öffnen/Schließen klicken"
|
||||||
|
|
||||||
|
#: src/Content/Text/BBCode.php:465
|
||||||
|
msgid "view full size"
|
||||||
|
msgstr "Volle Größe anzeigen"
|
||||||
|
|
||||||
|
#: src/Content/Text/BBCode.php:899 src/Content/Text/BBCode.php:1560
|
||||||
|
#: src/Content/Text/BBCode.php:1561
|
||||||
|
msgid "Image/photo"
|
||||||
|
msgstr "Bild/Foto"
|
||||||
|
|
||||||
|
#: src/Content/Text/BBCode.php:1017
|
||||||
|
#, php-format
|
||||||
|
msgid "<a href=\"%1$s\" target=\"_blank\">%2$s</a> %3$s"
|
||||||
|
msgstr "<a href=\"%1$s\" target=\"_blank\">%2$s</a> %3$s"
|
||||||
|
|
||||||
|
#: src/Content/Text/BBCode.php:1509
|
||||||
|
msgid "$1 wrote:"
|
||||||
|
msgstr "$1 hat geschrieben:"
|
||||||
|
|
||||||
|
#: src/Content/Text/BBCode.php:1563 src/Content/Text/BBCode.php:1564
|
||||||
|
msgid "Encrypted content"
|
||||||
|
msgstr "Verschlüsselter Inhalt"
|
||||||
|
|
||||||
|
#: src/Content/Text/BBCode.php:1788
|
||||||
|
msgid "Invalid source protocol"
|
||||||
|
msgstr "Ungültiges Quell-Protokoll"
|
||||||
|
|
||||||
|
#: src/Content/Text/BBCode.php:1803
|
||||||
|
msgid "Invalid link protocol"
|
||||||
|
msgstr "Ungültiges Link-Protokoll"
|
||||||
|
|
||||||
#: src/Content/Widget/CalendarExport.php:64
|
#: src/Content/Widget/CalendarExport.php:64
|
||||||
msgid "Export"
|
msgid "Export"
|
||||||
msgstr "Exportieren"
|
msgstr "Exportieren"
|
||||||
|
@ -6172,7 +6178,7 @@ msgstr "Veranstaltung kopieren"
|
||||||
msgid "Delete event"
|
msgid "Delete event"
|
||||||
msgstr "Veranstaltung löschen"
|
msgstr "Veranstaltung löschen"
|
||||||
|
|
||||||
#: src/Model/Event.php:626 src/Model/Item.php:3578 src/Model/Item.php:3585
|
#: src/Model/Event.php:626 src/Model/Item.php:3547 src/Model/Item.php:3554
|
||||||
msgid "link to source"
|
msgid "link to source"
|
||||||
msgstr "Link zum Originalbeitrag"
|
msgstr "Link zum Originalbeitrag"
|
||||||
|
|
||||||
|
@ -6517,37 +6523,6 @@ msgstr "Gruppenname:"
|
||||||
msgid "Edit groups"
|
msgid "Edit groups"
|
||||||
msgstr "Gruppen bearbeiten"
|
msgstr "Gruppen bearbeiten"
|
||||||
|
|
||||||
#: src/Model/Item.php:3313
|
|
||||||
msgid "activity"
|
|
||||||
msgstr "Aktivität"
|
|
||||||
|
|
||||||
#: src/Model/Item.php:3315 src/Object/Post.php:474
|
|
||||||
msgid "comment"
|
|
||||||
msgid_plural "comments"
|
|
||||||
msgstr[0] "Kommentar"
|
|
||||||
msgstr[1] "Kommentare"
|
|
||||||
|
|
||||||
#: src/Model/Item.php:3318
|
|
||||||
msgid "post"
|
|
||||||
msgstr "Beitrag"
|
|
||||||
|
|
||||||
#: src/Model/Item.php:3417
|
|
||||||
#, php-format
|
|
||||||
msgid "Content warning: %s"
|
|
||||||
msgstr "Inhaltswarnung: %s"
|
|
||||||
|
|
||||||
#: src/Model/Item.php:3494
|
|
||||||
msgid "bytes"
|
|
||||||
msgstr "Byte"
|
|
||||||
|
|
||||||
#: src/Model/Item.php:3572
|
|
||||||
msgid "View on separate page"
|
|
||||||
msgstr "Auf separater Seite ansehen"
|
|
||||||
|
|
||||||
#: src/Model/Item.php:3573
|
|
||||||
msgid "view on separate page"
|
|
||||||
msgstr "auf separater Seite ansehen"
|
|
||||||
|
|
||||||
#: src/Model/Mail.php:113 src/Model/Mail.php:250
|
#: src/Model/Mail.php:113 src/Model/Mail.php:250
|
||||||
msgid "[no subject]"
|
msgid "[no subject]"
|
||||||
msgstr "[kein Betreff]"
|
msgstr "[kein Betreff]"
|
||||||
|
@ -6697,18 +6672,49 @@ msgstr "Tipps für neue Nutzer"
|
||||||
msgid "OpenWebAuth: %1$s welcomes %2$s"
|
msgid "OpenWebAuth: %1$s welcomes %2$s"
|
||||||
msgstr "OpenWebAuth: %1$s heißt %2$s herzlich willkommen"
|
msgstr "OpenWebAuth: %1$s heißt %2$s herzlich willkommen"
|
||||||
|
|
||||||
#: src/Protocol/OStatus.php:1300 src/Module/Profile.php:118
|
#: src/Model/Item.php:3313
|
||||||
#: src/Module/Profile.php:121
|
msgid "activity"
|
||||||
|
msgstr "Aktivität"
|
||||||
|
|
||||||
|
#: src/Model/Item.php:3315 src/Object/Post.php:474
|
||||||
|
msgid "comment"
|
||||||
|
msgid_plural "comments"
|
||||||
|
msgstr[0] "Kommentar"
|
||||||
|
msgstr[1] "Kommentare"
|
||||||
|
|
||||||
|
#: src/Model/Item.php:3318
|
||||||
|
msgid "post"
|
||||||
|
msgstr "Beitrag"
|
||||||
|
|
||||||
|
#: src/Model/Item.php:3417
|
||||||
|
#, php-format
|
||||||
|
msgid "Content warning: %s"
|
||||||
|
msgstr "Inhaltswarnung: %s"
|
||||||
|
|
||||||
|
#: src/Model/Item.php:3494
|
||||||
|
msgid "bytes"
|
||||||
|
msgstr "Byte"
|
||||||
|
|
||||||
|
#: src/Model/Item.php:3541
|
||||||
|
msgid "View on separate page"
|
||||||
|
msgstr "Auf separater Seite ansehen"
|
||||||
|
|
||||||
|
#: src/Model/Item.php:3542
|
||||||
|
msgid "view on separate page"
|
||||||
|
msgstr "auf separater Seite ansehen"
|
||||||
|
|
||||||
|
#: src/Protocol/OStatus.php:1300 src/Module/Profile.php:119
|
||||||
|
#: src/Module/Profile.php:122
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%s's timeline"
|
msgid "%s's timeline"
|
||||||
msgstr "Timeline von %s"
|
msgstr "Timeline von %s"
|
||||||
|
|
||||||
#: src/Protocol/OStatus.php:1304 src/Module/Profile.php:119
|
#: src/Protocol/OStatus.php:1304 src/Module/Profile.php:120
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%s's posts"
|
msgid "%s's posts"
|
||||||
msgstr "Beiträge von %s"
|
msgstr "Beiträge von %s"
|
||||||
|
|
||||||
#: src/Protocol/OStatus.php:1307 src/Module/Profile.php:120
|
#: src/Protocol/OStatus.php:1307 src/Module/Profile.php:121
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%s's comments"
|
msgid "%s's comments"
|
||||||
msgstr "Kommentare von %s"
|
msgstr "Kommentare von %s"
|
||||||
|
|
|
@ -670,6 +670,78 @@ $a->strings["Only one search per minute is permitted for not logged in users."]
|
||||||
$a->strings["Search"] = "Suche";
|
$a->strings["Search"] = "Suche";
|
||||||
$a->strings["Items tagged with: %s"] = "Beiträge, die mit %s getaggt sind";
|
$a->strings["Items tagged with: %s"] = "Beiträge, die mit %s getaggt sind";
|
||||||
$a->strings["Results for: %s"] = "Ergebnisse für: %s";
|
$a->strings["Results for: %s"] = "Ergebnisse für: %s";
|
||||||
|
$a->strings["%1\$s is following %2\$s's %3\$s"] = "%1\$s folgt %2\$s %3\$s";
|
||||||
|
$a->strings["Contact suggestion successfully ignored."] = "Kontaktvorschlag erfolgreich ignoriert.";
|
||||||
|
$a->strings["No suggestions available. If this is a new site, please try again in 24 hours."] = "Keine Vorschläge verfügbar. Falls der Server frisch aufgesetzt wurde, versuche es bitte in 24 Stunden noch einmal.";
|
||||||
|
$a->strings["Do you really want to delete this suggestion?"] = "Möchtest du wirklich diese Empfehlung löschen?";
|
||||||
|
$a->strings["Ignore/Hide"] = "Ignorieren/Verbergen";
|
||||||
|
$a->strings["Friend Suggestions"] = "Kontaktvorschläge";
|
||||||
|
$a->strings["Export account"] = "Account exportieren";
|
||||||
|
$a->strings["Export your account info and contacts. Use this to make a backup of your account and/or to move it to another server."] = "Exportiere Deine Account-Informationen und Kontakte. Verwende dies, um ein Backup Deines Accounts anzulegen und/oder damit auf einen anderen Server umzuziehen.";
|
||||||
|
$a->strings["Export all"] = "Alles exportieren";
|
||||||
|
$a->strings["Export your accout info, contacts and all your items as json. Could be a very big file, and could take a lot of time. Use this to make a full backup of your account (photos are not exported)"] = "Exportiere Deine Account-Informationen, Kontakte und alle Einträge als JSON Datei. Dies könnte eine sehr große Datei werden und dementsprechend viel Zeit benötigen. Verwende dies, um ein komplettes Backup Deines Accounts anzulegen (Fotos werden nicht exportiert).";
|
||||||
|
$a->strings["Export personal data"] = "Persönliche Daten exportieren";
|
||||||
|
$a->strings["No videos selected"] = "Keine Videos ausgewählt";
|
||||||
|
$a->strings["View Video"] = "Video ansehen";
|
||||||
|
$a->strings["Recent Videos"] = "Neueste Videos";
|
||||||
|
$a->strings["Upload New Videos"] = "Neues Video hochladen";
|
||||||
|
$a->strings["The requested item doesn't exist or has been deleted."] = "Der angeforderte Beitrag existiert nicht oder wurde gelöscht.";
|
||||||
|
$a->strings["The feed for this item is unavailable."] = "Der Feed für diesen Beitrag ist nicht verfügbar.";
|
||||||
|
$a->strings["Event can not end before it has started."] = "Die Veranstaltung kann nicht enden, bevor sie beginnt.";
|
||||||
|
$a->strings["Event title and start time are required."] = "Der Veranstaltungstitel und die Anfangszeit müssen angegeben werden.";
|
||||||
|
$a->strings["Create New Event"] = "Neue Veranstaltung erstellen";
|
||||||
|
$a->strings["Event details"] = "Veranstaltungsdetails";
|
||||||
|
$a->strings["Starting date and Title are required."] = "Anfangszeitpunkt und Titel werden benötigt";
|
||||||
|
$a->strings["Event Starts:"] = "Veranstaltungsbeginn:";
|
||||||
|
$a->strings["Finish date/time is not known or not relevant"] = "Enddatum/-zeit ist nicht bekannt oder nicht relevant";
|
||||||
|
$a->strings["Event Finishes:"] = "Veranstaltungsende:";
|
||||||
|
$a->strings["Adjust for viewer timezone"] = "An Zeitzone des Betrachters anpassen";
|
||||||
|
$a->strings["Description:"] = "Beschreibung";
|
||||||
|
$a->strings["Location:"] = "Ort:";
|
||||||
|
$a->strings["Title:"] = "Titel:";
|
||||||
|
$a->strings["Share this event"] = "Veranstaltung teilen";
|
||||||
|
$a->strings["Basic"] = "Allgemein";
|
||||||
|
$a->strings["Advanced"] = "Erweitert";
|
||||||
|
$a->strings["Failed to remove event"] = "Entfernen der Veranstaltung fehlgeschlagen";
|
||||||
|
$a->strings["Event removed"] = "Veranstaltung enfternt";
|
||||||
|
$a->strings["Unable to locate original post."] = "Konnte den Originalbeitrag nicht finden.";
|
||||||
|
$a->strings["Empty post discarded."] = "Leerer Beitrag wurde verworfen.";
|
||||||
|
$a->strings["This message was sent to you by %s, a member of the Friendica social network."] = "Diese Nachricht wurde dir von %s geschickt, einem Mitglied des Sozialen Netzwerks Friendica.";
|
||||||
|
$a->strings["You may visit them online at %s"] = "Du kannst sie online unter %s besuchen";
|
||||||
|
$a->strings["Please contact the sender by replying to this post if you do not wish to receive these messages."] = "Falls du diese Beiträge nicht erhalten möchtest, kontaktiere bitte den Autor, indem du auf diese Nachricht antwortest.";
|
||||||
|
$a->strings["%s posted an update."] = "%s hat ein Update veröffentlicht.";
|
||||||
|
$a->strings["Invalid request identifier."] = "Invalid request identifier.";
|
||||||
|
$a->strings["Notifications"] = "Benachrichtigungen";
|
||||||
|
$a->strings["Network Notifications"] = "Netzwerkbenachrichtigungen";
|
||||||
|
$a->strings["System Notifications"] = "Systembenachrichtigungen";
|
||||||
|
$a->strings["Personal Notifications"] = "Persönliche Benachrichtigungen";
|
||||||
|
$a->strings["Home Notifications"] = "Pinnwandbenachrichtigungen";
|
||||||
|
$a->strings["Show unread"] = "Ungelesene anzeigen";
|
||||||
|
$a->strings["Show all"] = "Alle anzeigen";
|
||||||
|
$a->strings["Show Ignored Requests"] = "Zeige ignorierte Anfragen";
|
||||||
|
$a->strings["Hide Ignored Requests"] = "Verberge ignorierte Anfragen";
|
||||||
|
$a->strings["Notification type:"] = "Art der Benachrichtigung:";
|
||||||
|
$a->strings["Suggested by:"] = "Vorgeschlagen von:";
|
||||||
|
$a->strings["Hide this contact from others"] = "Verbirg diesen Kontakt vor Anderen";
|
||||||
|
$a->strings["Approve"] = "Genehmigen";
|
||||||
|
$a->strings["Claims to be known to you: "] = "Behauptet, dich zu kennen: ";
|
||||||
|
$a->strings["yes"] = "ja";
|
||||||
|
$a->strings["no"] = "nein";
|
||||||
|
$a->strings["Shall your connection be bidirectional or not?"] = "Soll die Verbindung beidseitig sein oder nicht?";
|
||||||
|
$a->strings["Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed."] = "Akzeptierst du %s als Kontakt, erlaubst du damit das Lesen deiner Beiträge und abonnierst selbst auch die Beiträge von %s.";
|
||||||
|
$a->strings["Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Wenn du %s als Abonnent akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten.";
|
||||||
|
$a->strings["Accepting %s as a sharer allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Wenn du %s als Teilender akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten.";
|
||||||
|
$a->strings["Friend"] = "Kontakt";
|
||||||
|
$a->strings["Sharer"] = "Teilender";
|
||||||
|
$a->strings["Subscriber"] = "Abonnent";
|
||||||
|
$a->strings["About:"] = "Über:";
|
||||||
|
$a->strings["Gender:"] = "Geschlecht:";
|
||||||
|
$a->strings["Network:"] = "Netzwerk:";
|
||||||
|
$a->strings["No introductions."] = "Keine Kontaktanfragen.";
|
||||||
|
$a->strings["No more %s notifications."] = "Keine weiteren %s-Benachrichtigungen";
|
||||||
|
$a->strings["OpenID protocol error. No ID returned."] = "OpenID Protokollfehler. Keine ID zurückgegeben.";
|
||||||
|
$a->strings["Account not found and OpenID registration is not permitted on this site."] = "Nutzerkonto wurde nicht gefunden und OpenID-Registrierung ist auf diesem Server nicht gestattet.";
|
||||||
|
$a->strings["Login failed."] = "Anmeldung fehlgeschlagen.";
|
||||||
$a->strings["Account"] = "Nutzerkonto";
|
$a->strings["Account"] = "Nutzerkonto";
|
||||||
$a->strings["Two-factor authentication"] = "Zwei-Faktor Authentifizierung";
|
$a->strings["Two-factor authentication"] = "Zwei-Faktor Authentifizierung";
|
||||||
$a->strings["Profiles"] = "Profile";
|
$a->strings["Profiles"] = "Profile";
|
||||||
|
@ -679,7 +751,6 @@ $a->strings["Social Networks"] = "Soziale Netzwerke";
|
||||||
$a->strings["Addons"] = "Addons";
|
$a->strings["Addons"] = "Addons";
|
||||||
$a->strings["Delegations"] = "Delegationen";
|
$a->strings["Delegations"] = "Delegationen";
|
||||||
$a->strings["Connected apps"] = "Verbundene Programme";
|
$a->strings["Connected apps"] = "Verbundene Programme";
|
||||||
$a->strings["Export personal data"] = "Persönliche Daten exportieren";
|
|
||||||
$a->strings["Remove account"] = "Konto löschen";
|
$a->strings["Remove account"] = "Konto löschen";
|
||||||
$a->strings["Settings"] = "Einstellungen";
|
$a->strings["Settings"] = "Einstellungen";
|
||||||
$a->strings["Missing some important data!"] = "Wichtige Daten fehlen!";
|
$a->strings["Missing some important data!"] = "Wichtige Daten fehlen!";
|
||||||
|
@ -809,6 +880,7 @@ $a->strings["Publish your default profile in your local site directory?"] = "Dar
|
||||||
$a->strings["Your profile will be published in this node's <a href=\"%s\">local directory</a>. Your profile details may be publicly visible depending on the system settings."] = "Dein Profil wird im <a href=\"%s\">lokalen Verzeichnis</a> dieses Knotens veröffentlicht. Je nach Systemeinstellungen kann es öffentlich auffindbar sein.";
|
$a->strings["Your profile will be published in this node's <a href=\"%s\">local directory</a>. Your profile details may be publicly visible depending on the system settings."] = "Dein Profil wird im <a href=\"%s\">lokalen Verzeichnis</a> dieses Knotens veröffentlicht. Je nach Systemeinstellungen kann es öffentlich auffindbar sein.";
|
||||||
$a->strings["Publish your default profile in the global social directory?"] = "Darf dein Standardprofil im weltweiten Verzeichnis veröffentlicht werden?";
|
$a->strings["Publish your default profile in the global social directory?"] = "Darf dein Standardprofil im weltweiten Verzeichnis veröffentlicht werden?";
|
||||||
$a->strings["Your profile will be published in the global friendica directories (e.g. <a href=\"%s\">%s</a>). Your profile will be visible in public."] = "Dein Profil wird in den globalen Friendica-Verzeichnissen (z.B. <a href=\"%s\">%s</a>) veröffentlicht. Dein Profil wird öffentlich auffindbar sein.";
|
$a->strings["Your profile will be published in the global friendica directories (e.g. <a href=\"%s\">%s</a>). Your profile will be visible in public."] = "Dein Profil wird in den globalen Friendica-Verzeichnissen (z.B. <a href=\"%s\">%s</a>) veröffentlicht. Dein Profil wird öffentlich auffindbar sein.";
|
||||||
|
$a->strings["This setting also determines whether Friendica will inform search engines that your profile should be indexed or not. Third-party search engines may or may not respect this setting."] = "Diese Einstellung bestimmt auch, ob Friendica Suchmaschinen mitteilt, dass das Profil indiziert werden darf oder nicht. Ob sich Suchmaschinen von Drittanbietern daran halten, kann Friendica nicht beeinflussen.";
|
||||||
$a->strings["Hide your contact/friend list from viewers of your default profile?"] = "Liste der Kontakte vor Betrachtern des Standardprofils verbergen?";
|
$a->strings["Hide your contact/friend list from viewers of your default profile?"] = "Liste der Kontakte vor Betrachtern des Standardprofils verbergen?";
|
||||||
$a->strings["Your contact list won't be shown in your default profile page. You can decide to show your contact list separately for each additional profile you create"] = "Die Liste deiner Kontakte wird nicht in deinem Standard-Profil angezeigt werden. Du kannst für jedes weitere Profil diese Entscheidung separat einstellen.";
|
$a->strings["Your contact list won't be shown in your default profile page. You can decide to show your contact list separately for each additional profile you create"] = "Die Liste deiner Kontakte wird nicht in deinem Standard-Profil angezeigt werden. Du kannst für jedes weitere Profil diese Entscheidung separat einstellen.";
|
||||||
$a->strings["Hide your profile details from anonymous viewers?"] = "Profil-Details vor unbekannten Betrachtern verbergen?";
|
$a->strings["Hide your profile details from anonymous viewers?"] = "Profil-Details vor unbekannten Betrachtern verbergen?";
|
||||||
|
@ -879,77 +951,6 @@ $a->strings["Change the behaviour of this account for special situations"] = "Ve
|
||||||
$a->strings["Relocate"] = "Umziehen";
|
$a->strings["Relocate"] = "Umziehen";
|
||||||
$a->strings["If you have moved this profile from another server, and some of your contacts don't receive your updates, try pushing this button."] = "Wenn du dein Profil von einem anderen Server umgezogen hast und einige deiner Kontakte deine Beiträge nicht erhalten, verwende diesen Button.";
|
$a->strings["If you have moved this profile from another server, and some of your contacts don't receive your updates, try pushing this button."] = "Wenn du dein Profil von einem anderen Server umgezogen hast und einige deiner Kontakte deine Beiträge nicht erhalten, verwende diesen Button.";
|
||||||
$a->strings["Resend relocate message to contacts"] = "Umzugsbenachrichtigung erneut an Kontakte senden";
|
$a->strings["Resend relocate message to contacts"] = "Umzugsbenachrichtigung erneut an Kontakte senden";
|
||||||
$a->strings["%1\$s is following %2\$s's %3\$s"] = "%1\$s folgt %2\$s %3\$s";
|
|
||||||
$a->strings["Contact suggestion successfully ignored."] = "Kontaktvorschlag erfolgreich ignoriert.";
|
|
||||||
$a->strings["No suggestions available. If this is a new site, please try again in 24 hours."] = "Keine Vorschläge verfügbar. Falls der Server frisch aufgesetzt wurde, versuche es bitte in 24 Stunden noch einmal.";
|
|
||||||
$a->strings["Do you really want to delete this suggestion?"] = "Möchtest du wirklich diese Empfehlung löschen?";
|
|
||||||
$a->strings["Ignore/Hide"] = "Ignorieren/Verbergen";
|
|
||||||
$a->strings["Friend Suggestions"] = "Kontaktvorschläge";
|
|
||||||
$a->strings["Export account"] = "Account exportieren";
|
|
||||||
$a->strings["Export your account info and contacts. Use this to make a backup of your account and/or to move it to another server."] = "Exportiere Deine Account-Informationen und Kontakte. Verwende dies, um ein Backup Deines Accounts anzulegen und/oder damit auf einen anderen Server umzuziehen.";
|
|
||||||
$a->strings["Export all"] = "Alles exportieren";
|
|
||||||
$a->strings["Export your accout info, contacts and all your items as json. Could be a very big file, and could take a lot of time. Use this to make a full backup of your account (photos are not exported)"] = "Exportiere Deine Account-Informationen, Kontakte und alle Einträge als JSON Datei. Dies könnte eine sehr große Datei werden und dementsprechend viel Zeit benötigen. Verwende dies, um ein komplettes Backup Deines Accounts anzulegen (Fotos werden nicht exportiert).";
|
|
||||||
$a->strings["No videos selected"] = "Keine Videos ausgewählt";
|
|
||||||
$a->strings["View Video"] = "Video ansehen";
|
|
||||||
$a->strings["Recent Videos"] = "Neueste Videos";
|
|
||||||
$a->strings["Upload New Videos"] = "Neues Video hochladen";
|
|
||||||
$a->strings["The requested item doesn't exist or has been deleted."] = "Der angeforderte Beitrag existiert nicht oder wurde gelöscht.";
|
|
||||||
$a->strings["The feed for this item is unavailable."] = "Der Feed für diesen Beitrag ist nicht verfügbar.";
|
|
||||||
$a->strings["Event can not end before it has started."] = "Die Veranstaltung kann nicht enden, bevor sie beginnt.";
|
|
||||||
$a->strings["Event title and start time are required."] = "Der Veranstaltungstitel und die Anfangszeit müssen angegeben werden.";
|
|
||||||
$a->strings["Create New Event"] = "Neue Veranstaltung erstellen";
|
|
||||||
$a->strings["Event details"] = "Veranstaltungsdetails";
|
|
||||||
$a->strings["Starting date and Title are required."] = "Anfangszeitpunkt und Titel werden benötigt";
|
|
||||||
$a->strings["Event Starts:"] = "Veranstaltungsbeginn:";
|
|
||||||
$a->strings["Finish date/time is not known or not relevant"] = "Enddatum/-zeit ist nicht bekannt oder nicht relevant";
|
|
||||||
$a->strings["Event Finishes:"] = "Veranstaltungsende:";
|
|
||||||
$a->strings["Adjust for viewer timezone"] = "An Zeitzone des Betrachters anpassen";
|
|
||||||
$a->strings["Description:"] = "Beschreibung";
|
|
||||||
$a->strings["Location:"] = "Ort:";
|
|
||||||
$a->strings["Title:"] = "Titel:";
|
|
||||||
$a->strings["Share this event"] = "Veranstaltung teilen";
|
|
||||||
$a->strings["Basic"] = "Allgemein";
|
|
||||||
$a->strings["Advanced"] = "Erweitert";
|
|
||||||
$a->strings["Failed to remove event"] = "Entfernen der Veranstaltung fehlgeschlagen";
|
|
||||||
$a->strings["Event removed"] = "Veranstaltung enfternt";
|
|
||||||
$a->strings["Unable to locate original post."] = "Konnte den Originalbeitrag nicht finden.";
|
|
||||||
$a->strings["Empty post discarded."] = "Leerer Beitrag wurde verworfen.";
|
|
||||||
$a->strings["This message was sent to you by %s, a member of the Friendica social network."] = "Diese Nachricht wurde dir von %s geschickt, einem Mitglied des Sozialen Netzwerks Friendica.";
|
|
||||||
$a->strings["You may visit them online at %s"] = "Du kannst sie online unter %s besuchen";
|
|
||||||
$a->strings["Please contact the sender by replying to this post if you do not wish to receive these messages."] = "Falls du diese Beiträge nicht erhalten möchtest, kontaktiere bitte den Autor, indem du auf diese Nachricht antwortest.";
|
|
||||||
$a->strings["%s posted an update."] = "%s hat ein Update veröffentlicht.";
|
|
||||||
$a->strings["Invalid request identifier."] = "Invalid request identifier.";
|
|
||||||
$a->strings["Notifications"] = "Benachrichtigungen";
|
|
||||||
$a->strings["Network Notifications"] = "Netzwerkbenachrichtigungen";
|
|
||||||
$a->strings["System Notifications"] = "Systembenachrichtigungen";
|
|
||||||
$a->strings["Personal Notifications"] = "Persönliche Benachrichtigungen";
|
|
||||||
$a->strings["Home Notifications"] = "Pinnwandbenachrichtigungen";
|
|
||||||
$a->strings["Show unread"] = "Ungelesene anzeigen";
|
|
||||||
$a->strings["Show all"] = "Alle anzeigen";
|
|
||||||
$a->strings["Show Ignored Requests"] = "Zeige ignorierte Anfragen";
|
|
||||||
$a->strings["Hide Ignored Requests"] = "Verberge ignorierte Anfragen";
|
|
||||||
$a->strings["Notification type:"] = "Art der Benachrichtigung:";
|
|
||||||
$a->strings["Suggested by:"] = "Vorgeschlagen von:";
|
|
||||||
$a->strings["Hide this contact from others"] = "Verbirg diesen Kontakt vor Anderen";
|
|
||||||
$a->strings["Approve"] = "Genehmigen";
|
|
||||||
$a->strings["Claims to be known to you: "] = "Behauptet, dich zu kennen: ";
|
|
||||||
$a->strings["yes"] = "ja";
|
|
||||||
$a->strings["no"] = "nein";
|
|
||||||
$a->strings["Shall your connection be bidirectional or not?"] = "Soll die Verbindung beidseitig sein oder nicht?";
|
|
||||||
$a->strings["Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed."] = "Akzeptierst du %s als Kontakt, erlaubst du damit das Lesen deiner Beiträge und abonnierst selbst auch die Beiträge von %s.";
|
|
||||||
$a->strings["Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Wenn du %s als Abonnent akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten.";
|
|
||||||
$a->strings["Accepting %s as a sharer allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Wenn du %s als Teilender akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten.";
|
|
||||||
$a->strings["Friend"] = "Kontakt";
|
|
||||||
$a->strings["Sharer"] = "Teilender";
|
|
||||||
$a->strings["Subscriber"] = "Abonnent";
|
|
||||||
$a->strings["About:"] = "Über:";
|
|
||||||
$a->strings["Gender:"] = "Geschlecht:";
|
|
||||||
$a->strings["Network:"] = "Netzwerk:";
|
|
||||||
$a->strings["No introductions."] = "Keine Kontaktanfragen.";
|
|
||||||
$a->strings["No more %s notifications."] = "Keine weiteren %s-Benachrichtigungen";
|
|
||||||
$a->strings["OpenID protocol error. No ID returned."] = "OpenID Protokollfehler. Keine ID zurückgegeben.";
|
|
||||||
$a->strings["Account not found and OpenID registration is not permitted on this site."] = "Nutzerkonto wurde nicht gefunden und OpenID-Registrierung ist auf diesem Server nicht gestattet.";
|
|
||||||
$a->strings["Login failed."] = "Anmeldung fehlgeschlagen.";
|
|
||||||
$a->strings["default"] = "Standard";
|
$a->strings["default"] = "Standard";
|
||||||
$a->strings["greenzero"] = "greenzero";
|
$a->strings["greenzero"] = "greenzero";
|
||||||
$a->strings["purplezero"] = "purplezero";
|
$a->strings["purplezero"] = "purplezero";
|
||||||
|
@ -1030,12 +1031,6 @@ $a->strings["External link to forum"] = "Externer Link zum Forum";
|
||||||
$a->strings["show more"] = "mehr anzeigen";
|
$a->strings["show more"] = "mehr anzeigen";
|
||||||
$a->strings["Quick Start"] = "Schnell-Start";
|
$a->strings["Quick Start"] = "Schnell-Start";
|
||||||
$a->strings["Help"] = "Hilfe";
|
$a->strings["Help"] = "Hilfe";
|
||||||
$a->strings["Post to Email"] = "An E-Mail senden";
|
|
||||||
$a->strings["Visible to everybody"] = "Für jeden sichtbar";
|
|
||||||
$a->strings["Connectors"] = "Connectoren";
|
|
||||||
$a->strings["Hide your profile details from unknown viewers?"] = "Profil-Details vor unbekannten Betrachtern verbergen?";
|
|
||||||
$a->strings["Connectors disabled, since \"%s\" is enabled."] = "Konnektoren sind nicht verfügbar, da \"%s\" aktiv ist.";
|
|
||||||
$a->strings["Close"] = "Schließen";
|
|
||||||
$a->strings["Tuesday"] = "Dienstag";
|
$a->strings["Tuesday"] = "Dienstag";
|
||||||
$a->strings["Wednesday"] = "Mittwoch";
|
$a->strings["Wednesday"] = "Mittwoch";
|
||||||
$a->strings["Thursday"] = "Donnerstag";
|
$a->strings["Thursday"] = "Donnerstag";
|
||||||
|
@ -1173,6 +1168,12 @@ $a->strings["New Follower"] = "Neuer Bewunderer";
|
||||||
$a->strings["Welcome %s"] = "Willkommen %s";
|
$a->strings["Welcome %s"] = "Willkommen %s";
|
||||||
$a->strings["Please upload a profile photo."] = "Bitte lade ein Profilbild hoch.";
|
$a->strings["Please upload a profile photo."] = "Bitte lade ein Profilbild hoch.";
|
||||||
$a->strings["Welcome back %s"] = "Willkommen zurück %s";
|
$a->strings["Welcome back %s"] = "Willkommen zurück %s";
|
||||||
|
$a->strings["Post to Email"] = "An E-Mail senden";
|
||||||
|
$a->strings["Visible to everybody"] = "Für jeden sichtbar";
|
||||||
|
$a->strings["Connectors"] = "Connectoren";
|
||||||
|
$a->strings["Hide your profile details from unknown viewers?"] = "Profil-Details vor unbekannten Betrachtern verbergen?";
|
||||||
|
$a->strings["Connectors disabled, since \"%s\" is enabled."] = "Konnektoren sind nicht verfügbar, da \"%s\" aktiv ist.";
|
||||||
|
$a->strings["Close"] = "Schließen";
|
||||||
$a->strings["Birthday:"] = "Geburtstag:";
|
$a->strings["Birthday:"] = "Geburtstag:";
|
||||||
$a->strings["YYYY-MM-DD or MM-DD"] = "YYYY-MM-DD oder MM-DD";
|
$a->strings["YYYY-MM-DD or MM-DD"] = "YYYY-MM-DD oder MM-DD";
|
||||||
$a->strings["never"] = "nie";
|
$a->strings["never"] = "nie";
|
||||||
|
@ -1190,13 +1191,6 @@ $a->strings["second"] = "Sekunde";
|
||||||
$a->strings["seconds"] = "Sekunden";
|
$a->strings["seconds"] = "Sekunden";
|
||||||
$a->strings["in %1\$d %2\$s"] = "in %1\$d %2\$s";
|
$a->strings["in %1\$d %2\$s"] = "in %1\$d %2\$s";
|
||||||
$a->strings["%1\$d %2\$s ago"] = "vor %1\$d %2\$s";
|
$a->strings["%1\$d %2\$s ago"] = "vor %1\$d %2\$s";
|
||||||
$a->strings["view full size"] = "Volle Größe anzeigen";
|
|
||||||
$a->strings["Image/photo"] = "Bild/Foto";
|
|
||||||
$a->strings["<a href=\"%1\$s\" target=\"_blank\">%2\$s</a> %3\$s"] = "<a href=\"%1\$s\" target=\"_blank\">%2\$s</a> %3\$s";
|
|
||||||
$a->strings["$1 wrote:"] = "$1 hat geschrieben:";
|
|
||||||
$a->strings["Encrypted content"] = "Verschlüsselter Inhalt";
|
|
||||||
$a->strings["Invalid source protocol"] = "Ungültiges Quell-Protokoll";
|
|
||||||
$a->strings["Invalid link protocol"] = "Ungültiges Link-Protokoll";
|
|
||||||
$a->strings["Loading more entries..."] = "lade weitere Einträge...";
|
$a->strings["Loading more entries..."] = "lade weitere Einträge...";
|
||||||
$a->strings["The end"] = "Das Ende";
|
$a->strings["The end"] = "Das Ende";
|
||||||
$a->strings["Follow"] = "Folge";
|
$a->strings["Follow"] = "Folge";
|
||||||
|
@ -1204,6 +1198,13 @@ $a->strings["@name, !forum, #tags, content"] = "@name, !forum, #tags, content";
|
||||||
$a->strings["Full Text"] = "Volltext";
|
$a->strings["Full Text"] = "Volltext";
|
||||||
$a->strings["Tags"] = "Tags";
|
$a->strings["Tags"] = "Tags";
|
||||||
$a->strings["Click to open/close"] = "Zum Öffnen/Schließen klicken";
|
$a->strings["Click to open/close"] = "Zum Öffnen/Schließen klicken";
|
||||||
|
$a->strings["view full size"] = "Volle Größe anzeigen";
|
||||||
|
$a->strings["Image/photo"] = "Bild/Foto";
|
||||||
|
$a->strings["<a href=\"%1\$s\" target=\"_blank\">%2\$s</a> %3\$s"] = "<a href=\"%1\$s\" target=\"_blank\">%2\$s</a> %3\$s";
|
||||||
|
$a->strings["$1 wrote:"] = "$1 hat geschrieben:";
|
||||||
|
$a->strings["Encrypted content"] = "Verschlüsselter Inhalt";
|
||||||
|
$a->strings["Invalid source protocol"] = "Ungültiges Quell-Protokoll";
|
||||||
|
$a->strings["Invalid link protocol"] = "Ungültiges Link-Protokoll";
|
||||||
$a->strings["Export"] = "Exportieren";
|
$a->strings["Export"] = "Exportieren";
|
||||||
$a->strings["Export calendar as ical"] = "Kalender als ical exportieren";
|
$a->strings["Export calendar as ical"] = "Kalender als ical exportieren";
|
||||||
$a->strings["Export calendar as csv"] = "Kalender als csv exportieren";
|
$a->strings["Export calendar as csv"] = "Kalender als csv exportieren";
|
||||||
|
@ -1488,16 +1489,6 @@ $a->strings["Contacts not in any group"] = "Kontakte in keiner Gruppe";
|
||||||
$a->strings["Create a new group"] = "Neue Gruppe erstellen";
|
$a->strings["Create a new group"] = "Neue Gruppe erstellen";
|
||||||
$a->strings["Group Name: "] = "Gruppenname:";
|
$a->strings["Group Name: "] = "Gruppenname:";
|
||||||
$a->strings["Edit groups"] = "Gruppen bearbeiten";
|
$a->strings["Edit groups"] = "Gruppen bearbeiten";
|
||||||
$a->strings["activity"] = "Aktivität";
|
|
||||||
$a->strings["comment"] = [
|
|
||||||
0 => "Kommentar",
|
|
||||||
1 => "Kommentare",
|
|
||||||
];
|
|
||||||
$a->strings["post"] = "Beitrag";
|
|
||||||
$a->strings["Content warning: %s"] = "Inhaltswarnung: %s";
|
|
||||||
$a->strings["bytes"] = "Byte";
|
|
||||||
$a->strings["View on separate page"] = "Auf separater Seite ansehen";
|
|
||||||
$a->strings["view on separate page"] = "auf separater Seite ansehen";
|
|
||||||
$a->strings["[no subject]"] = "[kein Betreff]";
|
$a->strings["[no subject]"] = "[kein Betreff]";
|
||||||
$a->strings["Edit profile"] = "Profil bearbeiten";
|
$a->strings["Edit profile"] = "Profil bearbeiten";
|
||||||
$a->strings["Manage/edit profiles"] = "Profile verwalten/editieren";
|
$a->strings["Manage/edit profiles"] = "Profile verwalten/editieren";
|
||||||
|
@ -1534,6 +1525,16 @@ $a->strings["Profile Details"] = "Profildetails";
|
||||||
$a->strings["Only You Can See This"] = "Nur du kannst das sehen";
|
$a->strings["Only You Can See This"] = "Nur du kannst das sehen";
|
||||||
$a->strings["Tips for New Members"] = "Tipps für neue Nutzer";
|
$a->strings["Tips for New Members"] = "Tipps für neue Nutzer";
|
||||||
$a->strings["OpenWebAuth: %1\$s welcomes %2\$s"] = "OpenWebAuth: %1\$s heißt %2\$s herzlich willkommen";
|
$a->strings["OpenWebAuth: %1\$s welcomes %2\$s"] = "OpenWebAuth: %1\$s heißt %2\$s herzlich willkommen";
|
||||||
|
$a->strings["activity"] = "Aktivität";
|
||||||
|
$a->strings["comment"] = [
|
||||||
|
0 => "Kommentar",
|
||||||
|
1 => "Kommentare",
|
||||||
|
];
|
||||||
|
$a->strings["post"] = "Beitrag";
|
||||||
|
$a->strings["Content warning: %s"] = "Inhaltswarnung: %s";
|
||||||
|
$a->strings["bytes"] = "Byte";
|
||||||
|
$a->strings["View on separate page"] = "Auf separater Seite ansehen";
|
||||||
|
$a->strings["view on separate page"] = "auf separater Seite ansehen";
|
||||||
$a->strings["%s's timeline"] = "Timeline von %s";
|
$a->strings["%s's timeline"] = "Timeline von %s";
|
||||||
$a->strings["%s's posts"] = "Beiträge von %s";
|
$a->strings["%s's posts"] = "Beiträge von %s";
|
||||||
$a->strings["%s's comments"] = "Kommentare von %s";
|
$a->strings["%s's comments"] = "Kommentare von %s";
|
||||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue