Merge remote-tracking branch 'upstream/2023.03-rc' into npf2

This commit is contained in:
Michael 2023-04-03 21:46:01 +00:00
commit ed875a80f7
13 changed files with 318 additions and 287 deletions

View File

@ -71,20 +71,19 @@ pipeline:
else else
phpunit --configuration tests/phpunit.xml; phpunit --configuration tests/phpunit.xml;
fi fi
codecov: codecov:
image: plugins/codecov image: friendicaci/codecov
when: when:
matrix: matrix:
PHP_MAJOR_VERSION: 7.4 PHP_MAJOR_VERSION: 7.4
PHP_VERSION: 7.4.33 PHP_VERSION: 7.4.33
repo: repo:
- friendica/friendica - friendica/friendica
settings: commands:
token: - codecov -R '.' -Z -f 'clover.xml'
from_secret: codecov-token secrets:
files: - source: codecov-token
- clover.xml target: codecov_token
services: services:
mariadb: mariadb:

View File

@ -24,6 +24,7 @@
"ext-libxml": "*", "ext-libxml": "*",
"ext-mbstring": "*", "ext-mbstring": "*",
"ext-openssl": "*", "ext-openssl": "*",
"ext-posix": "*",
"ext-simplexml": "*", "ext-simplexml": "*",
"ext-xml": "*", "ext-xml": "*",
"asika/simple-console": "^1.0", "asika/simple-console": "^1.0",
@ -34,6 +35,7 @@
"friendica/json-ld": "^1.0", "friendica/json-ld": "^1.0",
"geekwright/po": "^2.0", "geekwright/po": "^2.0",
"guzzlehttp/guzzle": "^6.5", "guzzlehttp/guzzle": "^6.5",
"kornrunner/blurhash": "^1.2",
"league/html-to-markdown": "^4.8", "league/html-to-markdown": "^4.8",
"level-2/dice": "^4", "level-2/dice": "^4",
"lightopenid/lightopenid": "dev-master", "lightopenid/lightopenid": "dev-master",
@ -49,6 +51,7 @@
"phpseclib/phpseclib": "^3.0", "phpseclib/phpseclib": "^3.0",
"pragmarx/google2fa": "^5.0", "pragmarx/google2fa": "^5.0",
"pragmarx/recovery": "^0.2", "pragmarx/recovery": "^0.2",
"psr/clock": "^1.0",
"psr/container": "^1.0", "psr/container": "^1.0",
"psr/log": "^1.1", "psr/log": "^1.1",
"seld/cli-prompt": "^1.0", "seld/cli-prompt": "^1.0",
@ -71,9 +74,7 @@
"npm-asset/moment": "^2.24", "npm-asset/moment": "^2.24",
"npm-asset/perfect-scrollbar": "0.6.16", "npm-asset/perfect-scrollbar": "0.6.16",
"npm-asset/textcomplete": "^0.18.2", "npm-asset/textcomplete": "^0.18.2",
"npm-asset/typeahead.js": "^0.11.1", "npm-asset/typeahead.js": "^0.11.1"
"kornrunner/blurhash": "^1.2",
"psr/clock": "^1.0"
}, },
"repositories": [ "repositories": [
{ {

3
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "c9e005c79c8556215c30a66c470659eb", "content-hash": "456d14e3ad9be265c5c9e6172a0d18d8",
"packages": [ "packages": [
{ {
"name": "asika/simple-console", "name": "asika/simple-console",
@ -6474,6 +6474,7 @@
"ext-libxml": "*", "ext-libxml": "*",
"ext-mbstring": "*", "ext-mbstring": "*",
"ext-openssl": "*", "ext-openssl": "*",
"ext-posix": "*",
"ext-simplexml": "*", "ext-simplexml": "*",
"ext-xml": "*" "ext-xml": "*"
}, },

View File

@ -41,6 +41,7 @@ use Friendica\Model\Post;
use Friendica\Model\Tag; use Friendica\Model\Tag;
use Friendica\Model\User; use Friendica\Model\User;
use Friendica\Model\Verb; use Friendica\Model\Verb;
use Friendica\Network\HTTPException\InternalServerErrorException;
use Friendica\Object\Post as PostObject; use Friendica\Object\Post as PostObject;
use Friendica\Object\Thread; use Friendica\Object\Thread;
use Friendica\Protocol\Activity; use Friendica\Protocol\Activity;
@ -193,6 +194,52 @@ class Conversation
} }
} }
/**
* Returns the liker phrase based on a list of likers
*
* @param string $verb the activity verb
* @param array $likers a list of likers
*
* @return string the liker phrase
*
* @throws InternalServerErrorException in case either the verb is invalid or the list of likers is empty
*/
private function getLikerPhrase(string $verb, array $likers): string
{
$total = count($likers);
if ($total === 0) {
throw new InternalServerErrorException(sprintf('There has to be at least one Liker for verb "%s"', $verb));
} else if ($total === 1) {
$likerString = $likers[0];
} else {
if ($total < $this->config->get('system', 'max_likers')) {
$likerString = implode(', ', array_slice($likers, 0, -1));
$likerString .= ' ' . $this->l10n->t('and') . ' ' . $likers[count($likers) - 1];
} else {
$likerString = implode(', ', array_slice($likers, 0, $this->config->get('system', 'max_likers') - 1));
$likerString .= ' ' . $this->l10n->t('and %d other people', $total - $this->config->get('system', 'max_likers'));
}
}
switch ($verb) {
case 'like':
return $this->l10n->tt('%2$s likes this.', '%2$s like this.', $total, $likerString);
case 'dislike':
return $this->l10n->tt('%2$s doesn\'t like this.', '%2$s don\'t like this.', $total, $likerString);
case 'attendyes':
return $this->l10n->tt('%2$s attends.', '%2$s attend.', $total, $likerString);
case 'attendno':
return $this->l10n->tt('%2$s doesn\'t attend.', '%2$s don\'t attend.', $total, $likerString);
case 'attendmaybe':
return $this->l10n->tt('%2$s attends maybe.', '%2$s attend maybe.', $total, $likerString);
case 'announce':
return $this->l10n->tt('%2$s reshared this.', '%2$s reshared this.', $total, $likerString);
default:
throw new InternalServerErrorException(sprintf('Unknown verb "%s"', $verb));
}
}
/** /**
* Format the activity text for an item/photo/video * Format the activity text for an item/photo/video
* *
@ -205,87 +252,48 @@ class Conversation
public function formatActivity(array $links, string $verb, int $id): string public function formatActivity(array $links, string $verb, int $id): string
{ {
$this->profiler->startRecording('rendering'); $this->profiler->startRecording('rendering');
$o = '';
$expanded = ''; $expanded = '';
$phrase = '';
$total = count($links); $phrase = $this->getLikerPhrase($verb, $links);
if ($total == 1) { $total = count($links);
$likers = $links[0];
if ($total > 1) {
$spanatts = "class=\"btn btn-link fakelink\" onclick=\"openClose('{$verb}list-$id');\"";
$explikers = $phrase;
// Phrase if there is only one liker. In other cases it will be uses for the expanded
// list which show all likers
switch ($verb) { switch ($verb) {
case 'like': case 'like':
$phrase = $this->l10n->t('%s likes this.', $likers); $phrase = $this->l10n->tt('<button type="button" %2$s>%1$d person</button> likes this', '<button type="button" %2$s>%1$d people</button> like this', $total, $spanatts);
break; break;
case 'dislike': case 'dislike':
$phrase = $this->l10n->t('%s doesn\'t like this.', $likers); $phrase = $this->l10n->tt('<button type="button" %2$s>%1$d person</button> doesn\'t like this', '<button type="button" %2$s>%1$d peiple</button> don\'t like this', $total, $spanatts);
break; break;
case 'attendyes': case 'attendyes':
$phrase = $this->l10n->t('%s attends.', $likers); $phrase = $this->l10n->tt('<button type="button" %2$s>%1$d person</button> attends', '<button type="button" %2$s>%1$d people</button> attend', $total, $spanatts);
break; break;
case 'attendno': case 'attendno':
$phrase = $this->l10n->t('%s doesn\'t attend.', $likers); $phrase = $this->l10n->tt('<button type="button" %2$s>%1$d person</button> doesn\'t attend','<button type="button" %2$s>%1$d people</button> don\'t attend', $total, $spanatts);
break; break;
case 'attendmaybe': case 'attendmaybe':
$phrase = $this->l10n->t('%s attends maybe.', $likers); $phrase = $this->l10n->tt('<button type="button" %2$s>%1$d person</button> attends maybe', '<button type="button" %2$s>%1$d people</button> attend maybe', $total, $spanatts);
break; break;
case 'announce': case 'announce':
$phrase = $this->l10n->t('%s reshared this.', $likers); $phrase = $this->l10n->tt('<button type="button" %2$s>%1$d person</button> reshared this', '<button type="button" %2$s>%1$d people</button> reshared this', $total, $spanatts);
break;
}
} elseif ($total > 1) {
if ($total < $this->config->get('system', 'max_likers')) {
$likers = implode(', ', array_slice($links, 0, -1));
$likers .= ' ' . $this->l10n->t('and') . ' ' . $links[count($links) - 1];
} else {
$likers = implode(', ', array_slice($links, 0, $this->config->get('system', 'max_likers') - 1));
$likers .= ' ' . $this->l10n->t('and %d other people', $total - $this->config->get('system', 'max_likers'));
}
$spanatts = "class=\"btn btn-link fakelink\" onclick=\"openClose('{$verb}list-$id');\"";
$explikers = '';
switch ($verb) {
case 'like':
$phrase = $this->l10n->t('<button type="button" %1$s>%2$d people</button> like this', $spanatts, $total);
$explikers = $this->l10n->t('%s like this.', $likers);
break;
case 'dislike':
$phrase = $this->l10n->t('<button type="button" %1$s>%2$d people</button> don\'t like this', $spanatts, $total);
$explikers = $this->l10n->t('%s don\'t like this.', $likers);
break;
case 'attendyes':
$phrase = $this->l10n->t('<button type="button" %1$s>%2$d people</button> attend', $spanatts, $total);
$explikers = $this->l10n->t('%s attend.', $likers);
break;
case 'attendno':
$phrase = $this->l10n->t('<button type="button" %1$s>%2$d people</button> don\'t attend', $spanatts, $total);
$explikers = $this->l10n->t('%s don\'t attend.', $likers);
break;
case 'attendmaybe':
$phrase = $this->l10n->t('<button type="button" %1$s>%2$d people</button> attend maybe', $spanatts, $total);
$explikers = $this->l10n->t('%s attend maybe.', $likers);
break;
case 'announce':
$phrase = $this->l10n->t('<button type="button" %1$s>%2$d people</button> reshared this', $spanatts, $total);
$explikers = $this->l10n->t('%s reshared this.', $likers);
break; break;
} }
$expanded .= "\t" . '<p class="wall-item-' . $verb . '-expanded" id="' . $verb . 'list-' . $id . '" style="display: none;" >' . $explikers . '</p>'; $expanded .= "\t" . '<p class="wall-item-' . $verb . '-expanded" id="' . $verb . 'list-' . $id . '" style="display: none;" >' . $explikers . '</p>';
} }
$o .= Renderer::replaceMacros(Renderer::getMarkupTemplate('voting_fakelink.tpl'), [ $output = Renderer::replaceMacros(Renderer::getMarkupTemplate('voting_fakelink.tpl'), [
'$phrase' => $phrase, '$phrase' => $phrase,
'$type' => $verb, '$type' => $verb,
'$id' => $id '$id' => $id
]); ]);
$o .= $expanded; $output .= $expanded;
$this->profiler->stopRecording(); $this->profiler->stopRecording();
return $o; return $output;
} }
public function statusEditor(array $x = [], int $notes_cid = 0, bool $popup = false): string public function statusEditor(array $x = [], int $notes_cid = 0, bool $popup = false): string

View File

@ -523,19 +523,18 @@ class System
* Checks if a given directory is usable for the system * Checks if a given directory is usable for the system
* *
* @param $directory * @param $directory
* @param bool $check_writable
* *
* @return boolean the directory is usable * @return boolean the directory is usable
*/ */
private static function isDirectoryUsable($directory, $check_writable = true) private static function isDirectoryUsable(string $directory): bool
{ {
if ($directory == '') { if (empty($directory)) {
Logger::warning('Directory is empty. This shouldn\'t happen.'); Logger::warning('Directory is empty. This shouldn\'t happen.');
return false; return false;
} }
if (!file_exists($directory)) { if (!file_exists($directory)) {
Logger::warning('Path does not exist', ['directory' => $directory, 'user' => static::getUser()]); Logger::info('Path does not exist', ['directory' => $directory, 'user' => static::getUser()]);
return false; return false;
} }
@ -549,7 +548,7 @@ class System
return false; return false;
} }
if ($check_writable && !is_writable($directory)) { if (!is_writable($directory)) {
Logger::warning('Path is not writable', ['directory' => $directory, 'user' => static::getUser()]); Logger::warning('Path is not writable', ['directory' => $directory, 'user' => static::getUser()]);
return false; return false;
} }
@ -601,7 +600,7 @@ class System
$new_temppath = $temppath . "/" . DI::baseUrl()->getHost(); $new_temppath = $temppath . "/" . DI::baseUrl()->getHost();
if (!is_dir($new_temppath)) { if (!is_dir($new_temppath)) {
/// @TODO There is a mkdir()+chmod() upwards, maybe generalize this (+ configurable) into a function/method? /// @TODO There is a mkdir()+chmod() upwards, maybe generalize this (+ configurable) into a function/method?
mkdir($new_temppath); @mkdir($new_temppath);
} }
if (self::isDirectoryUsable($new_temppath)) { if (self::isDirectoryUsable($new_temppath)) {

View File

@ -112,7 +112,7 @@ class Process extends BaseRepository
try { try {
$processes = $this->db->select(static::$table_name, ['pid'], ['hostname' => $this->currentHost]); $processes = $this->db->select(static::$table_name, ['pid'], ['hostname' => $this->currentHost]);
while ($process = $this->db->fetch($processes)) { while ($process = $this->db->fetch($processes)) {
if (!posix_kill($process['pid'], 0)) { if (!\posix_kill($process['pid'], 0)) {
$this->db->delete(static::$table_name, ['pid' => $process['pid']]); $this->db->delete(static::$table_name, ['pid' => $process['pid']]);
} }
} }

View File

@ -39,6 +39,7 @@ use Friendica\Object\Api\Mastodon\Status\FriendicaExtension;
use Friendica\Object\Api\Mastodon\Status\FriendicaVisibility; use Friendica\Object\Api\Mastodon\Status\FriendicaVisibility;
use Friendica\Protocol\Activity; use Friendica\Protocol\Activity;
use Friendica\Protocol\ActivityPub; use Friendica\Protocol\ActivityPub;
use Friendica\Util\ACLFormatter;
use ImagickException; use ImagickException;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
@ -62,6 +63,8 @@ class Status extends BaseFactory
private $mstdnPollFactory; private $mstdnPollFactory;
/** @var ContentItem */ /** @var ContentItem */
private $contentItem; private $contentItem;
/** @var ACLFormatter */
private $aclFormatter;
public function __construct( public function __construct(
LoggerInterface $logger, LoggerInterface $logger,
@ -73,7 +76,8 @@ class Status extends BaseFactory
Attachment $mstdnAttachmentFactory, Attachment $mstdnAttachmentFactory,
Error $mstdnErrorFactory, Error $mstdnErrorFactory,
Poll $mstdnPollFactory, Poll $mstdnPollFactory,
ContentItem $contentItem ContentItem $contentItem,
ACLFormatter $aclFormatter
) { ) {
parent::__construct($logger); parent::__construct($logger);
$this->dba = $dba; $this->dba = $dba;
@ -85,6 +89,7 @@ class Status extends BaseFactory
$this->mstdnErrorFactory = $mstdnErrorFactory; $this->mstdnErrorFactory = $mstdnErrorFactory;
$this->mstdnPollFactory = $mstdnPollFactory; $this->mstdnPollFactory = $mstdnPollFactory;
$this->contentItem = $contentItem; $this->contentItem = $contentItem;
$this->aclFormatter = $aclFormatter;
} }
/** /**
@ -169,7 +174,7 @@ class Status extends BaseFactory
$count_dislike $count_dislike
); );
$origin_like = ($count_like == 0) ? false : Post::exists([ $origin_like = $count_like > 0 && Post::exists([
'thr-parent-id' => $uriId, 'thr-parent-id' => $uriId,
'uid' => $uid, 'uid' => $uid,
'origin' => true, 'origin' => true,
@ -177,7 +182,7 @@ class Status extends BaseFactory
'vid' => Verb::getID(Activity::LIKE), 'vid' => Verb::getID(Activity::LIKE),
'deleted' => false 'deleted' => false
]); ]);
$origin_dislike = ($count_dislike == 0) ? false : Post::exists([ $origin_dislike = $count_dislike > 0 && Post::exists([
'thr-parent-id' => $uriId, 'thr-parent-id' => $uriId,
'uid' => $uid, 'uid' => $uid,
'origin' => true, 'origin' => true,
@ -185,7 +190,7 @@ class Status extends BaseFactory
'vid' => Verb::getID(Activity::DISLIKE), 'vid' => Verb::getID(Activity::DISLIKE),
'deleted' => false 'deleted' => false
]); ]);
$origin_announce = ($count_announce == 0) ? false : Post::exists([ $origin_announce = $count_announce > 0 && (Post::exists([
'thr-parent-id' => $uriId, 'thr-parent-id' => $uriId,
'uid' => $uid, 'uid' => $uid,
'origin' => true, 'origin' => true,
@ -194,16 +199,16 @@ class Status extends BaseFactory
'deleted' => false 'deleted' => false
]) || Post::exists([ ]) || Post::exists([
'quote-uri-id' => $uriId, 'quote-uri-id' => $uriId,
'uid' => $uid, 'uid' => $uid,
'origin' => true, 'origin' => true,
'body' => '', 'body' => '',
'deleted' => false 'deleted' => false
]); ]));
$userAttributes = new \Friendica\Object\Api\Mastodon\Status\UserAttributes( $userAttributes = new \Friendica\Object\Api\Mastodon\Status\UserAttributes(
$origin_like, $origin_like,
$origin_announce, $origin_announce,
Post\ThreadUser::getIgnored($uriId, $uid), Post\ThreadUser::getIgnored($uriId, $uid),
(bool)($item['starred'] && ($item['gravity'] == Item::GRAVITY_PARENT)), $item['starred'] && $item['gravity'] == Item::GRAVITY_PARENT,
$item['featured'] $item['featured']
); );
@ -300,10 +305,9 @@ class Status extends BaseFactory
$in_reply = []; $in_reply = [];
} }
$aclFormatter = DI::aclFormatter();
$delivery_data = $uid != $item['uid'] ? null : new FriendicaDeliveryData($item['delivery_queue_count'], $item['delivery_queue_done'], $item['delivery_queue_failed']); $delivery_data = $uid != $item['uid'] ? null : new FriendicaDeliveryData($item['delivery_queue_count'], $item['delivery_queue_done'], $item['delivery_queue_failed']);
$visibility_data = $uid != $item['uid'] ? null : new FriendicaVisibility($aclFormatter->expand($item['allow_cid']), $aclFormatter->expand($item['deny_cid']), $aclFormatter->expand($item['allow_gid']), $aclFormatter->expand($item['deny_gid'])); $visibility_data = $uid != $item['uid'] ? null : new FriendicaVisibility($this->aclFormatter->expand($item['allow_cid']), $this->aclFormatter->expand($item['deny_cid']), $this->aclFormatter->expand($item['allow_gid']), $this->aclFormatter->expand($item['deny_gid']));
$friendica = new FriendicaExtension($item['title'], $item['changed'], $item['commented'], $item['received'], $counts->dislikes, $origin_dislike, $delivery_data, $visibility_data); $friendica = new FriendicaExtension($item['title'] ?? '', $item['changed'], $item['commented'], $item['received'], $counts->dislikes, $origin_dislike, $delivery_data, $visibility_data);
return new \Friendica\Object\Api\Mastodon\Status($item, $account, $counts, $userAttributes, $sensitive, $application, $mentions, $tags, $card, $attachments, $in_reply, $reshare, $friendica, $quote, $poll); return new \Friendica\Object\Api\Mastodon\Status($item, $account, $counts, $userAttributes, $sensitive, $application, $mentions, $tags, $card, $attachments, $in_reply, $reshare, $friendica, $quote, $poll);
} }

View File

@ -31,6 +31,7 @@ use Friendica\Core\System;
use Friendica\Core\Worker; use Friendica\Core\Worker;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\DI; use Friendica\DI;
use Friendica\Network\HTTPException\InternalServerErrorException;
use Friendica\Protocol\Activity; use Friendica\Protocol\Activity;
use Friendica\Protocol\ActivityPub; use Friendica\Protocol\ActivityPub;
use Friendica\Protocol\Delivery; use Friendica\Protocol\Delivery;
@ -1394,10 +1395,16 @@ class Item
* *
* @param integer $uri_id * @param integer $uri_id
* @return void * @return void
* @throws InternalServerErrorException
* @throws \ImagickException
*/ */
public static function updateDisplayCache(int $uri_id) public static function updateDisplayCache(int $uri_id)
{ {
$item = Post::selectFirst(self::DISPLAY_FIELDLIST, ['uri-id' => $uri_id]); $item = Post::selectFirst(self::DISPLAY_FIELDLIST, ['uri-id' => $uri_id]);
if (!$item) {
return;
}
self::prepareBody($item, false, false, true); self::prepareBody($item, false, false, true);
} }
@ -3042,7 +3049,11 @@ class Item
} }
if (!empty($quote_uri_id)) { if (!empty($quote_uri_id)) {
$item['body'] .= "\n" . DI::contentItem()->createSharedBlockByArray($shared_item); if (isset($shared_item['plink'])) {
$item['body'] .= "\n" . DI::contentItem()->createSharedBlockByArray($shared_item);
} else {
DI::logger()->warning('Missing plink in shared item', ['item' => $item, 'shared' => $shared, 'quote_uri_id' => $quote_uri_id, 'shared_item' => $shared_item]);
}
} }
if (!empty($shared_item['uri-id'])) { if (!empty($shared_item['uri-id'])) {

View File

@ -35,7 +35,7 @@ use Friendica\Core\System;
use Friendica\Core\Worker; use Friendica\Core\Worker;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\DI; use Friendica\DI;
use Friendica\Module\Register; use Friendica\Module;
use Friendica\Network\HTTPClient\Client\HttpClientAccept; use Friendica\Network\HTTPClient\Client\HttpClientAccept;
use Friendica\Security\TwoFactor\Model\AppSpecificPassword; use Friendica\Security\TwoFactor\Model\AppSpecificPassword;
use Friendica\Network\HTTPException; use Friendica\Network\HTTPException;
@ -1890,17 +1890,17 @@ class User
} }
$register_policy = DI::config()->get('config', 'register_policy'); $register_policy = DI::config()->get('config', 'register_policy');
if (!in_array($register_policy, [Register::OPEN, Register::CLOSED])) { if (!in_array($register_policy, [Module\Register::OPEN, Module\Register::CLOSED])) {
Logger::debug('Unsupported register policy.', ['policy' => $register_policy]); Logger::debug('Unsupported register policy.', ['policy' => $register_policy]);
return; return;
} }
$users = DBA::count('user', ['blocked' => false, 'account_removed' => false, 'account_expired' => false]); $users = DBA::count('user', ['blocked' => false, 'account_removed' => false, 'account_expired' => false]);
if (($users >= $max_registered_users) && ($register_policy == Register::OPEN)) { if (($users >= $max_registered_users) && ($register_policy == Module\Register::OPEN)) {
DI::config()->set('config', 'register_policy', Register::CLOSED); DI::config()->set('config', 'register_policy', Module\Register::CLOSED);
Logger::notice('Max users reached, registration is closed.', ['users' => $users, 'max' => $max_registered_users]); Logger::notice('Max users reached, registration is closed.', ['users' => $users, 'max' => $max_registered_users]);
} elseif (($users < $max_registered_users) && ($register_policy == Register::CLOSED)) { } elseif (($users < $max_registered_users) && ($register_policy == Module\Register::CLOSED)) {
DI::config()->set('config', 'register_policy', Register::OPEN); DI::config()->set('config', 'register_policy', Module\Register::OPEN);
Logger::notice('Below maximum users, registration is opened.', ['users' => $users, 'max' => $max_registered_users]); Logger::notice('Below maximum users, registration is opened.', ['users' => $users, 'max' => $max_registered_users]);
} else { } else {
Logger::debug('Unchanged register policy', ['policy' => $register_policy, 'users' => $users, 'max' => $max_registered_users]); Logger::debug('Unchanged register policy', ['policy' => $register_policy, 'users' => $users, 'max' => $max_registered_users]);

View File

@ -62,15 +62,15 @@ class FriendicaExtension extends BaseDataTransferObject
/** /**
* Creates a FriendicaExtension object * Creates a FriendicaExtension object
* *
* @param string $title * @param string $title
* @param string|null $changed_at * @param ?string $changed_at
* @param string|null $commented_at * @param ?string $commented_at
* @param string|null $edited_at * @param ?string $received_at
* @param string|null $received_at * @param int $dislikes_count
* @param int $dislikes_count * @param bool $disliked
* @param bool $disliked * @param ?FriendicaDeliveryData $delivery_data
* @param FriendicaDeliveryData|null $delivery_data * @param ?FriendicaVisibility $visibility
* @param FriendicaVisibility|null $visibility * @throws \Exception
*/ */
public function __construct( public function __construct(
string $title, string $title,

View File

@ -182,8 +182,8 @@ class DateTimeFormat
*/ */
public static function fix(string $dateString): string public static function fix(string $dateString): string
{ {
$search = ['Mär', 'März', 'Mai', 'Juni', 'Juli', 'Okt', 'Dez', 'ET' , 'ZZ', ' - ', '&#x2B;', '&amp;#43;', ' (Coordinated Universal Time)']; $search = ['Mär', 'März', 'Mai', 'Juni', 'Juli', 'Okt', 'Dez', 'ET' , 'ZZ', ' - ', '&#x2B;', '&amp;#43;', ' (Coordinated Universal Time)', '\\'];
$replace = ['Mar', 'Mar' , 'May', 'Jun' , 'Jul' , 'Oct', 'Dec', 'EST', 'Z' , ', ' , '+' , '+' , '']; $replace = ['Mar', 'Mar' , 'May', 'Jun' , 'Jul' , 'Oct', 'Dec', 'EST', 'Z' , ', ' , '+' , '+' , '' , ''];
$dateString = str_replace($search, $replace, $dateString); $dateString = str_replace($search, $replace, $dateString);

View File

@ -134,7 +134,11 @@ class DateTimeFormatTest extends MockedTest
'Double HTML encode' => [ 'Double HTML encode' => [
'expectedDate' => '2015-05-22T08:48:00+12:00', 'expectedDate' => '2015-05-22T08:48:00+12:00',
'dateString' => '2015-05-22T08:48:00&amp;#43;12:00' 'dateString' => '2015-05-22T08:48:00&amp;#43;12:00'
] ],
'2023-04-02\T17:22:42+05:30' => [
'expectedDate' => '2023-04-02T17:22:42+05:30',
'dateString' => '2023-04-02\T17:22:42+05:30'
],
]; ];
} }

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2023.03-rc\n" "Project-Id-Version: 2023.03-rc\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-03-28 17:42+0000\n" "POT-Creation-Date: 2023-04-02 09:34+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -50,8 +50,8 @@ msgstr ""
#: src/Module/BaseNotifications.php:98 src/Module/BaseSettings.php:52 #: src/Module/BaseNotifications.php:98 src/Module/BaseSettings.php:52
#: src/Module/Calendar/Event/API.php:88 src/Module/Calendar/Event/Form.php:84 #: src/Module/Calendar/Event/API.php:88 src/Module/Calendar/Event/Form.php:84
#: src/Module/Calendar/Export.php:82 src/Module/Calendar/Show.php:82 #: src/Module/Calendar/Export.php:82 src/Module/Calendar/Show.php:82
#: src/Module/Contact/Advanced.php:60 src/Module/Contact/Follow.php:86 #: src/Module/Contact/Advanced.php:60 src/Module/Contact/Follow.php:87
#: src/Module/Contact/Follow.php:159 src/Module/Contact/MatchInterests.php:86 #: src/Module/Contact/Follow.php:160 src/Module/Contact/MatchInterests.php:86
#: src/Module/Contact/Suggestions.php:54 src/Module/Contact/Unfollow.php:66 #: src/Module/Contact/Suggestions.php:54 src/Module/Contact/Unfollow.php:66
#: src/Module/Contact/Unfollow.php:80 src/Module/Contact/Unfollow.php:112 #: src/Module/Contact/Unfollow.php:80 src/Module/Contact/Unfollow.php:112
#: src/Module/Delegation.php:118 src/Module/FollowConfirm.php:38 #: src/Module/Delegation.php:118 src/Module/FollowConfirm.php:38
@ -281,7 +281,7 @@ msgstr ""
msgid "Your message:" msgid "Your message:"
msgstr "" msgstr ""
#: mod/message.php:200 mod/message.php:355 src/Content/Conversation.php:352 #: mod/message.php:200 mod/message.php:355 src/Content/Conversation.php:360
#: src/Module/Post/Edit.php:131 #: src/Module/Post/Edit.php:131
msgid "Upload photo" msgid "Upload photo"
msgstr "" msgstr ""
@ -292,7 +292,7 @@ msgid "Insert web link"
msgstr "" msgstr ""
#: mod/message.php:202 mod/message.php:358 mod/photos.php:1291 #: mod/message.php:202 mod/message.php:358 mod/photos.php:1291
#: src/Content/Conversation.php:381 src/Content/Conversation.php:725 #: src/Content/Conversation.php:389 src/Content/Conversation.php:733
#: src/Module/Item/Compose.php:204 src/Module/Post/Edit.php:145 #: src/Module/Item/Compose.php:204 src/Module/Post/Edit.php:145
#: src/Module/Profile/UnkMail.php:154 src/Object/Post.php:545 #: src/Module/Profile/UnkMail.php:154 src/Object/Post.php:545
msgid "Please wait" msgid "Please wait"
@ -475,7 +475,7 @@ msgstr ""
msgid "Do not show a status post for this upload" msgid "Do not show a status post for this upload"
msgstr "" msgstr ""
#: mod/photos.php:733 mod/photos.php:1093 src/Content/Conversation.php:383 #: mod/photos.php:733 mod/photos.php:1093 src/Content/Conversation.php:391
#: src/Module/Calendar/Event/Form.php:253 src/Module/Post/Edit.php:182 #: src/Module/Calendar/Event/Form.php:253 src/Module/Post/Edit.php:182
msgid "Permissions" msgid "Permissions"
msgstr "" msgstr ""
@ -488,8 +488,8 @@ msgstr ""
msgid "Delete Album" msgid "Delete Album"
msgstr "" msgstr ""
#: mod/photos.php:798 mod/photos.php:899 src/Content/Conversation.php:399 #: mod/photos.php:798 mod/photos.php:899 src/Content/Conversation.php:407
#: src/Module/Contact/Follow.php:172 src/Module/Contact/Revoke.php:109 #: src/Module/Contact/Follow.php:173 src/Module/Contact/Revoke.php:109
#: src/Module/Contact/Unfollow.php:126 #: src/Module/Contact/Unfollow.php:126
#: src/Module/Media/Attachment/Browser.php:77 #: src/Module/Media/Attachment/Browser.php:77
#: src/Module/Media/Photo/Browser.php:88 src/Module/Post/Edit.php:167 #: src/Module/Media/Photo/Browser.php:88 src/Module/Post/Edit.php:167
@ -606,22 +606,22 @@ msgid "Comment"
msgstr "" msgstr ""
#: mod/photos.php:1139 mod/photos.php:1195 mod/photos.php:1269 #: mod/photos.php:1139 mod/photos.php:1195 mod/photos.php:1269
#: src/Content/Conversation.php:396 src/Module/Calendar/Event/Form.php:248 #: src/Content/Conversation.php:404 src/Module/Calendar/Event/Form.php:248
#: src/Module/Item/Compose.php:199 src/Module/Post/Edit.php:165 #: src/Module/Item/Compose.php:199 src/Module/Post/Edit.php:165
#: src/Object/Post.php:1069 #: src/Object/Post.php:1069
msgid "Preview" msgid "Preview"
msgstr "" msgstr ""
#: mod/photos.php:1140 src/Content/Conversation.php:351 #: mod/photos.php:1140 src/Content/Conversation.php:359
#: src/Module/Post/Edit.php:130 src/Object/Post.php:1059 #: src/Module/Post/Edit.php:130 src/Object/Post.php:1059
msgid "Loading..." msgid "Loading..."
msgstr "" msgstr ""
#: mod/photos.php:1226 src/Content/Conversation.php:641 src/Object/Post.php:256 #: mod/photos.php:1226 src/Content/Conversation.php:649 src/Object/Post.php:256
msgid "Select" msgid "Select"
msgstr "" msgstr ""
#: mod/photos.php:1227 src/Content/Conversation.php:642 #: mod/photos.php:1227 src/Content/Conversation.php:650
#: src/Module/Moderation/Users/Active.php:136 #: src/Module/Moderation/Users/Active.php:136
#: src/Module/Moderation/Users/Blocked.php:136 #: src/Module/Moderation/Users/Blocked.php:136
#: src/Module/Moderation/Users/Index.php:151 #: src/Module/Moderation/Users/Index.php:151
@ -1064,355 +1064,359 @@ msgstr ""
msgid "%s (via %s)" msgid "%s (via %s)"
msgstr "" msgstr ""
#: src/Content/Conversation.php:220 #: src/Content/Conversation.php:218
#, php-format
msgid "%s likes this."
msgstr ""
#: src/Content/Conversation.php:223
#, php-format
msgid "%s doesn't like this."
msgstr ""
#: src/Content/Conversation.php:226
#, php-format
msgid "%s attends."
msgstr ""
#: src/Content/Conversation.php:229
#, php-format
msgid "%s doesn't attend."
msgstr ""
#: src/Content/Conversation.php:232
#, php-format
msgid "%s attends maybe."
msgstr ""
#: src/Content/Conversation.php:235 src/Content/Conversation.php:273
#: src/Content/Conversation.php:885
#, php-format
msgid "%s reshared this."
msgstr ""
#: src/Content/Conversation.php:241
msgid "and" msgid "and"
msgstr "" msgstr ""
#: src/Content/Conversation.php:244 #: src/Content/Conversation.php:221
#, php-format #, php-format
msgid "and %d other people" msgid "and %d other people"
msgstr "" msgstr ""
#: src/Content/Conversation.php:252 #: src/Content/Conversation.php:227
#, php-format #, php-format
msgid "<button type=\"button\" %1$s>%2$d people</button> like this" msgid "%2$s likes this."
msgstr "" msgid_plural "%2$s like this."
msgstr[0] ""
msgstr[1] ""
#: src/Content/Conversation.php:253 #: src/Content/Conversation.php:229
#, php-format #, php-format
msgid "%s like this." msgid "%2$s doesn't like this."
msgstr "" msgid_plural "%2$s don't like this."
msgstr[0] ""
msgstr[1] ""
#: src/Content/Conversation.php:256 #: src/Content/Conversation.php:231
#, php-format #, php-format
msgid "<button type=\"button\" %1$s>%2$d people</button> don't like this" msgid "%2$s attends."
msgstr "" msgid_plural "%2$s attend."
msgstr[0] ""
msgstr[1] ""
#: src/Content/Conversation.php:257 #: src/Content/Conversation.php:233
#, php-format #, php-format
msgid "%s don't like this." msgid "%2$s doesn't attend."
msgstr "" msgid_plural "%2$s don't attend."
msgstr[0] ""
msgstr[1] ""
#: src/Content/Conversation.php:260 #: src/Content/Conversation.php:235
#, php-format #, php-format
msgid "<button type=\"button\" %1$s>%2$d people</button> attend" msgid "%2$s attends maybe."
msgstr "" msgid_plural "%2$s attend maybe."
msgstr[0] ""
msgstr[1] ""
#: src/Content/Conversation.php:261 #: src/Content/Conversation.php:237
#, php-format #, php-format
msgid "%s attend." msgid "%2$s reshared this."
msgstr "" msgid_plural "%2$s reshared this."
msgstr[0] ""
msgstr[1] ""
#: src/Content/Conversation.php:264 #: src/Content/Conversation.php:266
#, php-format #, php-format
msgid "<button type=\"button\" %1$s>%2$d people</button> don't attend" msgid "<button type=\"button\" %2$s>%1$d person</button> likes this"
msgstr "" msgid_plural "<button type=\"button\" %2$s>%1$d people</button> like this"
msgstr[0] ""
#: src/Content/Conversation.php:265 msgstr[1] ""
#, php-format
msgid "%s don't attend."
msgstr ""
#: src/Content/Conversation.php:268
#, php-format
msgid "<button type=\"button\" %1$s>%2$d people</button> attend maybe"
msgstr ""
#: src/Content/Conversation.php:269 #: src/Content/Conversation.php:269
#, php-format #, php-format
msgid "%s attend maybe." msgid "<button type=\"button\" %2$s>%1$d person</button> doesn't like this"
msgstr "" msgid_plural ""
"<button type=\"button\" %2$s>%1$d peiple</button> don't like this"
msgstr[0] ""
msgstr[1] ""
#: src/Content/Conversation.php:272 #: src/Content/Conversation.php:272
#, php-format #, php-format
msgid "<button type=\"button\" %1$s>%2$d people</button> reshared this" msgid "<button type=\"button\" %2$s>%1$d person</button> attends"
msgstr "" msgid_plural "<button type=\"button\" %2$s>%1$d people</button> attend"
msgstr[0] ""
msgstr[1] ""
#: src/Content/Conversation.php:320 #: src/Content/Conversation.php:275
#, php-format
msgid "<button type=\"button\" %2$s>%1$d person</button> doesn't attend"
msgid_plural "<button type=\"button\" %2$s>%1$d people</button> don't attend"
msgstr[0] ""
msgstr[1] ""
#: src/Content/Conversation.php:278
#, php-format
msgid "<button type=\"button\" %2$s>%1$d person</button> attends maybe"
msgid_plural "<button type=\"button\" %2$s>%1$d people</button> attend maybe"
msgstr[0] ""
msgstr[1] ""
#: src/Content/Conversation.php:281
#, php-format
msgid "<button type=\"button\" %2$s>%1$d person</button> reshared this"
msgid_plural "<button type=\"button\" %2$s>%1$d people</button> reshared this"
msgstr[0] ""
msgstr[1] ""
#: src/Content/Conversation.php:328
msgid "Visible to <strong>everybody</strong>" msgid "Visible to <strong>everybody</strong>"
msgstr "" msgstr ""
#: src/Content/Conversation.php:321 src/Module/Item/Compose.php:198 #: src/Content/Conversation.php:329 src/Module/Item/Compose.php:198
#: src/Object/Post.php:1068 #: src/Object/Post.php:1068
msgid "Please enter a image/video/audio/webpage URL:" msgid "Please enter a image/video/audio/webpage URL:"
msgstr "" msgstr ""
#: src/Content/Conversation.php:322 #: src/Content/Conversation.php:330
msgid "Tag term:" msgid "Tag term:"
msgstr "" msgstr ""
#: src/Content/Conversation.php:323 src/Module/Filer/SaveTag.php:73 #: src/Content/Conversation.php:331 src/Module/Filer/SaveTag.php:73
msgid "Save to Folder:" msgid "Save to Folder:"
msgstr "" msgstr ""
#: src/Content/Conversation.php:324 #: src/Content/Conversation.php:332
msgid "Where are you right now?" msgid "Where are you right now?"
msgstr "" msgstr ""
#: src/Content/Conversation.php:325 #: src/Content/Conversation.php:333
msgid "Delete item(s)?" msgid "Delete item(s)?"
msgstr "" msgstr ""
#: src/Content/Conversation.php:337 src/Module/Item/Compose.php:175 #: src/Content/Conversation.php:345 src/Module/Item/Compose.php:175
msgid "Created at" msgid "Created at"
msgstr "" msgstr ""
#: src/Content/Conversation.php:347 #: src/Content/Conversation.php:355
msgid "New Post" msgid "New Post"
msgstr "" msgstr ""
#: src/Content/Conversation.php:350 #: src/Content/Conversation.php:358
msgid "Share" msgid "Share"
msgstr "" msgstr ""
#: src/Content/Conversation.php:353 src/Module/Post/Edit.php:132 #: src/Content/Conversation.php:361 src/Module/Post/Edit.php:132
msgid "upload photo" msgid "upload photo"
msgstr "" msgstr ""
#: src/Content/Conversation.php:354 src/Module/Post/Edit.php:133 #: src/Content/Conversation.php:362 src/Module/Post/Edit.php:133
msgid "Attach file" msgid "Attach file"
msgstr "" msgstr ""
#: src/Content/Conversation.php:355 src/Module/Post/Edit.php:134 #: src/Content/Conversation.php:363 src/Module/Post/Edit.php:134
msgid "attach file" msgid "attach file"
msgstr "" msgstr ""
#: src/Content/Conversation.php:356 src/Module/Item/Compose.php:190 #: src/Content/Conversation.php:364 src/Module/Item/Compose.php:190
#: src/Module/Post/Edit.php:171 src/Object/Post.php:1060 #: src/Module/Post/Edit.php:171 src/Object/Post.php:1060
msgid "Bold" msgid "Bold"
msgstr "" msgstr ""
#: src/Content/Conversation.php:357 src/Module/Item/Compose.php:191 #: src/Content/Conversation.php:365 src/Module/Item/Compose.php:191
#: src/Module/Post/Edit.php:172 src/Object/Post.php:1061 #: src/Module/Post/Edit.php:172 src/Object/Post.php:1061
msgid "Italic" msgid "Italic"
msgstr "" msgstr ""
#: src/Content/Conversation.php:358 src/Module/Item/Compose.php:192 #: src/Content/Conversation.php:366 src/Module/Item/Compose.php:192
#: src/Module/Post/Edit.php:173 src/Object/Post.php:1062 #: src/Module/Post/Edit.php:173 src/Object/Post.php:1062
msgid "Underline" msgid "Underline"
msgstr "" msgstr ""
#: src/Content/Conversation.php:359 src/Module/Item/Compose.php:193 #: src/Content/Conversation.php:367 src/Module/Item/Compose.php:193
#: src/Module/Post/Edit.php:174 src/Object/Post.php:1063 #: src/Module/Post/Edit.php:174 src/Object/Post.php:1063
msgid "Quote" msgid "Quote"
msgstr "" msgstr ""
#: src/Content/Conversation.php:360 src/Module/Item/Compose.php:194 #: src/Content/Conversation.php:368 src/Module/Item/Compose.php:194
#: src/Module/Post/Edit.php:175 src/Object/Post.php:1064 #: src/Module/Post/Edit.php:175 src/Object/Post.php:1064
msgid "Code" msgid "Code"
msgstr "" msgstr ""
#: src/Content/Conversation.php:361 src/Module/Item/Compose.php:195 #: src/Content/Conversation.php:369 src/Module/Item/Compose.php:195
#: src/Object/Post.php:1065 #: src/Object/Post.php:1065
msgid "Image" msgid "Image"
msgstr "" msgstr ""
#: src/Content/Conversation.php:362 src/Module/Item/Compose.php:196 #: src/Content/Conversation.php:370 src/Module/Item/Compose.php:196
#: src/Module/Post/Edit.php:176 src/Object/Post.php:1066 #: src/Module/Post/Edit.php:176 src/Object/Post.php:1066
msgid "Link" msgid "Link"
msgstr "" msgstr ""
#: src/Content/Conversation.php:363 src/Module/Item/Compose.php:197 #: src/Content/Conversation.php:371 src/Module/Item/Compose.php:197
#: src/Module/Post/Edit.php:177 src/Object/Post.php:1067 #: src/Module/Post/Edit.php:177 src/Object/Post.php:1067
msgid "Link or Media" msgid "Link or Media"
msgstr "" msgstr ""
#: src/Content/Conversation.php:364 #: src/Content/Conversation.php:372
msgid "Video" msgid "Video"
msgstr "" msgstr ""
#: src/Content/Conversation.php:365 src/Module/Item/Compose.php:200 #: src/Content/Conversation.php:373 src/Module/Item/Compose.php:200
#: src/Module/Post/Edit.php:141 #: src/Module/Post/Edit.php:141
msgid "Set your location" msgid "Set your location"
msgstr "" msgstr ""
#: src/Content/Conversation.php:366 src/Module/Post/Edit.php:142 #: src/Content/Conversation.php:374 src/Module/Post/Edit.php:142
msgid "set location" msgid "set location"
msgstr "" msgstr ""
#: src/Content/Conversation.php:367 src/Module/Post/Edit.php:143 #: src/Content/Conversation.php:375 src/Module/Post/Edit.php:143
msgid "Clear browser location" msgid "Clear browser location"
msgstr "" msgstr ""
#: src/Content/Conversation.php:368 src/Module/Post/Edit.php:144 #: src/Content/Conversation.php:376 src/Module/Post/Edit.php:144
msgid "clear location" msgid "clear location"
msgstr "" msgstr ""
#: src/Content/Conversation.php:370 src/Module/Item/Compose.php:205 #: src/Content/Conversation.php:378 src/Module/Item/Compose.php:205
#: src/Module/Post/Edit.php:157 #: src/Module/Post/Edit.php:157
msgid "Set title" msgid "Set title"
msgstr "" msgstr ""
#: src/Content/Conversation.php:372 src/Module/Item/Compose.php:206 #: src/Content/Conversation.php:380 src/Module/Item/Compose.php:206
#: src/Module/Post/Edit.php:159 #: src/Module/Post/Edit.php:159
msgid "Categories (comma-separated list)" msgid "Categories (comma-separated list)"
msgstr "" msgstr ""
#: src/Content/Conversation.php:377 src/Module/Item/Compose.php:222 #: src/Content/Conversation.php:385 src/Module/Item/Compose.php:222
msgid "Scheduled at" msgid "Scheduled at"
msgstr "" msgstr ""
#: src/Content/Conversation.php:382 src/Module/Post/Edit.php:146 #: src/Content/Conversation.php:390 src/Module/Post/Edit.php:146
msgid "Permission settings" msgid "Permission settings"
msgstr "" msgstr ""
#: src/Content/Conversation.php:392 src/Module/Post/Edit.php:155 #: src/Content/Conversation.php:400 src/Module/Post/Edit.php:155
msgid "Public post" msgid "Public post"
msgstr "" msgstr ""
#: src/Content/Conversation.php:406 src/Content/Widget/VCard.php:113 #: src/Content/Conversation.php:414 src/Content/Widget/VCard.php:113
#: src/Model/Profile.php:469 src/Module/Admin/Logs/View.php:92 #: src/Model/Profile.php:469 src/Module/Admin/Logs/View.php:92
#: src/Module/Post/Edit.php:180 #: src/Module/Post/Edit.php:180
msgid "Message" msgid "Message"
msgstr "" msgstr ""
#: src/Content/Conversation.php:407 src/Module/Post/Edit.php:181 #: src/Content/Conversation.php:415 src/Module/Post/Edit.php:181
#: src/Module/Settings/TwoFactor/Trusted.php:140 #: src/Module/Settings/TwoFactor/Trusted.php:140
msgid "Browser" msgid "Browser"
msgstr "" msgstr ""
#: src/Content/Conversation.php:409 src/Module/Post/Edit.php:184 #: src/Content/Conversation.php:417 src/Module/Post/Edit.php:184
msgid "Open Compose page" msgid "Open Compose page"
msgstr "" msgstr ""
#: src/Content/Conversation.php:669 src/Object/Post.php:243 #: src/Content/Conversation.php:677 src/Object/Post.php:243
msgid "Pinned item" msgid "Pinned item"
msgstr "" msgstr ""
#: src/Content/Conversation.php:685 src/Object/Post.php:491 #: src/Content/Conversation.php:693 src/Object/Post.php:491
#: src/Object/Post.php:492 #: src/Object/Post.php:492
#, php-format #, php-format
msgid "View %s's profile @ %s" msgid "View %s's profile @ %s"
msgstr "" msgstr ""
#: src/Content/Conversation.php:698 src/Object/Post.php:479 #: src/Content/Conversation.php:706 src/Object/Post.php:479
msgid "Categories:" msgid "Categories:"
msgstr "" msgstr ""
#: src/Content/Conversation.php:699 src/Object/Post.php:480 #: src/Content/Conversation.php:707 src/Object/Post.php:480
msgid "Filed under:" msgid "Filed under:"
msgstr "" msgstr ""
#: src/Content/Conversation.php:707 src/Object/Post.php:505 #: src/Content/Conversation.php:715 src/Object/Post.php:505
#, php-format #, php-format
msgid "%s from %s" msgid "%s from %s"
msgstr "" msgstr ""
#: src/Content/Conversation.php:723 #: src/Content/Conversation.php:731
msgid "View in context" msgid "View in context"
msgstr "" msgstr ""
#: src/Content/Conversation.php:788 #: src/Content/Conversation.php:796
msgid "remove" msgid "remove"
msgstr "" msgstr ""
#: src/Content/Conversation.php:792 #: src/Content/Conversation.php:800
msgid "Delete Selected Items" msgid "Delete Selected Items"
msgstr "" msgstr ""
#: src/Content/Conversation.php:857 src/Content/Conversation.php:860 #: src/Content/Conversation.php:865 src/Content/Conversation.php:868
#: src/Content/Conversation.php:863 src/Content/Conversation.php:866 #: src/Content/Conversation.php:871 src/Content/Conversation.php:874
#, php-format #, php-format
msgid "You had been addressed (%s)." msgid "You had been addressed (%s)."
msgstr "" msgstr ""
#: src/Content/Conversation.php:869 #: src/Content/Conversation.php:877
#, php-format #, php-format
msgid "You are following %s." msgid "You are following %s."
msgstr "" msgstr ""
#: src/Content/Conversation.php:872 #: src/Content/Conversation.php:880
msgid "You subscribed to one or more tags in this post." msgid "You subscribed to one or more tags in this post."
msgstr "" msgstr ""
#: src/Content/Conversation.php:887 #: src/Content/Conversation.php:893
#, php-format
msgid "%s reshared this."
msgstr ""
#: src/Content/Conversation.php:895
msgid "Reshared" msgid "Reshared"
msgstr "" msgstr ""
#: src/Content/Conversation.php:887 #: src/Content/Conversation.php:895
#, php-format #, php-format
msgid "Reshared by %s <%s>" msgid "Reshared by %s <%s>"
msgstr "" msgstr ""
#: src/Content/Conversation.php:890 #: src/Content/Conversation.php:898
#, php-format #, php-format
msgid "%s is participating in this thread." msgid "%s is participating in this thread."
msgstr "" msgstr ""
#: src/Content/Conversation.php:893 #: src/Content/Conversation.php:901
msgid "Stored for general reasons" msgid "Stored for general reasons"
msgstr "" msgstr ""
#: src/Content/Conversation.php:896 #: src/Content/Conversation.php:904
msgid "Global post" msgid "Global post"
msgstr "" msgstr ""
#: src/Content/Conversation.php:899 #: src/Content/Conversation.php:907
msgid "Sent via an relay server" msgid "Sent via an relay server"
msgstr "" msgstr ""
#: src/Content/Conversation.php:899 #: src/Content/Conversation.php:907
#, php-format #, php-format
msgid "Sent via the relay server %s <%s>" msgid "Sent via the relay server %s <%s>"
msgstr "" msgstr ""
#: src/Content/Conversation.php:902 #: src/Content/Conversation.php:910
msgid "Fetched" msgid "Fetched"
msgstr "" msgstr ""
#: src/Content/Conversation.php:902 #: src/Content/Conversation.php:910
#, php-format #, php-format
msgid "Fetched because of %s <%s>" msgid "Fetched because of %s <%s>"
msgstr "" msgstr ""
#: src/Content/Conversation.php:905 #: src/Content/Conversation.php:913
msgid "Stored because of a child post to complete this thread." msgid "Stored because of a child post to complete this thread."
msgstr "" msgstr ""
#: src/Content/Conversation.php:908 #: src/Content/Conversation.php:916
msgid "Local delivery" msgid "Local delivery"
msgstr "" msgstr ""
#: src/Content/Conversation.php:911 #: src/Content/Conversation.php:919
msgid "Stored because of your activity (like, comment, star, ...)" msgid "Stored because of your activity (like, comment, star, ...)"
msgstr "" msgstr ""
#: src/Content/Conversation.php:914 #: src/Content/Conversation.php:922
msgid "Distributed" msgid "Distributed"
msgstr "" msgstr ""
#: src/Content/Conversation.php:917 #: src/Content/Conversation.php:925
msgid "Pushed to us" msgid "Pushed to us"
msgstr "" msgstr ""
@ -1623,7 +1627,7 @@ msgstr ""
#: src/Content/Item.php:438 src/Content/Widget.php:80 #: src/Content/Item.php:438 src/Content/Widget.php:80
#: src/Model/Contact.php:1199 src/Model/Contact.php:1210 #: src/Model/Contact.php:1199 src/Model/Contact.php:1210
#: src/Module/Contact/Follow.php:166 view/theme/vier/theme.php:196 #: src/Module/Contact/Follow.php:167 view/theme/vier/theme.php:196
msgid "Connect/Follow" msgid "Connect/Follow"
msgstr "" msgstr ""
@ -3275,89 +3279,89 @@ msgstr ""
msgid "Upcoming events the next 7 days:" msgid "Upcoming events the next 7 days:"
msgstr "" msgstr ""
#: src/Model/Profile.php:873 #: src/Model/Profile.php:875
#, php-format #, php-format
msgid "OpenWebAuth: %1$s welcomes %2$s" msgid "OpenWebAuth: %1$s welcomes %2$s"
msgstr "" msgstr ""
#: src/Model/Profile.php:1013 #: src/Model/Profile.php:1015
msgid "Hometown:" msgid "Hometown:"
msgstr "" msgstr ""
#: src/Model/Profile.php:1014 #: src/Model/Profile.php:1016
msgid "Marital Status:" msgid "Marital Status:"
msgstr "" msgstr ""
#: src/Model/Profile.php:1015 #: src/Model/Profile.php:1017
msgid "With:" msgid "With:"
msgstr "" msgstr ""
#: src/Model/Profile.php:1016 #: src/Model/Profile.php:1018
msgid "Since:" msgid "Since:"
msgstr "" msgstr ""
#: src/Model/Profile.php:1017 #: src/Model/Profile.php:1019
msgid "Sexual Preference:" msgid "Sexual Preference:"
msgstr "" msgstr ""
#: src/Model/Profile.php:1018 #: src/Model/Profile.php:1020
msgid "Political Views:" msgid "Political Views:"
msgstr "" msgstr ""
#: src/Model/Profile.php:1019 #: src/Model/Profile.php:1021
msgid "Religious Views:" msgid "Religious Views:"
msgstr "" msgstr ""
#: src/Model/Profile.php:1020 #: src/Model/Profile.php:1022
msgid "Likes:" msgid "Likes:"
msgstr "" msgstr ""
#: src/Model/Profile.php:1021 #: src/Model/Profile.php:1023
msgid "Dislikes:" msgid "Dislikes:"
msgstr "" msgstr ""
#: src/Model/Profile.php:1022 #: src/Model/Profile.php:1024
msgid "Title/Description:" msgid "Title/Description:"
msgstr "" msgstr ""
#: src/Model/Profile.php:1023 src/Module/Admin/Summary.php:221 #: src/Model/Profile.php:1025 src/Module/Admin/Summary.php:221
#: src/Module/Moderation/Summary.php:77 #: src/Module/Moderation/Summary.php:77
msgid "Summary" msgid "Summary"
msgstr "" msgstr ""
#: src/Model/Profile.php:1024 #: src/Model/Profile.php:1026
msgid "Musical interests" msgid "Musical interests"
msgstr "" msgstr ""
#: src/Model/Profile.php:1025 #: src/Model/Profile.php:1027
msgid "Books, literature" msgid "Books, literature"
msgstr "" msgstr ""
#: src/Model/Profile.php:1026 #: src/Model/Profile.php:1028
msgid "Television" msgid "Television"
msgstr "" msgstr ""
#: src/Model/Profile.php:1027 #: src/Model/Profile.php:1029
msgid "Film/dance/culture/entertainment" msgid "Film/dance/culture/entertainment"
msgstr "" msgstr ""
#: src/Model/Profile.php:1028 #: src/Model/Profile.php:1030
msgid "Hobbies/Interests" msgid "Hobbies/Interests"
msgstr "" msgstr ""
#: src/Model/Profile.php:1029 #: src/Model/Profile.php:1031
msgid "Love/romance" msgid "Love/romance"
msgstr "" msgstr ""
#: src/Model/Profile.php:1030 #: src/Model/Profile.php:1032
msgid "Work/employment" msgid "Work/employment"
msgstr "" msgstr ""
#: src/Model/Profile.php:1031 #: src/Model/Profile.php:1033
msgid "School/education" msgid "School/education"
msgstr "" msgstr ""
#: src/Model/Profile.php:1032 #: src/Model/Profile.php:1034
msgid "Contact information and Social Networks" msgid "Contact information and Social Networks"
msgstr "" msgstr ""
@ -5852,28 +5856,28 @@ msgstr ""
msgid "No common contacts." msgid "No common contacts."
msgstr "" msgstr ""
#: src/Module/Contact/Contacts.php:115 src/Module/Profile/Contacts.php:132 #: src/Module/Contact/Contacts.php:115 src/Module/Profile/Contacts.php:135
#, php-format #, php-format
msgid "Follower (%s)" msgid "Follower (%s)"
msgid_plural "Followers (%s)" msgid_plural "Followers (%s)"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Module/Contact/Contacts.php:119 src/Module/Profile/Contacts.php:135 #: src/Module/Contact/Contacts.php:119 src/Module/Profile/Contacts.php:138
#, php-format #, php-format
msgid "Following (%s)" msgid "Following (%s)"
msgid_plural "Following (%s)" msgid_plural "Following (%s)"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Module/Contact/Contacts.php:123 src/Module/Profile/Contacts.php:138 #: src/Module/Contact/Contacts.php:123 src/Module/Profile/Contacts.php:141
#, php-format #, php-format
msgid "Mutual friend (%s)" msgid "Mutual friend (%s)"
msgid_plural "Mutual friends (%s)" msgid_plural "Mutual friends (%s)"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Module/Contact/Contacts.php:125 src/Module/Profile/Contacts.php:140 #: src/Module/Contact/Contacts.php:125 src/Module/Profile/Contacts.php:143
#, php-format #, php-format
msgid "These contacts both follow and are followed by <strong>%s</strong>." msgid "These contacts both follow and are followed by <strong>%s</strong>."
msgstr "" msgstr ""
@ -5892,14 +5896,14 @@ msgid ""
"contacts (follow, comment or likes on public posts)." "contacts (follow, comment or likes on public posts)."
msgstr "" msgstr ""
#: src/Module/Contact/Contacts.php:139 src/Module/Profile/Contacts.php:146 #: src/Module/Contact/Contacts.php:139 src/Module/Profile/Contacts.php:149
#, php-format #, php-format
msgid "Contact (%s)" msgid "Contact (%s)"
msgid_plural "Contacts (%s)" msgid_plural "Contacts (%s)"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Module/Contact/Follow.php:69 src/Module/Contact/Redir.php:62 #: src/Module/Contact/Follow.php:70 src/Module/Contact/Redir.php:62
#: src/Module/Contact/Redir.php:222 src/Module/Conversation/Community.php:194 #: src/Module/Contact/Redir.php:222 src/Module/Conversation/Community.php:194
#: src/Module/Debug/ItemBody.php:38 src/Module/Diaspora/Receive.php:57 #: src/Module/Debug/ItemBody.php:38 src/Module/Diaspora/Receive.php:57
#: src/Module/Item/Display.php:96 src/Module/Item/Feed.php:59 #: src/Module/Item/Display.php:96 src/Module/Item/Feed.php:59
@ -5909,36 +5913,36 @@ msgstr[1] ""
msgid "Access denied." msgid "Access denied."
msgstr "" msgstr ""
#: src/Module/Contact/Follow.php:104 src/Module/Contact/Unfollow.php:125 #: src/Module/Contact/Follow.php:105 src/Module/Contact/Unfollow.php:125
#: src/Module/Profile/RemoteFollow.php:133 #: src/Module/Profile/RemoteFollow.php:133
msgid "Submit Request" msgid "Submit Request"
msgstr "" msgstr ""
#: src/Module/Contact/Follow.php:114 #: src/Module/Contact/Follow.php:115
msgid "You already added this contact." msgid "You already added this contact."
msgstr "" msgstr ""
#: src/Module/Contact/Follow.php:129 #: src/Module/Contact/Follow.php:130
msgid "The network type couldn't be detected. Contact can't be added." msgid "The network type couldn't be detected. Contact can't be added."
msgstr "" msgstr ""
#: src/Module/Contact/Follow.php:137 #: src/Module/Contact/Follow.php:138
msgid "Diaspora support isn't enabled. Contact can't be added." msgid "Diaspora support isn't enabled. Contact can't be added."
msgstr "" msgstr ""
#: src/Module/Contact/Follow.php:142 #: src/Module/Contact/Follow.php:143
msgid "OStatus support is disabled. Contact can't be added." msgid "OStatus support is disabled. Contact can't be added."
msgstr "" msgstr ""
#: src/Module/Contact/Follow.php:167 src/Module/Profile/RemoteFollow.php:132 #: src/Module/Contact/Follow.php:168 src/Module/Profile/RemoteFollow.php:132
msgid "Please answer the following:" msgid "Please answer the following:"
msgstr "" msgstr ""
#: src/Module/Contact/Follow.php:168 src/Module/Contact/Unfollow.php:123 #: src/Module/Contact/Follow.php:169 src/Module/Contact/Unfollow.php:123
msgid "Your Identity Address:" msgid "Your Identity Address:"
msgstr "" msgstr ""
#: src/Module/Contact/Follow.php:169 src/Module/Contact/Profile.php:375 #: src/Module/Contact/Follow.php:170 src/Module/Contact/Profile.php:375
#: src/Module/Contact/Unfollow.php:129 #: src/Module/Contact/Unfollow.php:129
#: src/Module/Moderation/Blocklist/Contact.php:133 #: src/Module/Moderation/Blocklist/Contact.php:133
#: src/Module/Notifications/Introductions.php:129 #: src/Module/Notifications/Introductions.php:129
@ -5946,26 +5950,26 @@ msgstr ""
msgid "Profile URL" msgid "Profile URL"
msgstr "" msgstr ""
#: src/Module/Contact/Follow.php:170 src/Module/Contact/Profile.php:387 #: src/Module/Contact/Follow.php:171 src/Module/Contact/Profile.php:387
#: src/Module/Notifications/Introductions.php:191 #: src/Module/Notifications/Introductions.php:191
#: src/Module/Profile/Profile.php:234 #: src/Module/Profile/Profile.php:234
msgid "Tags:" msgid "Tags:"
msgstr "" msgstr ""
#: src/Module/Contact/Follow.php:181 #: src/Module/Contact/Follow.php:182
#, php-format #, php-format
msgid "%s knows you" msgid "%s knows you"
msgstr "" msgstr ""
#: src/Module/Contact/Follow.php:182 #: src/Module/Contact/Follow.php:183
msgid "Add a personal note:" msgid "Add a personal note:"
msgstr "" msgstr ""
#: src/Module/Contact/Follow.php:191 src/Module/Contact/Unfollow.php:138 #: src/Module/Contact/Follow.php:192 src/Module/Contact/Unfollow.php:138
msgid "Posts and Replies" msgid "Posts and Replies"
msgstr "" msgstr ""
#: src/Module/Contact/Follow.php:220 #: src/Module/Contact/Follow.php:221
msgid "The contact could not be added." msgid "The contact could not be added."
msgstr "" msgstr ""
@ -8260,7 +8264,7 @@ msgstr ""
msgid "Remove" msgid "Remove"
msgstr "" msgstr ""
#: src/Module/Profile/Contacts.php:156 #: src/Module/Profile/Contacts.php:159
msgid "No contacts." msgid "No contacts."
msgstr "" msgstr ""
@ -11433,12 +11437,12 @@ msgstr ""
msgid "Login failed. Please check your credentials." msgid "Login failed. Please check your credentials."
msgstr "" msgstr ""
#: src/Security/Authentication.php:389 #: src/Security/Authentication.php:391
#, php-format #, php-format
msgid "Welcome %s" msgid "Welcome %s"
msgstr "" msgstr ""
#: src/Security/Authentication.php:390 #: src/Security/Authentication.php:392
msgid "Please upload a profile photo." msgid "Please upload a profile photo."
msgstr "" msgstr ""