From 68046573a4171dcbd5db75a991487bafa4b4370f Mon Sep 17 00:00:00 2001 From: Philipp Date: Sat, 23 Oct 2021 10:49:27 +0200 Subject: [PATCH 01/19] Restructure Cache to follow new paradigm --- mod/ping.php | 2 +- src/App/Router.php | 2 +- src/Console/Cache.php | 2 +- src/Content/OEmbed.php | 2 +- src/Content/Widget.php | 2 +- src/Core/Cache/{ => Enum}/Duration.php | 2 +- src/Core/Cache/{ => Enum}/Type.php | 2 +- src/{ => Core/Cache}/Factory/CacheFactory.php | 24 +++++++++---------- src/Core/Cache/ICache.php | 2 ++ src/Core/Cache/IMemoryCache.php | 2 ++ src/Core/Cache/{ => Type}/APCuCache.php | 8 +++++-- src/Core/Cache/{ => Type}/ArrayCache.php | 7 ++++-- src/Core/{ => Cache/Type}/BaseCache.php | 2 +- src/Core/Cache/{ => Type}/DatabaseCache.php | 6 +++-- src/Core/Cache/{ => Type}/MemcacheCache.php | 9 +++++-- src/Core/Cache/{ => Type}/MemcachedCache.php | 9 +++++-- src/Core/Cache/{ => Type}/ProfilerCache.php | 6 +++-- src/Core/Cache/{ => Type}/RedisCache.php | 6 +++-- .../Cache/{ => Type}/TraitCompareDelete.php | 4 +++- src/Core/Cache/{ => Type}/TraitCompareSet.php | 4 +++- .../Cache/{ => Type}/TraitMemcacheCommand.php | 2 +- src/Core/Lock/CacheLock.php | 2 +- src/Core/Lock/DatabaseLock.php | 2 +- src/Core/Lock/ILock.php | 2 +- src/Core/Lock/SemaphoreLock.php | 2 +- src/Core/Lock/Type.php | 2 +- src/Core/Update.php | 4 ++-- src/Factory/LockFactory.php | 3 ++- src/Factory/SessionFactory.php | 2 +- src/Model/APContact.php | 2 +- src/Model/Photo.php | 2 +- src/Model/Profile.php | 2 +- src/Model/Tag.php | 2 +- src/Module/Search/Index.php | 2 +- src/Protocol/ActivityPub/Transmitter.php | 2 +- src/Protocol/Diaspora.php | 2 +- src/Protocol/Feed.php | 2 +- src/Protocol/OStatus.php | 2 +- src/Util/JsonLD.php | 2 +- src/Worker/SearchDirectory.php | 2 +- static/dependencies.config.php | 4 ++-- tests/src/Core/Cache/APCuCacheTest.php | 2 +- tests/src/Core/Cache/ArrayCacheTest.php | 2 +- tests/src/Core/Cache/DatabaseCacheTest.php | 2 +- tests/src/Core/Cache/MemcacheCacheTest.php | 2 +- tests/src/Core/Cache/MemcachedCacheTest.php | 2 +- tests/src/Core/Cache/RedisCacheTest.php | 4 ++-- tests/src/Core/Lock/APCuCacheLockTest.php | 2 +- tests/src/Core/Lock/ArrayCacheLockTest.php | 2 +- tests/src/Core/Lock/MemcacheCacheLockTest.php | 2 +- .../src/Core/Lock/MemcachedCacheLockTest.php | 2 +- tests/src/Core/Lock/RedisCacheLockTest.php | 2 +- 52 files changed, 103 insertions(+), 71 deletions(-) rename src/Core/Cache/{ => Enum}/Duration.php (96%) rename src/Core/Cache/{ => Enum}/Type.php (96%) rename src/{ => Core/Cache}/Factory/CacheFactory.php (80%) rename src/Core/Cache/{ => Type}/APCuCache.php (93%) rename src/Core/Cache/{ => Type}/ArrayCache.php (92%) rename src/Core/{ => Cache/Type}/BaseCache.php (98%) rename src/Core/Cache/{ => Type}/DatabaseCache.php (95%) rename src/Core/Cache/{ => Type}/MemcacheCache.php (92%) rename src/Core/Cache/{ => Type}/MemcachedCache.php (92%) rename src/Core/Cache/{ => Type}/ProfilerCache.php (95%) rename src/Core/Cache/{ => Type}/RedisCache.php (97%) rename src/Core/Cache/{ => Type}/TraitCompareDelete.php (95%) rename src/Core/Cache/{ => Type}/TraitCompareSet.php (96%) rename src/Core/Cache/{ => Type}/TraitMemcacheCommand.php (98%) diff --git a/mod/ping.php b/mod/ping.php index 2143f73af..c12594902 100644 --- a/mod/ping.php +++ b/mod/ping.php @@ -22,7 +22,7 @@ use Friendica\App; use Friendica\Content\ForumManager; use Friendica\Content\Text\BBCode; -use Friendica\Core\Cache\Duration; +use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Hook; use Friendica\Database\DBA; use Friendica\DI; diff --git a/src/App/Router.php b/src/App/Router.php index ad4b33d08..507683953 100644 --- a/src/App/Router.php +++ b/src/App/Router.php @@ -26,7 +26,7 @@ use FastRoute\DataGenerator\GroupCountBased; use FastRoute\Dispatcher; use FastRoute\RouteCollector; use FastRoute\RouteParser\Std; -use Friendica\Core\Cache\Duration; +use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Cache\ICache; use Friendica\Core\Hook; use Friendica\Core\L10n; diff --git a/src/Console/Cache.php b/src/Console/Cache.php index 049ffd0ff..a9452435e 100644 --- a/src/Console/Cache.php +++ b/src/Console/Cache.php @@ -23,7 +23,7 @@ namespace Friendica\Console; use Asika\SimpleConsole\CommandArgsException; use Friendica\App; -use Friendica\Core\Cache\Duration; +use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Cache\ICache; use RuntimeException; diff --git a/src/Content/OEmbed.php b/src/Content/OEmbed.php index 313a2628d..14e910eba 100644 --- a/src/Content/OEmbed.php +++ b/src/Content/OEmbed.php @@ -26,7 +26,7 @@ use DOMNode; use DOMText; use DOMXPath; use Exception; -use Friendica\Core\Cache\Duration; +use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Hook; use Friendica\Core\Renderer; use Friendica\Database\Database; diff --git a/src/Content/Widget.php b/src/Content/Widget.php index daa34a8b0..4a3e91867 100644 --- a/src/Content/Widget.php +++ b/src/Content/Widget.php @@ -22,7 +22,7 @@ namespace Friendica\Content; use Friendica\Core\Addon; -use Friendica\Core\Cache\Duration; +use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Protocol; use Friendica\Core\Renderer; use Friendica\Database\DBA; diff --git a/src/Core/Cache/Duration.php b/src/Core/Cache/Enum/Duration.php similarity index 96% rename from src/Core/Cache/Duration.php rename to src/Core/Cache/Enum/Duration.php index fcbaadda7..c5771c780 100644 --- a/src/Core/Cache/Duration.php +++ b/src/Core/Cache/Enum/Duration.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Core\Cache; +namespace Friendica\Core\Cache\Enum; /** * Enumeration for cache durations diff --git a/src/Core/Cache/Type.php b/src/Core/Cache/Enum/Type.php similarity index 96% rename from src/Core/Cache/Type.php rename to src/Core/Cache/Enum/Type.php index 5153acaf8..9bdfed595 100644 --- a/src/Core/Cache/Type.php +++ b/src/Core/Cache/Enum/Type.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Core\Cache; +namespace Friendica\Core\Cache\Enum; /** * Enumeration for cache types diff --git a/src/Factory/CacheFactory.php b/src/Core/Cache/Factory/CacheFactory.php similarity index 80% rename from src/Factory/CacheFactory.php rename to src/Core/Cache/Factory/CacheFactory.php index 1e93b5ee0..2e99180ec 100644 --- a/src/Factory/CacheFactory.php +++ b/src/Core/Cache/Factory/CacheFactory.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Factory; +namespace Friendica\Core\Cache\Factory; use Friendica\App\BaseURL; use Friendica\Core\Cache; @@ -41,7 +41,7 @@ class CacheFactory /** * @var string The default cache if nothing set */ - const DEFAULT_TYPE = Cache\Type::DATABASE; + const DEFAULT_TYPE = Cache\Enum\Type::DATABASE; /** * @var IConfig The IConfiguration to read parameters out of the config @@ -92,27 +92,27 @@ class CacheFactory } switch ($type) { - case Cache\Type::MEMCACHE: - $cache = new Cache\MemcacheCache($this->hostname, $this->config); + case Cache\Enum\Type::MEMCACHE: + $cache = new Cache\Type\MemcacheCache($this->hostname, $this->config); break; - case Cache\Type::MEMCACHED: - $cache = new Cache\MemcachedCache($this->hostname, $this->config, $this->logger); + case Cache\Enum\Type::MEMCACHED: + $cache = new Cache\Type\MemcachedCache($this->hostname, $this->config, $this->logger); break; - case Cache\Type::REDIS: - $cache = new Cache\RedisCache($this->hostname, $this->config); + case Cache\Enum\Type::REDIS: + $cache = new Cache\Type\RedisCache($this->hostname, $this->config); break; - case Cache\Type::APCU: - $cache = new Cache\APCuCache($this->hostname); + case Cache\Enum\Type::APCU: + $cache = new Cache\Type\APCuCache($this->hostname); break; default: - $cache = new Cache\DatabaseCache($this->hostname, $this->dba); + $cache = new Cache\Type\DatabaseCache($this->hostname, $this->dba); } $profiling = $this->config->get('system', 'profiling', false); // In case profiling is enabled, wrap the ProfilerCache around the current cache if (isset($profiling) && $profiling !== false) { - return new Cache\ProfilerCache($cache, $this->profiler); + return new Cache\Type\ProfilerCache($cache, $this->profiler); } else { return $cache; } diff --git a/src/Core/Cache/ICache.php b/src/Core/Cache/ICache.php index 0589f4506..3918b0089 100644 --- a/src/Core/Cache/ICache.php +++ b/src/Core/Cache/ICache.php @@ -21,6 +21,8 @@ namespace Friendica\Core\Cache; +use Friendica\Core\Cache\Enum\Duration; + /** * Cache Interface */ diff --git a/src/Core/Cache/IMemoryCache.php b/src/Core/Cache/IMemoryCache.php index 248908d80..a46db0b01 100644 --- a/src/Core/Cache/IMemoryCache.php +++ b/src/Core/Cache/IMemoryCache.php @@ -21,6 +21,8 @@ namespace Friendica\Core\Cache; +use Friendica\Core\Cache\Enum\Duration; + /** * This interface defines methods for Memory-Caches only */ diff --git a/src/Core/Cache/APCuCache.php b/src/Core/Cache/Type/APCuCache.php similarity index 93% rename from src/Core/Cache/APCuCache.php rename to src/Core/Cache/Type/APCuCache.php index 7d819b4e8..b473f6803 100644 --- a/src/Core/Cache/APCuCache.php +++ b/src/Core/Cache/Type/APCuCache.php @@ -19,10 +19,14 @@ * */ -namespace Friendica\Core\Cache; +namespace Friendica\Core\Cache\Type; use Exception; -use Friendica\Core\BaseCache; +use Friendica\Core\Cache\Enum\Duration; +use Friendica\Core\Cache\IMemoryCache; +use Friendica\Core\Cache\Type\TraitCompareDelete; +use Friendica\Core\Cache\Type\TraitCompareSet; +use Friendica\Core\Cache\Enum\Type; /** * APCu Cache. diff --git a/src/Core/Cache/ArrayCache.php b/src/Core/Cache/Type/ArrayCache.php similarity index 92% rename from src/Core/Cache/ArrayCache.php rename to src/Core/Cache/Type/ArrayCache.php index 597050089..dd0985a97 100644 --- a/src/Core/Cache/ArrayCache.php +++ b/src/Core/Cache/Type/ArrayCache.php @@ -19,9 +19,12 @@ * */ -namespace Friendica\Core\Cache; +namespace Friendica\Core\Cache\Type; -use Friendica\Core\BaseCache; +use Friendica\Core\Cache\Enum\Duration; +use Friendica\Core\Cache\IMemoryCache; +use Friendica\Core\Cache\Type\TraitCompareDelete; +use Friendica\Core\Cache\Enum\Type; /** * Implementation of the IMemoryCache mainly for testing purpose diff --git a/src/Core/BaseCache.php b/src/Core/Cache/Type/BaseCache.php similarity index 98% rename from src/Core/BaseCache.php rename to src/Core/Cache/Type/BaseCache.php index c6c6b60a6..a52f1e9ce 100644 --- a/src/Core/BaseCache.php +++ b/src/Core/Cache/Type/BaseCache.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Core; +namespace Friendica\Core\Cache\Type; use Friendica\Core\Cache\ICache; diff --git a/src/Core/Cache/DatabaseCache.php b/src/Core/Cache/Type/DatabaseCache.php similarity index 95% rename from src/Core/Cache/DatabaseCache.php rename to src/Core/Cache/Type/DatabaseCache.php index 8dcfae8af..a3c83c8df 100644 --- a/src/Core/Cache/DatabaseCache.php +++ b/src/Core/Cache/Type/DatabaseCache.php @@ -19,11 +19,13 @@ * */ -namespace Friendica\Core\Cache; +namespace Friendica\Core\Cache\Type; +use Friendica\Core\Cache\Enum\Duration; +use Friendica\Core\Cache\ICache; +use Friendica\Core\Cache\Enum\Type; use Friendica\Database\Database; use Friendica\Util\DateTimeFormat; -use Friendica\Core\BaseCache; /** * Database Cache diff --git a/src/Core/Cache/MemcacheCache.php b/src/Core/Cache/Type/MemcacheCache.php similarity index 92% rename from src/Core/Cache/MemcacheCache.php rename to src/Core/Cache/Type/MemcacheCache.php index ac826eaa2..f991517fc 100644 --- a/src/Core/Cache/MemcacheCache.php +++ b/src/Core/Cache/Type/MemcacheCache.php @@ -19,10 +19,15 @@ * */ -namespace Friendica\Core\Cache; +namespace Friendica\Core\Cache\Type; use Exception; -use Friendica\Core\BaseCache; +use Friendica\Core\Cache\Enum\Duration; +use Friendica\Core\Cache\IMemoryCache; +use Friendica\Core\Cache\Type\TraitCompareDelete; +use Friendica\Core\Cache\Type\TraitCompareSet; +use Friendica\Core\Cache\Type\TraitMemcacheCommand; +use Friendica\Core\Cache\Enum\Type; use Friendica\Core\Config\IConfig; use Memcache; diff --git a/src/Core/Cache/MemcachedCache.php b/src/Core/Cache/Type/MemcachedCache.php similarity index 92% rename from src/Core/Cache/MemcachedCache.php rename to src/Core/Cache/Type/MemcachedCache.php index 5ce64e999..ded53ee97 100644 --- a/src/Core/Cache/MemcachedCache.php +++ b/src/Core/Cache/Type/MemcachedCache.php @@ -19,10 +19,15 @@ * */ -namespace Friendica\Core\Cache; +namespace Friendica\Core\Cache\Type; use Exception; -use Friendica\Core\BaseCache; +use Friendica\Core\Cache\Enum\Duration; +use Friendica\Core\Cache\IMemoryCache; +use Friendica\Core\Cache\Type\TraitCompareDelete; +use Friendica\Core\Cache\Type\TraitCompareSet; +use Friendica\Core\Cache\Type\TraitMemcacheCommand; +use Friendica\Core\Cache\Enum\Type; use Friendica\Core\Config\IConfig; use Memcached; use Psr\Log\LoggerInterface; diff --git a/src/Core/Cache/ProfilerCache.php b/src/Core/Cache/Type/ProfilerCache.php similarity index 95% rename from src/Core/Cache/ProfilerCache.php rename to src/Core/Cache/Type/ProfilerCache.php index a8c9f1511..fd003857c 100644 --- a/src/Core/Cache/ProfilerCache.php +++ b/src/Core/Cache/Type/ProfilerCache.php @@ -19,9 +19,11 @@ * */ -namespace Friendica\Core\Cache; +namespace Friendica\Core\Cache\Type; -use Friendica\Core\System; +use Friendica\Core\Cache\Enum\Duration; +use Friendica\Core\Cache\ICache; +use Friendica\Core\Cache\IMemoryCache; use Friendica\Util\Profiler; /** diff --git a/src/Core/Cache/RedisCache.php b/src/Core/Cache/Type/RedisCache.php similarity index 97% rename from src/Core/Cache/RedisCache.php rename to src/Core/Cache/Type/RedisCache.php index ce081d7ef..a4cc41972 100644 --- a/src/Core/Cache/RedisCache.php +++ b/src/Core/Cache/Type/RedisCache.php @@ -19,10 +19,12 @@ * */ -namespace Friendica\Core\Cache; +namespace Friendica\Core\Cache\Type; use Exception; -use Friendica\Core\BaseCache; +use Friendica\Core\Cache\Enum\Duration; +use Friendica\Core\Cache\IMemoryCache; +use Friendica\Core\Cache\Enum\Type; use Friendica\Core\Config\IConfig; use Redis; diff --git a/src/Core/Cache/TraitCompareDelete.php b/src/Core/Cache/Type/TraitCompareDelete.php similarity index 95% rename from src/Core/Cache/TraitCompareDelete.php rename to src/Core/Cache/Type/TraitCompareDelete.php index 31c3e7cf0..487363892 100644 --- a/src/Core/Cache/TraitCompareDelete.php +++ b/src/Core/Cache/Type/TraitCompareDelete.php @@ -19,7 +19,9 @@ * */ -namespace Friendica\Core\Cache; +namespace Friendica\Core\Cache\Type; + +use Friendica\Core\Cache\Enum\Duration; /** * Trait TraitCompareSetDelete diff --git a/src/Core/Cache/TraitCompareSet.php b/src/Core/Cache/Type/TraitCompareSet.php similarity index 96% rename from src/Core/Cache/TraitCompareSet.php rename to src/Core/Cache/Type/TraitCompareSet.php index fa20bd9e5..86aef9290 100644 --- a/src/Core/Cache/TraitCompareSet.php +++ b/src/Core/Cache/Type/TraitCompareSet.php @@ -19,7 +19,9 @@ * */ -namespace Friendica\Core\Cache; +namespace Friendica\Core\Cache\Type; + +use Friendica\Core\Cache\Enum\Duration; /** * Trait TraitCompareSetDelete diff --git a/src/Core/Cache/TraitMemcacheCommand.php b/src/Core/Cache/Type/TraitMemcacheCommand.php similarity index 98% rename from src/Core/Cache/TraitMemcacheCommand.php rename to src/Core/Cache/Type/TraitMemcacheCommand.php index abc41ceea..73495e2de 100644 --- a/src/Core/Cache/TraitMemcacheCommand.php +++ b/src/Core/Cache/Type/TraitMemcacheCommand.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Core\Cache; +namespace Friendica\Core\Cache\Type; use Friendica\Network\HTTPException\InternalServerErrorException; diff --git a/src/Core/Lock/CacheLock.php b/src/Core/Lock/CacheLock.php index 31c7d1ee1..20705e06e 100644 --- a/src/Core/Lock/CacheLock.php +++ b/src/Core/Lock/CacheLock.php @@ -22,7 +22,7 @@ namespace Friendica\Core\Lock; use Friendica\Core\BaseLock; -use Friendica\Core\Cache\Duration; +use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Cache\IMemoryCache; class CacheLock extends BaseLock diff --git a/src/Core/Lock/DatabaseLock.php b/src/Core/Lock/DatabaseLock.php index 688a00dac..14e78f625 100644 --- a/src/Core/Lock/DatabaseLock.php +++ b/src/Core/Lock/DatabaseLock.php @@ -22,7 +22,7 @@ namespace Friendica\Core\Lock; use Friendica\Core\BaseLock; -use Friendica\Core\Cache\Duration; +use Friendica\Core\Cache\Enum\Duration; use Friendica\Database\Database; use Friendica\Util\DateTimeFormat; diff --git a/src/Core/Lock/ILock.php b/src/Core/Lock/ILock.php index 7369e5b5a..35e21305e 100644 --- a/src/Core/Lock/ILock.php +++ b/src/Core/Lock/ILock.php @@ -21,7 +21,7 @@ namespace Friendica\Core\Lock; -use Friendica\Core\Cache\Duration; +use Friendica\Core\Cache\Enum\Duration; /** * Lock Interface diff --git a/src/Core/Lock/SemaphoreLock.php b/src/Core/Lock/SemaphoreLock.php index 219a4d738..fa5cf5e87 100644 --- a/src/Core/Lock/SemaphoreLock.php +++ b/src/Core/Lock/SemaphoreLock.php @@ -22,7 +22,7 @@ namespace Friendica\Core\Lock; use Friendica\Core\BaseLock; -use Friendica\Core\Cache\Duration; +use Friendica\Core\Cache\Enum\Duration; class SemaphoreLock extends BaseLock { diff --git a/src/Core/Lock/Type.php b/src/Core/Lock/Type.php index 259b7d0ce..769bad12e 100644 --- a/src/Core/Lock/Type.php +++ b/src/Core/Lock/Type.php @@ -21,7 +21,7 @@ namespace Friendica\Core\Lock; -use Friendica\Core\Cache\Type as CacheType; +use Friendica\Core\Cache\Enum\Type as CacheType; /** * Enumeration for lock types diff --git a/src/Core/Update.php b/src/Core/Update.php index fa3c6b62d..f3ea74311 100644 --- a/src/Core/Update.php +++ b/src/Core/Update.php @@ -132,7 +132,7 @@ class Update // Compare the current structure with the defined structure // If the Lock is acquired, never release it automatically to avoid double updates - if (DI::lock()->acquire('dbupdate', 0, Cache\Duration::INFINITE)) { + if (DI::lock()->acquire('dbupdate', 0, Cache\Enum\Duration::INFINITE)) { Logger::notice('Update starting.', ['from' => $stored, 'to' => $current]); @@ -246,7 +246,7 @@ class Update // If the update fails or times-out completely you may need to // delete the config entry to try again. - if (DI::lock()->acquire('dbupdate_function', 120, Cache\Duration::INFINITE)) { + if (DI::lock()->acquire('dbupdate_function', 120, Cache\Enum\Duration::INFINITE)) { // call the specific update Logger::notice('Pre update function start.', ['function' => $funcname]); diff --git a/src/Factory/LockFactory.php b/src/Factory/LockFactory.php index 0ac752503..2a54910d4 100644 --- a/src/Factory/LockFactory.php +++ b/src/Factory/LockFactory.php @@ -21,8 +21,9 @@ namespace Friendica\Factory; +use Friendica\Core\Cache\Factory\CacheFactory; use Friendica\Core\Cache\IMemoryCache; -use Friendica\Core\Cache\Type; +use Friendica\Core\Cache\Enum\Type; use Friendica\Core\Config\IConfig; use Friendica\Core\Lock; use Friendica\Database\Database; diff --git a/src/Factory/SessionFactory.php b/src/Factory/SessionFactory.php index 491573033..82161fb55 100644 --- a/src/Factory/SessionFactory.php +++ b/src/Factory/SessionFactory.php @@ -23,7 +23,7 @@ namespace Friendica\Factory; use Friendica\App; use Friendica\Core\Cache\ICache; -use Friendica\Core\Cache\Type; +use Friendica\Core\Cache\Enum\Type; use Friendica\Core\Config\IConfig; use Friendica\Core\Session; use Friendica\Core\System; diff --git a/src/Model/APContact.php b/src/Model/APContact.php index a919a67f3..5e992075e 100644 --- a/src/Model/APContact.php +++ b/src/Model/APContact.php @@ -22,7 +22,7 @@ namespace Friendica\Model; use Friendica\Content\Text\HTML; -use Friendica\Core\Cache\Duration; +use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Logger; use Friendica\Core\System; use Friendica\Database\DBA; diff --git a/src/Model/Photo.php b/src/Model/Photo.php index e72004029..ebd278753 100644 --- a/src/Model/Photo.php +++ b/src/Model/Photo.php @@ -21,7 +21,7 @@ namespace Friendica\Model; -use Friendica\Core\Cache\Duration; +use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Logger; use Friendica\Core\System; use Friendica\Database\DBA; diff --git a/src/Model/Profile.php b/src/Model/Profile.php index d089ada3c..bcd7d5497 100644 --- a/src/Model/Profile.php +++ b/src/Model/Profile.php @@ -24,7 +24,7 @@ namespace Friendica\Model; use Friendica\App; use Friendica\Content\Text\BBCode; use Friendica\Content\Widget\ContactBlock; -use Friendica\Core\Cache\Duration; +use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Protocol; diff --git a/src/Model/Tag.php b/src/Model/Tag.php index ab7845c2c..fb301d143 100644 --- a/src/Model/Tag.php +++ b/src/Model/Tag.php @@ -22,7 +22,7 @@ namespace Friendica\Model; use Friendica\Content\Text\BBCode; -use Friendica\Core\Cache\Duration; +use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\System; diff --git a/src/Module/Search/Index.php b/src/Module/Search/Index.php index 7be5058c2..39bf94097 100644 --- a/src/Module/Search/Index.php +++ b/src/Module/Search/Index.php @@ -25,7 +25,7 @@ use Friendica\Content\Nav; use Friendica\Content\Pager; use Friendica\Content\Text\HTML; use Friendica\Content\Widget; -use Friendica\Core\Cache\Duration; +use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\Core\Search; diff --git a/src/Protocol/ActivityPub/Transmitter.php b/src/Protocol/ActivityPub/Transmitter.php index 5e6f77247..238aa3c16 100644 --- a/src/Protocol/ActivityPub/Transmitter.php +++ b/src/Protocol/ActivityPub/Transmitter.php @@ -23,7 +23,7 @@ namespace Friendica\Protocol\ActivityPub; use Friendica\Content\Feature; use Friendica\Content\Text\BBCode; -use Friendica\Core\Cache\Duration; +use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\System; diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index 84f0c6de8..02d6d270a 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -24,7 +24,7 @@ namespace Friendica\Protocol; use Friendica\Content\Feature; use Friendica\Content\Text\BBCode; use Friendica\Content\Text\Markdown; -use Friendica\Core\Cache\Duration; +use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\System; diff --git a/src/Protocol/Feed.php b/src/Protocol/Feed.php index cdecbcf1b..a9e50d532 100644 --- a/src/Protocol/Feed.php +++ b/src/Protocol/Feed.php @@ -26,7 +26,7 @@ use DOMXPath; use Friendica\Content\PageInfo; use Friendica\Content\Text\BBCode; use Friendica\Content\Text\HTML; -use Friendica\Core\Cache\Duration; +use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Database\DBA; diff --git a/src/Protocol/OStatus.php b/src/Protocol/OStatus.php index c40193e1b..46f68086b 100644 --- a/src/Protocol/OStatus.php +++ b/src/Protocol/OStatus.php @@ -25,7 +25,7 @@ use DOMDocument; use DOMXPath; use Friendica\Content\Text\BBCode; use Friendica\Content\Text\HTML; -use Friendica\Core\Cache\Duration; +use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Database\DBA; diff --git a/src/Util/JsonLD.php b/src/Util/JsonLD.php index 6ffe9a0a0..e8c4751c4 100644 --- a/src/Util/JsonLD.php +++ b/src/Util/JsonLD.php @@ -21,7 +21,7 @@ namespace Friendica\Util; -use Friendica\Core\Cache\Duration; +use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Logger; use Exception; use Friendica\DI; diff --git a/src/Worker/SearchDirectory.php b/src/Worker/SearchDirectory.php index bb69969b9..5e1b1590f 100644 --- a/src/Worker/SearchDirectory.php +++ b/src/Worker/SearchDirectory.php @@ -21,7 +21,7 @@ namespace Friendica\Worker; -use Friendica\Core\Cache\Duration; +use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Logger; use Friendica\Core\Search; use Friendica\DI; diff --git a/static/dependencies.config.php b/static/dependencies.config.php index bf7b412c2..39aae97fd 100644 --- a/static/dependencies.config.php +++ b/static/dependencies.config.php @@ -158,13 +158,13 @@ return [ ] ], Cache\ICache::class => [ - 'instanceOf' => Factory\CacheFactory::class, + 'instanceOf' => Cache\Factory\CacheFactory::class, 'call' => [ ['create', [], Dice::CHAIN_CALL], ], ], Cache\IMemoryCache::class => [ - 'instanceOf' => Factory\CacheFactory::class, + 'instanceOf' => Cache\Factory\CacheFactory::class, 'call' => [ ['create', [], Dice::CHAIN_CALL], ], diff --git a/tests/src/Core/Cache/APCuCacheTest.php b/tests/src/Core/Cache/APCuCacheTest.php index d8fe59da0..2f957a5d5 100644 --- a/tests/src/Core/Cache/APCuCacheTest.php +++ b/tests/src/Core/Cache/APCuCacheTest.php @@ -21,7 +21,7 @@ namespace Friendica\Test\src\Core\Cache; -use Friendica\Core\Cache\APCuCache; +use Friendica\Core\Cache\Type\APCuCache; /** * @group APCU diff --git a/tests/src/Core/Cache/ArrayCacheTest.php b/tests/src/Core/Cache/ArrayCacheTest.php index c2e92806c..3623fe0c1 100644 --- a/tests/src/Core/Cache/ArrayCacheTest.php +++ b/tests/src/Core/Cache/ArrayCacheTest.php @@ -21,7 +21,7 @@ namespace Friendica\Test\src\Core\Cache; -use Friendica\Core\Cache\ArrayCache; +use Friendica\Core\Cache\Type\ArrayCache; class ArrayCacheTest extends MemoryCacheTest { diff --git a/tests/src/Core/Cache/DatabaseCacheTest.php b/tests/src/Core/Cache/DatabaseCacheTest.php index 37859ef78..8d404b355 100644 --- a/tests/src/Core/Cache/DatabaseCacheTest.php +++ b/tests/src/Core/Cache/DatabaseCacheTest.php @@ -60,7 +60,7 @@ class DatabaseCacheTest extends CacheTest $dba = new StaticDatabase($configCache, $profiler, $logger); - $this->cache = new Cache\DatabaseCache('database', $dba); + $this->cache = new Cache\Type\DatabaseCache('database', $dba); return $this->cache; } diff --git a/tests/src/Core/Cache/MemcacheCacheTest.php b/tests/src/Core/Cache/MemcacheCacheTest.php index 4947186cc..6916f5169 100644 --- a/tests/src/Core/Cache/MemcacheCacheTest.php +++ b/tests/src/Core/Cache/MemcacheCacheTest.php @@ -22,7 +22,7 @@ namespace Friendica\Test\src\Core\Cache; use Exception; -use Friendica\Core\Cache\MemcacheCache; +use Friendica\Core\Cache\Type\MemcacheCache; use Friendica\Core\Config\IConfig; use Mockery; diff --git a/tests/src/Core/Cache/MemcachedCacheTest.php b/tests/src/Core/Cache/MemcachedCacheTest.php index 842e33d08..cc912e364 100644 --- a/tests/src/Core/Cache/MemcachedCacheTest.php +++ b/tests/src/Core/Cache/MemcachedCacheTest.php @@ -22,7 +22,7 @@ namespace Friendica\Test\src\Core\Cache; use Exception; -use Friendica\Core\Cache\MemcachedCache; +use Friendica\Core\Cache\Type\MemcachedCache; use Friendica\Core\Config\IConfig; use Mockery; use Psr\Log\NullLogger; diff --git a/tests/src/Core/Cache/RedisCacheTest.php b/tests/src/Core/Cache/RedisCacheTest.php index 146dca6d9..f5c540d32 100644 --- a/tests/src/Core/Cache/RedisCacheTest.php +++ b/tests/src/Core/Cache/RedisCacheTest.php @@ -22,7 +22,7 @@ namespace Friendica\Test\src\Core\Cache; use Exception; -use Friendica\Core\Cache\RedisCache; +use Friendica\Core\Cache\Type\RedisCache; use Friendica\Core\Config\IConfig; use Mockery; @@ -58,7 +58,7 @@ class RedisCacheTest extends MemoryCacheTest ->andReturn(null); try { - $this->cache = new RedisCache($host, $configMock); + $this->cache = new \Friendica\Core\Cache\Type\RedisCache($host, $configMock); } catch (Exception $e) { static::markTestSkipped('Redis is not available. Failure: ' . $e->getMessage()); } diff --git a/tests/src/Core/Lock/APCuCacheLockTest.php b/tests/src/Core/Lock/APCuCacheLockTest.php index 9f893ab32..750748975 100644 --- a/tests/src/Core/Lock/APCuCacheLockTest.php +++ b/tests/src/Core/Lock/APCuCacheLockTest.php @@ -21,7 +21,7 @@ namespace Friendica\Test\src\Core\Lock; -use Friendica\Core\Cache\APCuCache; +use Friendica\Core\Cache\Type\APCuCache; use Friendica\Core\Lock\CacheLock; /** diff --git a/tests/src/Core/Lock/ArrayCacheLockTest.php b/tests/src/Core/Lock/ArrayCacheLockTest.php index 11ea794c6..93c2c2052 100644 --- a/tests/src/Core/Lock/ArrayCacheLockTest.php +++ b/tests/src/Core/Lock/ArrayCacheLockTest.php @@ -21,7 +21,7 @@ namespace Friendica\Test\src\Core\Lock; -use Friendica\Core\Cache\ArrayCache; +use Friendica\Core\Cache\Type\ArrayCache; use Friendica\Core\Lock\CacheLock; class ArrayCacheLockTest extends LockTest diff --git a/tests/src/Core/Lock/MemcacheCacheLockTest.php b/tests/src/Core/Lock/MemcacheCacheLockTest.php index 98266852f..efb27dcab 100644 --- a/tests/src/Core/Lock/MemcacheCacheLockTest.php +++ b/tests/src/Core/Lock/MemcacheCacheLockTest.php @@ -22,7 +22,7 @@ namespace Friendica\Test\src\Core\Lock; use Exception; -use Friendica\Core\Cache\MemcacheCache; +use Friendica\Core\Cache\Type\MemcacheCache; use Friendica\Core\Config\IConfig; use Friendica\Core\Lock\CacheLock; use Mockery; diff --git a/tests/src/Core/Lock/MemcachedCacheLockTest.php b/tests/src/Core/Lock/MemcachedCacheLockTest.php index 67d3097fa..f72936484 100644 --- a/tests/src/Core/Lock/MemcachedCacheLockTest.php +++ b/tests/src/Core/Lock/MemcachedCacheLockTest.php @@ -22,7 +22,7 @@ namespace Friendica\Test\src\Core\Lock; use Exception; -use Friendica\Core\Cache\MemcachedCache; +use Friendica\Core\Cache\Type\MemcachedCache; use Friendica\Core\Config\IConfig; use Friendica\Core\Lock\CacheLock; use Mockery; diff --git a/tests/src/Core/Lock/RedisCacheLockTest.php b/tests/src/Core/Lock/RedisCacheLockTest.php index 360fa74fb..6fdbd1eeb 100644 --- a/tests/src/Core/Lock/RedisCacheLockTest.php +++ b/tests/src/Core/Lock/RedisCacheLockTest.php @@ -22,7 +22,7 @@ namespace Friendica\Test\src\Core\Lock; use Exception; -use Friendica\Core\Cache\RedisCache; +use Friendica\Core\Cache\Type\RedisCache; use Friendica\Core\Config\IConfig; use Friendica\Core\Lock\CacheLock; use Mockery; From ab83d0dd27e46e733ecb49f25789bfb318852ac7 Mon Sep 17 00:00:00 2001 From: Philipp Date: Sat, 23 Oct 2021 11:29:16 +0200 Subject: [PATCH 02/19] Restructure (P)Config to follow new paradigm --- src/App.php | 5 +- src/App/Mode.php | 2 +- src/Console/AutomaticInstallation.php | 4 +- src/Console/DatabaseStructure.php | 2 +- src/Core/Config/{ => Cache}/Cache.php | 2 +- .../Config/Cache}/ConfigFileLoader.php | 4 +- .../Config}/Factory/ConfigFactory.php | 41 ++----- src/Core/Config/IConfig.php | 2 + .../Config => Core/Config/Model}/Config.php | 32 +++++- src/Core/Config/Model/DbaUtils.php | 59 ++++++++++ src/Core/{ => Config/Type}/BaseConfig.php | 14 +-- src/Core/Config/{ => Type}/JitConfig.php | 12 +- src/Core/Config/{ => Type}/PreloadConfig.php | 12 +- src/Core/Installer.php | 8 +- src/Core/PConfig/{ => Cache}/Cache.php | 2 +- src/Core/PConfig/Factory/PConfigFactory.php | 48 ++++++++ src/Core/PConfig/IPConfig.php | 4 +- .../Config => Core/PConfig/Model}/PConfig.php | 33 +++++- src/Core/{ => PConfig/Type}/BasePConfig.php | 16 +-- src/Core/PConfig/{ => Type}/JitPConfig.php | 10 +- .../PConfig/{ => Type}/PreloadPConfig.php | 10 +- src/Database/Database.php | 2 +- src/Model/Config/DbaConfig.php | 105 ------------------ src/Module/Admin/Summary.php | 6 +- src/Module/Install.php | 2 +- src/Util/Profiler.php | 4 +- static/dependencies.config.php | 17 +-- tests/FixtureTest.php | 2 +- tests/Util/AppMockTrait.php | 8 +- tests/functional/DependencyCheckTest.php | 4 +- tests/src/App/ModeTest.php | 2 +- .../AutomaticInstallationConsoleTest.php | 4 +- tests/src/Core/Cache/DatabaseCacheTest.php | 3 +- .../src/Core/Config/{ => Cache}/CacheTest.php | 54 ++++----- .../Config/Cache}/ConfigFileLoaderTest.php | 34 +++--- tests/src/Core/Config/ConfigTest.php | 40 +++---- tests/src/Core/Config/JitConfigTest.php | 2 +- tests/src/Core/Config/PreloadConfigTest.php | 2 +- tests/src/Core/InstallerTest.php | 2 +- .../src/Core/Lock/DatabaseLockDriverTest.php | 3 +- tests/src/Core/Lock/SemaphoreLockTest.php | 2 +- .../Core/PConfig/{ => Cache}/CacheTest.php | 28 ++--- tests/src/Core/PConfig/JitPConfigTest.php | 2 +- tests/src/Core/PConfig/PConfigTest.php | 30 ++--- tests/src/Core/PConfig/PreloadPConfigTest.php | 4 +- tests/src/Core/StorageManagerTest.php | 8 +- tests/src/Model/ProcessTest.php | 3 +- .../src/Model/Storage/DatabaseStorageTest.php | 2 +- tests/src/Util/ProfilerTest.php | 2 +- 49 files changed, 368 insertions(+), 331 deletions(-) rename src/Core/Config/{ => Cache}/Cache.php (99%) rename src/{Util => Core/Config/Cache}/ConfigFileLoader.php (99%) rename src/{ => Core/Config}/Factory/ConfigFactory.php (61%) rename src/{Model/Config => Core/Config/Model}/Config.php (87%) create mode 100644 src/Core/Config/Model/DbaUtils.php rename src/Core/{ => Config/Type}/BaseConfig.php (73%) rename src/Core/Config/{ => Type}/JitConfig.php (90%) rename src/Core/Config/{ => Type}/PreloadConfig.php (90%) rename src/Core/PConfig/{ => Cache}/Cache.php (99%) create mode 100644 src/Core/PConfig/Factory/PConfigFactory.php rename src/{Model/Config => Core/PConfig/Model}/PConfig.php (87%) rename src/Core/{ => PConfig/Type}/BasePConfig.php (75%) rename src/Core/PConfig/{ => Type}/JitPConfig.php (90%) rename src/Core/PConfig/{ => Type}/PreloadPConfig.php (90%) delete mode 100644 src/Model/Config/DbaConfig.php rename tests/src/Core/Config/{ => Cache}/CacheTest.php (87%) rename tests/src/{Util/Config => Core/Config/Cache}/ConfigFileLoaderTest.php (94%) rename tests/src/Core/PConfig/{ => Cache}/CacheTest.php (91%) diff --git a/src/App.php b/src/App.php index 3ef9bdb4e..cd217c34e 100644 --- a/src/App.php +++ b/src/App.php @@ -25,10 +25,10 @@ use Exception; use Friendica\App\Arguments; use Friendica\App\BaseURL; use Friendica\App\Module; -use Friendica\Factory\ConfigFactory; +use Friendica\Core\Config\Factory\ConfigFactory; use Friendica\Module\Maintenance; use Friendica\Security\Authentication; -use Friendica\Core\Config\Cache; +use Friendica\Core\Config\Cache\Cache; use Friendica\Core\Config\IConfig; use Friendica\Core\PConfig\IPConfig; use Friendica\Core\L10n; @@ -39,7 +39,6 @@ use Friendica\Model\Contact; use Friendica\Model\Profile; use Friendica\Module\Special\HTTPException as ModuleHTTPException; use Friendica\Network\HTTPException; -use Friendica\Util\ConfigFileLoader; use Friendica\Util\DateTimeFormat; use Friendica\Util\HTTPSignature; use Friendica\Util\Profiler; diff --git a/src/App/Mode.php b/src/App/Mode.php index 7210184a0..9f7a34a53 100644 --- a/src/App/Mode.php +++ b/src/App/Mode.php @@ -22,7 +22,7 @@ namespace Friendica\App; use Detection\MobileDetect; -use Friendica\Core\Config\Cache; +use Friendica\Core\Config\Cache\Cache; use Friendica\Database\Database; use Friendica\Util\BasePath; diff --git a/src/Console/AutomaticInstallation.php b/src/Console/AutomaticInstallation.php index 5d608b00d..9ef82524a 100644 --- a/src/Console/AutomaticInstallation.php +++ b/src/Console/AutomaticInstallation.php @@ -25,7 +25,7 @@ use Asika\SimpleConsole\Console; use Friendica\App; use Friendica\App\BaseURL; use Friendica\Core\Config\IConfig; -use Friendica\Core\Config\Cache; +use Friendica\Core\Config\Cache\Cache; use Friendica\Core\Installer; use Friendica\Core\Theme; use Friendica\Database\Database; @@ -36,7 +36,7 @@ class AutomaticInstallation extends Console { /** @var App\Mode */ private $appMode; - /** @var Cache */ + /** @var \Friendica\Core\Config\Cache\Cache */ private $configCache; /** @var IConfig */ private $config; diff --git a/src/Console/DatabaseStructure.php b/src/Console/DatabaseStructure.php index b44400c01..1083a512d 100644 --- a/src/Console/DatabaseStructure.php +++ b/src/Console/DatabaseStructure.php @@ -21,7 +21,7 @@ namespace Friendica\Console; -use Friendica\Core\Config\Cache; +use Friendica\Core\Config\Cache\Cache; use Friendica\Core\Update; use Friendica\Database\Database; use Friendica\Database\DBStructure; diff --git a/src/Core/Config/Cache.php b/src/Core/Config/Cache/Cache.php similarity index 99% rename from src/Core/Config/Cache.php rename to src/Core/Config/Cache/Cache.php index 8d2eb1a97..77e6562ca 100644 --- a/src/Core/Config/Cache.php +++ b/src/Core/Config/Cache/Cache.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Core\Config; +namespace Friendica\Core\Config\Cache; use ParagonIE\HiddenString\HiddenString; diff --git a/src/Util/ConfigFileLoader.php b/src/Core/Config/Cache/ConfigFileLoader.php similarity index 99% rename from src/Util/ConfigFileLoader.php rename to src/Core/Config/Cache/ConfigFileLoader.php index aabefc18b..4b1a09c1d 100644 --- a/src/Util/ConfigFileLoader.php +++ b/src/Core/Config/Cache/ConfigFileLoader.php @@ -19,11 +19,11 @@ * */ -namespace Friendica\Util; +namespace Friendica\Core\Config\Cache; use Exception; use Friendica\Core\Addon; -use Friendica\Core\Config\Cache; +use Friendica\Core\Config\Cache\Cache; /** * The ConfigFileLoader loads config-files and stores them in a ConfigCache ( @see Cache ) diff --git a/src/Factory/ConfigFactory.php b/src/Core/Config/Factory/ConfigFactory.php similarity index 61% rename from src/Factory/ConfigFactory.php rename to src/Core/Config/Factory/ConfigFactory.php index cf5564096..9546a0248 100644 --- a/src/Factory/ConfigFactory.php +++ b/src/Core/Config/Factory/ConfigFactory.php @@ -19,14 +19,13 @@ * */ -namespace Friendica\Factory; +namespace Friendica\Core\Config\Factory; use Exception; use Friendica\Core\Config; -use Friendica\Core\Config\Cache; -use Friendica\Model\Config\Config as ConfigModel; -use Friendica\Model\Config\PConfig as PConfigModel; -use Friendica\Util\ConfigFileLoader; +use Friendica\Core\Config\Cache\Cache; +use Friendica\Core\Config\Model\Config as ConfigModel; +use Friendica\Core\Config\Cache\ConfigFileLoader; class ConfigFactory { @@ -55,7 +54,7 @@ class ConfigFactory * @param string $basePath The basepath of FRIENDICA * @param array $serer the $_SERVER array * - * @return ConfigFileLoader + * @return \Friendica\Core\Config\Cache\ConfigFileLoader */ public function createConfigFileLoader(string $basePath, array $server = []) { @@ -70,7 +69,7 @@ class ConfigFactory } /** - * @param ConfigFileLoader $loader The Config Cache loader (INI/config/.htconfig) + * @param \Friendica\Core\Config\Cache\ConfigFileLoader $loader The Config Cache loader (INI/config/.htconfig) * * @return Cache * @@ -85,38 +84,20 @@ class ConfigFactory } /** - * @param Cache $configCache The config cache of this adapter - * @param ConfigModel $configModel The configuration model + * @param \Friendica\Core\Config\Cache\Cache $configCache The config cache of this adapter + * @param ConfigModel $configModel The configuration model * * @return Config\IConfig */ - public function createConfig(Cache $configCache, ConfigModel $configModel) + public function create(Cache $configCache, ConfigModel $configModel) { if ($configCache->get('system', 'config_adapter') === 'preload') { - $configuration = new Config\PreloadConfig($configCache, $configModel); + $configuration = new Config\Type\PreloadConfig($configCache, $configModel); } else { - $configuration = new Config\JitConfig($configCache, $configModel); + $configuration = new Config\Type\JitConfig($configCache, $configModel); } - return $configuration; - } - - /** - * @param Cache $configCache The config cache - * @param \Friendica\Core\PConfig\Cache $pConfigCache The personal config cache - * @param PConfigModel $configModel The configuration model - * - * @return \Friendica\Core\PConfig\IPConfig - */ - public function createPConfig(Cache $configCache, \Friendica\Core\PConfig\Cache $pConfigCache, PConfigModel $configModel) - { - if ($configCache->get('system', 'config_adapter') === 'preload') { - $configuration = new \Friendica\Core\PConfig\PreloadPConfig($pConfigCache, $configModel); - } else { - $configuration = new \Friendica\Core\PConfig\JitPConfig($pConfigCache, $configModel); - } - return $configuration; } } diff --git a/src/Core/Config/IConfig.php b/src/Core/Config/IConfig.php index 81ea1afd7..21cee2e92 100644 --- a/src/Core/Config/IConfig.php +++ b/src/Core/Config/IConfig.php @@ -21,6 +21,8 @@ namespace Friendica\Core\Config; +use Friendica\Core\Config\Cache\Cache; + /** * Interface for accessing system wide configurations */ diff --git a/src/Model/Config/Config.php b/src/Core/Config/Model/Config.php similarity index 87% rename from src/Model/Config/Config.php rename to src/Core/Config/Model/Config.php index ecc6b6f66..bca2145fb 100644 --- a/src/Model/Config/Config.php +++ b/src/Core/Config/Model/Config.php @@ -19,14 +19,36 @@ * */ -namespace Friendica\Model\Config; +namespace Friendica\Core\Config\Model; +use Friendica\Database\Database; /** * The Config model backend, which is using the general DB-model backend for configs */ -class Config extends DbaConfig +class Config { + /** @var Database */ + protected $dba; + + /** + * @param Database $dba The database connection of this model + */ + public function __construct(Database $dba) + { + $this->dba = $dba; + } + + /** + * Checks if the model is currently connected + * + * @return bool + */ + public function isConnected() + { + return $this->dba->isConnected(); + } + /** * Loads all configuration values and returns the loaded category as an array. * @@ -49,7 +71,7 @@ class Config extends DbaConfig while ($config = $this->dba->fetch($configs)) { $key = $config['k']; - $value = $this->toConfigValue($config['v']); + $value = DbaUtils::toConfigValue($config['v']); // just save it in case it is set if (isset($value)) { @@ -82,7 +104,7 @@ class Config extends DbaConfig $config = $this->dba->selectFirst('config', ['v'], ['cat' => $cat, 'k' => $key]); if ($this->dba->isResult($config)) { - $value = $this->toConfigValue($config['v']); + $value = DbaUtils::toConfigValue($config['v']); // just return it in case it is set if (isset($value)) { @@ -122,7 +144,7 @@ class Config extends DbaConfig return true; } - $dbvalue = $this->toDbValue($value); + $dbvalue = DbaUtils::toDbValue($value); $result = $this->dba->update('config', ['v' => $dbvalue], ['cat' => $cat, 'k' => $key], true); diff --git a/src/Core/Config/Model/DbaUtils.php b/src/Core/Config/Model/DbaUtils.php new file mode 100644 index 000000000..da2b89737 --- /dev/null +++ b/src/Core/Config/Model/DbaUtils.php @@ -0,0 +1,59 @@ +configCache = $configCache; $this->configModel = $configModel; diff --git a/src/Core/Config/JitConfig.php b/src/Core/Config/Type/JitConfig.php similarity index 90% rename from src/Core/Config/JitConfig.php rename to src/Core/Config/Type/JitConfig.php index 8eb4ace1e..5e1fe24c4 100644 --- a/src/Core/Config/JitConfig.php +++ b/src/Core/Config/Type/JitConfig.php @@ -19,10 +19,10 @@ * */ -namespace Friendica\Core\Config; +namespace Friendica\Core\Config\Type; -use Friendica\Core\BaseConfig; -use Friendica\Model; +use Friendica\Core\Config\Cache\Cache; +use Friendica\Core\Config\Model\Config; /** * This class implements the Just-In-Time configuration, which will cache @@ -39,10 +39,10 @@ class JitConfig extends BaseConfig private $db_loaded; /** - * @param Cache $configCache The configuration cache (based on the config-files) - * @param Model\Config\Config $configModel The configuration model + * @param Cache $configCache The configuration cache (based on the config-files) + * @param Config $configModel The configuration model */ - public function __construct(Cache $configCache, Model\Config\Config $configModel) + public function __construct(Cache $configCache, Config $configModel) { parent::__construct($configCache, $configModel); $this->db_loaded = []; diff --git a/src/Core/Config/PreloadConfig.php b/src/Core/Config/Type/PreloadConfig.php similarity index 90% rename from src/Core/Config/PreloadConfig.php rename to src/Core/Config/Type/PreloadConfig.php index a72fd167f..c6abfcd9f 100644 --- a/src/Core/Config/PreloadConfig.php +++ b/src/Core/Config/Type/PreloadConfig.php @@ -19,10 +19,10 @@ * */ -namespace Friendica\Core\Config; +namespace Friendica\Core\Config\Type; -use Friendica\Core\BaseConfig; -use Friendica\Model; +use Friendica\Core\Config\Cache\Cache; +use Friendica\Core\Config\Model\Config; /** * This class implements the preload configuration, which will cache @@ -36,10 +36,10 @@ class PreloadConfig extends BaseConfig private $config_loaded; /** - * @param Cache $configCache The configuration cache (based on the config-files) - * @param Model\Config\Config $configModel The configuration model + * @param Cache $configCache The configuration cache (based on the config-files) + * @param Config $configModel The configuration model */ - public function __construct(Cache $configCache, Model\Config\Config $configModel) + public function __construct(Cache $configCache, Config $configModel) { parent::__construct($configCache, $configModel); $this->config_loaded = false; diff --git a/src/Core/Installer.php b/src/Core/Installer.php index 96fe94156..fc0da6cbe 100644 --- a/src/Core/Installer.php +++ b/src/Core/Installer.php @@ -23,7 +23,7 @@ namespace Friendica\Core; use DOMDocument; use Exception; -use Friendica\Core\Config\Cache; +use Friendica\Core\Config\Cache\Cache; use Friendica\Database\Database; use Friendica\Database\DBStructure; use Friendica\DI; @@ -278,7 +278,7 @@ class Installer $cmd = "$phppath -v"; $result = trim(shell_exec($cmd)); $passed2 = (strpos($result, "(cli)") !== false); - list($result) = explode("\n", $result); + [$result] = explode("\n", $result); $help = ""; if (!$passed2) { $help .= DI::l10n()->t("PHP executable is not the php cli binary \x28could be cgi-fgci version\x29") . EOL; @@ -678,8 +678,8 @@ class Installer /** * Setup the default cache for a new installation * - * @param Cache $configCache The configuration cache - * @param string $basePath The determined basepath + * @param \Friendica\Core\Config\Cache\Cache $configCache The configuration cache + * @param string $basePath The determined basepath * * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ diff --git a/src/Core/PConfig/Cache.php b/src/Core/PConfig/Cache/Cache.php similarity index 99% rename from src/Core/PConfig/Cache.php rename to src/Core/PConfig/Cache/Cache.php index d19c34d80..97554b2fe 100644 --- a/src/Core/PConfig/Cache.php +++ b/src/Core/PConfig/Cache/Cache.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Core\PConfig; +namespace Friendica\Core\PConfig\Cache; use ParagonIE\HiddenString\HiddenString; diff --git a/src/Core/PConfig/Factory/PConfigFactory.php b/src/Core/PConfig/Factory/PConfigFactory.php new file mode 100644 index 000000000..eb248f14a --- /dev/null +++ b/src/Core/PConfig/Factory/PConfigFactory.php @@ -0,0 +1,48 @@ +. + * + */ + +namespace Friendica\Core\PConfig\Factory; + +use Friendica\Core\Config\Cache\Cache; +use Friendica\Core\PConfig\IPConfig; +use Friendica\Core\PConfig\Model\PConfig as PConfigModel; +use Friendica\Core\PConfig\Type; + +class PConfigFactory +{ + /** + * @param Cache $configCache The config cache + * @param \Friendica\Core\PConfig\Cache\Cache $pConfigCache The personal config cache + * @param PConfigModel $configModel The configuration model + * + * @return IPConfig + */ + public function create(Cache $configCache, \Friendica\Core\PConfig\Cache\Cache $pConfigCache, PConfigModel $configModel) + { + if ($configCache->get('system', 'config_adapter') === 'preload') { + $configuration = new Type\PreloadPConfig($pConfigCache, $configModel); + } else { + $configuration = new Type\JitPConfig($pConfigCache, $configModel); + } + + return $configuration; + } +} diff --git a/src/Core/PConfig/IPConfig.php b/src/Core/PConfig/IPConfig.php index 25d81bd7e..1795a6039 100644 --- a/src/Core/PConfig/IPConfig.php +++ b/src/Core/PConfig/IPConfig.php @@ -21,6 +21,8 @@ namespace Friendica\Core\PConfig; +use Friendica\Core\Config\Cache\Cache; + /** * Interface for accessing user specific configurations */ @@ -95,7 +97,7 @@ interface IPConfig /** * Returns the Config Cache * - * @return Cache + * @return \Friendica\Core\PConfig\Cache\Cache */ function getCache(); } diff --git a/src/Model/Config/PConfig.php b/src/Core/PConfig/Model/PConfig.php similarity index 87% rename from src/Model/Config/PConfig.php rename to src/Core/PConfig/Model/PConfig.php index 0aeb0df42..35ff34a56 100644 --- a/src/Model/Config/PConfig.php +++ b/src/Core/PConfig/Model/PConfig.php @@ -19,14 +19,37 @@ * */ -namespace Friendica\Model\Config; +namespace Friendica\Core\PConfig\Model; +use Friendica\Core\Config\Model\DbaUtils; +use Friendica\Database\Database; /** * The Config model backend for users, which is using the general DB-model backend for user-configs */ -class PConfig extends DbaConfig +class PConfig { + /** @var Database */ + protected $dba; + + /** + * @param Database $dba The database connection of this model + */ + public function __construct(Database $dba) + { + $this->dba = $dba; + } + + /** + * Checks if the model is currently connected + * + * @return bool + */ + public function isConnected() + { + return $this->dba->isConnected(); + } + /** * Loads all configuration values and returns the loaded category as an array. * @@ -49,7 +72,7 @@ class PConfig extends DbaConfig while ($config = $this->dba->fetch($configs)) { $key = $config['k']; - $value = $this->toConfigValue($config['v']); + $value = DbaUtils::toConfigValue($config['v']); // just save it in case it is set if (isset($value)) { @@ -83,7 +106,7 @@ class PConfig extends DbaConfig $config = $this->dba->selectFirst('pconfig', ['v'], ['uid' => $uid, 'cat' => $cat, 'k' => $key]); if ($this->dba->isResult($config)) { - $value = $this->toConfigValue($config['v']); + $value = DbaUtils::toConfigValue($config['v']); // just return it in case it is set if (isset($value)) { @@ -125,7 +148,7 @@ class PConfig extends DbaConfig return true; } - $dbvalue = $this->toDbValue($value); + $dbvalue = DbaUtils::toDbValue($value); $result = $this->dba->update('pconfig', ['v' => $dbvalue], ['uid' => $uid, 'cat' => $cat, 'k' => $key], true); diff --git a/src/Core/BasePConfig.php b/src/Core/PConfig/Type/BasePConfig.php similarity index 75% rename from src/Core/BasePConfig.php rename to src/Core/PConfig/Type/BasePConfig.php index 366a8e606..9ae374f2e 100644 --- a/src/Core/BasePConfig.php +++ b/src/Core/PConfig/Type/BasePConfig.php @@ -19,9 +19,9 @@ * */ -namespace Friendica\Core; +namespace Friendica\Core\PConfig\Type; -use Friendica\Core\PConfig\Cache; +use Friendica\Core\PConfig\Cache\Cache; use Friendica\Core\PConfig\IPConfig; use Friendica\Model; @@ -35,20 +35,20 @@ use Friendica\Model; abstract class BasePConfig implements IPConfig { /** - * @var Cache + * @var \Friendica\Core\PConfig\Cache\Cache */ protected $configCache; /** - * @var Model\Config\PConfig + * @var \Friendica\Core\PConfig\Model\PConfig */ protected $configModel; /** - * @param Cache $configCache The configuration cache - * @param Model\Config\PConfig $configModel The configuration model + * @param \Friendica\Core\PConfig\Cache\Cache $configCache The configuration cache + * @param \Friendica\Core\PConfig\Model\PConfig $configModel The configuration model */ - public function __construct(Cache $configCache, Model\Config\PConfig $configModel) + public function __construct(Cache $configCache, \Friendica\Core\PConfig\Model\PConfig $configModel) { $this->configCache = $configCache; $this->configModel = $configModel; @@ -57,7 +57,7 @@ abstract class BasePConfig implements IPConfig /** * Returns the Config Cache * - * @return Cache + * @return \Friendica\Core\PConfig\Cache\Cache */ public function getCache() { diff --git a/src/Core/PConfig/JitPConfig.php b/src/Core/PConfig/Type/JitPConfig.php similarity index 90% rename from src/Core/PConfig/JitPConfig.php rename to src/Core/PConfig/Type/JitPConfig.php index 251f1bd0b..99c3b581b 100644 --- a/src/Core/PConfig/JitPConfig.php +++ b/src/Core/PConfig/Type/JitPConfig.php @@ -19,9 +19,9 @@ * */ -namespace Friendica\Core\PConfig; +namespace Friendica\Core\PConfig\Type; -use Friendica\Core\BasePConfig; +use Friendica\Core\PConfig\Cache\Cache; use Friendica\Model; /** @@ -39,10 +39,10 @@ class JitPConfig extends BasePConfig private $db_loaded; /** - * @param Cache $configCache The configuration cache - * @param Model\Config\PConfig $configModel The configuration model + * @param Cache $configCache The configuration cache + * @param \Friendica\Core\PConfig\Model\PConfig $configModel The configuration model */ - public function __construct(Cache $configCache, Model\Config\PConfig $configModel) + public function __construct(Cache $configCache, \Friendica\Core\PConfig\Model\PConfig $configModel) { parent::__construct($configCache, $configModel); $this->db_loaded = []; diff --git a/src/Core/PConfig/PreloadPConfig.php b/src/Core/PConfig/Type/PreloadPConfig.php similarity index 90% rename from src/Core/PConfig/PreloadPConfig.php rename to src/Core/PConfig/Type/PreloadPConfig.php index abdc18b15..4498bb409 100644 --- a/src/Core/PConfig/PreloadPConfig.php +++ b/src/Core/PConfig/Type/PreloadPConfig.php @@ -19,9 +19,9 @@ * */ -namespace Friendica\Core\PConfig; +namespace Friendica\Core\PConfig\Type; -use Friendica\Core\BasePConfig; +use Friendica\Core\PConfig\Cache\Cache; use Friendica\Model; /** @@ -36,10 +36,10 @@ class PreloadPConfig extends BasePConfig private $config_loaded; /** - * @param Cache $configCache The configuration cache - * @param Model\Config\PConfig $configModel The configuration model + * @param \Friendica\Core\PConfig\Cache\Cache $configCache The configuration cache + * @param \Friendica\Core\PConfig\Model\PConfig $configModel The configuration model */ - public function __construct(Cache $configCache, Model\Config\PConfig $configModel) + public function __construct(Cache $configCache, \Friendica\Core\PConfig\Model\PConfig $configModel) { parent::__construct($configCache, $configModel); $this->config_loaded = []; diff --git a/src/Database/Database.php b/src/Database/Database.php index a654cccc5..4a8d5d36e 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -21,7 +21,7 @@ namespace Friendica\Database; -use Friendica\Core\Config\Cache; +use Friendica\Core\Config\Cache\Cache; use Friendica\Core\System; use Friendica\Network\HTTPException\InternalServerErrorException; use Friendica\Util\DateTimeFormat; diff --git a/src/Model/Config/DbaConfig.php b/src/Model/Config/DbaConfig.php deleted file mode 100644 index 4ef96f6c2..000000000 --- a/src/Model/Config/DbaConfig.php +++ /dev/null @@ -1,105 +0,0 @@ -. - * - */ - -namespace Friendica\Model\Config; - -use Friendica\Database\Database; - -/** - * The DB-based model of (P-)Config values - * Encapsulates db-calls in case of config queries - */ -abstract class DbaConfig -{ - /** @var Database */ - protected $dba; - - /** - * @param Database $dba The database connection of this model - */ - public function __construct(Database $dba) - { - $this->dba = $dba; - } - - /** - * Checks if the model is currently connected - * - * @return bool - */ - public function isConnected() - { - return $this->dba->isConnected(); - } - - /** - * Formats a DB value to a config value - * - null = The db-value isn't set - * - bool = The db-value is either '0' or '1' - * - array = The db-value is a serialized array - * - string = The db-value is a string - * - * Keep in mind that there aren't any numeric/integer config values in the database - * - * @param null|string $value - * - * @return null|array|string - */ - protected function toConfigValue($value) - { - if (!isset($value)) { - return null; - } - - switch (true) { - // manage array value - case preg_match("|^a:[0-9]+:{.*}$|s", $value): - return unserialize($value); - - default: - return $value; - } - } - - /** - * Formats a config value to a DB value (string) - * - * @param mixed $value - * - * @return string - */ - protected function toDbValue($value) - { - // if not set, save an empty string - if (!isset($value)) { - return ''; - } - - switch (true) { - // manage arrays - case is_array($value): - return serialize($value); - - default: - return (string)$value; - } - } -} diff --git a/src/Module/Admin/Summary.php b/src/Module/Admin/Summary.php index 2d081f407..5077d3b5d 100644 --- a/src/Module/Admin/Summary.php +++ b/src/Module/Admin/Summary.php @@ -22,18 +22,18 @@ namespace Friendica\Module\Admin; use Friendica\Core\Addon; -use Friendica\Core\Config\Cache; +use Friendica\Core\Config\Cache\Cache; use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\Core\Update; use Friendica\Database\DBA; use Friendica\Database\DBStructure; use Friendica\DI; -use Friendica\Factory\ConfigFactory; +use Friendica\Core\Config\Factory\ConfigFactory; use Friendica\Model\Register; use Friendica\Module\BaseAdmin; use Friendica\Network\HTTPException\InternalServerErrorException; -use Friendica\Util\ConfigFileLoader; +use Friendica\Core\Config\Cache\ConfigFileLoader; use Friendica\Util\DateTimeFormat; class Summary extends BaseAdmin diff --git a/src/Module/Install.php b/src/Module/Install.php index c61f16233..b9ae763b7 100644 --- a/src/Module/Install.php +++ b/src/Module/Install.php @@ -24,7 +24,7 @@ namespace Friendica\Module; use Friendica\App; use Friendica\BaseModule; use Friendica\Core; -use Friendica\Core\Config\Cache; +use Friendica\Core\Config\Cache\Cache; use Friendica\Core\Renderer; use Friendica\Core\Theme; use Friendica\DI; diff --git a/src/Util/Profiler.php b/src/Util/Profiler.php index fb499d815..0ff338353 100644 --- a/src/Util/Profiler.php +++ b/src/Util/Profiler.php @@ -21,7 +21,7 @@ namespace Friendica\Util; -use Friendica\Core\Config\Cache; +use Friendica\Core\Config\Cache\Cache; use Friendica\Core\Config\IConfig; use Friendica\Core\System; use Psr\Container\ContainerExceptionInterface; @@ -78,7 +78,7 @@ class Profiler implements ContainerInterface } /** - * @param Cache $configCache The configuration cache + * @param \Friendica\Core\Config\Cache\Cache $configCache The configuration cache */ public function __construct(Cache $configCache) { diff --git a/static/dependencies.config.php b/static/dependencies.config.php index 39aae97fd..fe063c046 100644 --- a/static/dependencies.config.php +++ b/static/dependencies.config.php @@ -37,6 +37,7 @@ use Dice\Dice; use Friendica\App; use Friendica\Core\Cache; use Friendica\Core\Config; +use Friendica\Core\PConfig; use Friendica\Core\L10n; use Friendica\Core\Lock\ILock; use Friendica\Core\Process; @@ -73,8 +74,8 @@ return [ $_SERVER ] ], - Util\ConfigFileLoader::class => [ - 'instanceOf' => Factory\ConfigFactory::class, + Config\Cache\ConfigFileLoader::class => [ + 'instanceOf' => Config\Factory\ConfigFactory::class, 'call' => [ ['createConfigFileLoader', [ [Dice::INSTANCE => '$basepath'], @@ -82,8 +83,8 @@ return [ ], Dice::CHAIN_CALL], ], ], - Config\Cache::class => [ - 'instanceOf' => Factory\ConfigFactory::class, + Config\Cache\Cache::class => [ + 'instanceOf' => Config\Factory\ConfigFactory::class, 'call' => [ ['createCache', [$_SERVER], Dice::CHAIN_CALL], ], @@ -95,15 +96,15 @@ return [ ], ], Config\IConfig::class => [ - 'instanceOf' => Factory\ConfigFactory::class, + 'instanceOf' => Config\Factory\ConfigFactory::class, 'call' => [ - ['createConfig', [], Dice::CHAIN_CALL], + ['create', [], Dice::CHAIN_CALL], ], ], \Friendica\Core\PConfig\IPConfig::class => [ - 'instanceOf' => Factory\ConfigFactory::class, + 'instanceOf' => PConfig\Factory\PConfigFactory::class, 'call' => [ - ['createPConfig', [], Dice::CHAIN_CALL], + ['create', [], Dice::CHAIN_CALL], ] ], Database::class => [ diff --git a/tests/FixtureTest.php b/tests/FixtureTest.php index f30b50878..fdeda1feb 100644 --- a/tests/FixtureTest.php +++ b/tests/FixtureTest.php @@ -6,7 +6,7 @@ namespace Friendica\Test; use Dice\Dice; -use Friendica\Core\Config\Cache; +use Friendica\Core\Config\Cache\Cache; use Friendica\Core\Config\IConfig; use Friendica\Core\Session; use Friendica\Core\Session\ISession; diff --git a/tests/Util/AppMockTrait.php b/tests/Util/AppMockTrait.php index 4266a4a02..cca9bd37e 100644 --- a/tests/Util/AppMockTrait.php +++ b/tests/Util/AppMockTrait.php @@ -74,19 +74,19 @@ trait AppMockTrait $this->dice = \Mockery::mock(Dice::class)->makePartial(); $this->dice = $this->dice->addRules(include __DIR__ . '/../../static/dependencies.config.php'); - $this->configMock = \Mockery::mock(Config\Cache::class); + $this->configMock = \Mockery::mock(Config\Cache\Cache::class); $this->dice->shouldReceive('create') - ->with(Config\Cache::class) + ->with(Config\Cache\Cache::class) ->andReturn($this->configMock); $this->mode = \Mockery::mock(App\Mode::class); $this->dice->shouldReceive('create') ->with(App\Mode::class) ->andReturn($this->mode); - $configModel= \Mockery::mock(\Friendica\Model\Config\Config::class); + $configModel= \Mockery::mock(Config\Model\Config::class); // Disable the adapter $configModel->shouldReceive('isConnected')->andReturn(false); - $config = new Config\JitConfig($this->configMock, $configModel); + $config = new Config\Type\JitConfig($this->configMock, $configModel); $this->dice->shouldReceive('create') ->with(Config\IConfig::class) ->andReturn($config); diff --git a/tests/functional/DependencyCheckTest.php b/tests/functional/DependencyCheckTest.php index a7b45cceb..3d207d07d 100644 --- a/tests/functional/DependencyCheckTest.php +++ b/tests/functional/DependencyCheckTest.php @@ -25,13 +25,13 @@ use Dice\Dice; use Friendica\App; use Friendica\Core\Cache\ICache; use Friendica\Core\Cache\IMemoryCache; -use Friendica\Core\Config\Cache; +use Friendica\Core\Config\Cache\Cache; use Friendica\Core\Config\IConfig; use Friendica\Core\Lock\ILock; use Friendica\Database\Database; use Friendica\Test\Util\VFSTrait; use Friendica\Util\BasePath; -use Friendica\Util\ConfigFileLoader; +use Friendica\Core\Config\Cache\ConfigFileLoader; use Friendica\Util\Profiler; use PHPUnit\Framework\TestCase; use Psr\Log\LoggerInterface; diff --git a/tests/src/App/ModeTest.php b/tests/src/App/ModeTest.php index 36ca6b21d..c3a5c5e72 100644 --- a/tests/src/App/ModeTest.php +++ b/tests/src/App/ModeTest.php @@ -24,7 +24,7 @@ namespace Friendica\Test\src\App; use Detection\MobileDetect; use Friendica\App\Mode; use Friendica\App\Module; -use Friendica\Core\Config\Cache; +use Friendica\Core\Config\Cache\Cache; use Friendica\Database\Database; use Friendica\Test\MockedTest; use Friendica\Test\Util\VFSTrait; diff --git a/tests/src/Console/AutomaticInstallationConsoleTest.php b/tests/src/Console/AutomaticInstallationConsoleTest.php index 01a57b57e..f11d38365 100644 --- a/tests/src/Console/AutomaticInstallationConsoleTest.php +++ b/tests/src/Console/AutomaticInstallationConsoleTest.php @@ -24,7 +24,7 @@ namespace Friendica\Test\src\Console; use Dice\Dice; use Friendica\App; use Friendica\Console\AutomaticInstallation; -use Friendica\Core\Config\Cache; +use Friendica\Core\Config\Cache\Cache; use Friendica\Core\Installer; use Friendica\Core\L10n; use Friendica\Core\Logger; @@ -53,7 +53,7 @@ class AutomaticInstallationConsoleTest extends ConsoleTest private $assertFileDb; /** - * @var Cache The configuration cache to check after each test + * @var \Friendica\Core\Config\Cache\Cache The configuration cache to check after each test */ private $configCache; diff --git a/tests/src/Core/Cache/DatabaseCacheTest.php b/tests/src/Core/Cache/DatabaseCacheTest.php index 8d404b355..55011f87c 100644 --- a/tests/src/Core/Cache/DatabaseCacheTest.php +++ b/tests/src/Core/Cache/DatabaseCacheTest.php @@ -22,11 +22,10 @@ namespace Friendica\Test\src\Core\Cache; use Friendica\Core\Cache; -use Friendica\Factory\ConfigFactory; +use Friendica\Core\Config\Factory\ConfigFactory; use Friendica\Test\DatabaseTestTrait; use Friendica\Test\Util\Database\StaticDatabase; use Friendica\Test\Util\VFSTrait; -use Friendica\Util\ConfigFileLoader; use Friendica\Util\Profiler; use Mockery; use Psr\Log\NullLogger; diff --git a/tests/src/Core/Config/CacheTest.php b/tests/src/Core/Config/Cache/CacheTest.php similarity index 87% rename from tests/src/Core/Config/CacheTest.php rename to tests/src/Core/Config/Cache/CacheTest.php index 79cca7c12..530b5b482 100644 --- a/tests/src/Core/Config/CacheTest.php +++ b/tests/src/Core/Config/Cache/CacheTest.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Test\src\Core\Config; +namespace Friendica\Test\src\Core\Config\Cache; use Friendica\Core\Config\Cache; use Friendica\Test\MockedTest; @@ -49,7 +49,7 @@ class CacheTest extends MockedTest ]; } - private function assertConfigValues($data, Cache $configCache) + private function assertConfigValues($data, Cache\Cache $configCache) { foreach ($data as $cat => $values) { foreach ($values as $key => $value) { @@ -64,7 +64,7 @@ class CacheTest extends MockedTest */ public function testLoadConfigArray($data) { - $configCache = new Cache(); + $configCache = new Cache\Cache(); $configCache->load($data); self::assertConfigValues($data, $configCache); @@ -83,27 +83,27 @@ class CacheTest extends MockedTest ] ]; - $configCache = new Cache(); - $configCache->load($data, Cache::SOURCE_DB); + $configCache = new Cache\Cache(); + $configCache->load($data, Cache\Cache::SOURCE_DB); // doesn't override - Low Priority due Config file - $configCache->load($override, Cache::SOURCE_FILE); + $configCache->load($override, Cache\Cache::SOURCE_FILE); self::assertConfigValues($data, $configCache); // override the value - High Prio due Server Env - $configCache->load($override, Cache::SOURCE_ENV); + $configCache->load($override, Cache\Cache::SOURCE_ENV); self::assertEquals($override['system']['test'], $configCache->get('system', 'test')); self::assertEquals($override['system']['boolTrue'], $configCache->get('system', 'boolTrue')); // Don't overwrite server ENV variables - even in load mode - $configCache->load($data, Cache::SOURCE_DB); + $configCache->load($data, Cache\Cache::SOURCE_DB); self::assertEquals($override['system']['test'], $configCache->get('system', 'test')); self::assertEquals($override['system']['boolTrue'], $configCache->get('system', 'boolTrue')); // Overwrite ENV variables with ENV variables - $configCache->load($data, Cache::SOURCE_ENV); + $configCache->load($data, Cache\Cache::SOURCE_ENV); self::assertConfigValues($data, $configCache); self::assertNotEquals($override['system']['test'], $configCache->get('system', 'test')); @@ -115,7 +115,7 @@ class CacheTest extends MockedTest */ public function testLoadConfigArrayWrong() { - $configCache = new Cache(); + $configCache = new Cache\Cache(); // empty dataset $configCache->load([]); @@ -136,7 +136,7 @@ class CacheTest extends MockedTest */ public function testGetAll($data) { - $configCache = new Cache(); + $configCache = new Cache\Cache(); $configCache->load($data); $all = $configCache->getAll(); @@ -151,7 +151,7 @@ class CacheTest extends MockedTest */ public function testSetGet($data) { - $configCache = new Cache(); + $configCache = new Cache\Cache(); foreach ($data as $cat => $values) { foreach ($values as $key => $value) { @@ -167,7 +167,7 @@ class CacheTest extends MockedTest */ public function testGetEmpty() { - $configCache = new Cache(); + $configCache = new Cache\Cache(); self::assertNull($configCache->get('something', 'value')); } @@ -177,7 +177,7 @@ class CacheTest extends MockedTest */ public function testGetCat() { - $configCache = new Cache([ + $configCache = new Cache\Cache([ 'system' => [ 'key1' => 'value1', 'key2' => 'value2', @@ -205,7 +205,7 @@ class CacheTest extends MockedTest */ public function testDelete($data) { - $configCache = new Cache($data); + $configCache = new Cache\Cache($data); foreach ($data as $cat => $values) { foreach ($values as $key => $value) { @@ -222,7 +222,7 @@ class CacheTest extends MockedTest */ public function testKeyDiffWithResult($data) { - $configCache = new Cache($data); + $configCache = new Cache\Cache($data); $diffConfig = [ 'fakeCat' => [ @@ -239,7 +239,7 @@ class CacheTest extends MockedTest */ public function testKeyDiffWithoutResult($data) { - $configCache = new Cache($data); + $configCache = new Cache\Cache($data); $diffConfig = $configCache->getAll(); @@ -251,7 +251,7 @@ class CacheTest extends MockedTest */ public function testPasswordHide() { - $configCache = new Cache([ + $configCache = new Cache\Cache([ 'database' => [ 'password' => 'supersecure', 'username' => 'notsecured', @@ -268,7 +268,7 @@ class CacheTest extends MockedTest */ public function testPasswordShow() { - $configCache = new Cache([ + $configCache = new Cache\Cache([ 'database' => [ 'password' => 'supersecure', 'username' => 'notsecured', @@ -285,7 +285,7 @@ class CacheTest extends MockedTest */ public function testEmptyPassword() { - $configCache = new Cache([ + $configCache = new Cache\Cache([ 'database' => [ 'password' => '', 'username' => '', @@ -299,7 +299,7 @@ class CacheTest extends MockedTest public function testWrongTypePassword() { - $configCache = new Cache([ + $configCache = new Cache\Cache([ 'database' => [ 'password' => new stdClass(), 'username' => '', @@ -309,7 +309,7 @@ class CacheTest extends MockedTest self::assertNotEmpty($configCache->get('database', 'password')); self::assertEmpty($configCache->get('database', 'username')); - $configCache = new Cache([ + $configCache = new Cache\Cache([ 'database' => [ 'password' => 23, 'username' => '', @@ -327,19 +327,19 @@ class CacheTest extends MockedTest public function testSetOverrides($data) { - $configCache = new Cache(); - $configCache->load($data, Cache::SOURCE_DB); + $configCache = new Cache\Cache(); + $configCache->load($data, Cache\Cache::SOURCE_DB); // test with wrong override - self::assertFalse($configCache->set('system', 'test', '1234567', Cache::SOURCE_FILE)); + self::assertFalse($configCache->set('system', 'test', '1234567', Cache\Cache::SOURCE_FILE)); self::assertEquals($data['system']['test'], $configCache->get('system', 'test')); // test with override (equal) - self::assertTrue($configCache->set('system', 'test', '8910', Cache::SOURCE_DB)); + self::assertTrue($configCache->set('system', 'test', '8910', Cache\Cache::SOURCE_DB)); self::assertEquals('8910', $configCache->get('system', 'test')); // test with override (over) - self::assertTrue($configCache->set('system', 'test', '111213', Cache::SOURCE_ENV)); + self::assertTrue($configCache->set('system', 'test', '111213', Cache\Cache::SOURCE_ENV)); self::assertEquals('111213', $configCache->get('system', 'test')); } } diff --git a/tests/src/Util/Config/ConfigFileLoaderTest.php b/tests/src/Core/Config/Cache/ConfigFileLoaderTest.php similarity index 94% rename from tests/src/Util/Config/ConfigFileLoaderTest.php rename to tests/src/Core/Config/Cache/ConfigFileLoaderTest.php index cb3ae840c..ed5cfa1ef 100644 --- a/tests/src/Util/Config/ConfigFileLoaderTest.php +++ b/tests/src/Core/Config/Cache/ConfigFileLoaderTest.php @@ -19,13 +19,13 @@ * */ -namespace Friendica\Test\src\Util\Config; +namespace Friendica\Test\src\Core\Config\Cache; use Friendica\Core\Config\Cache; -use Friendica\Factory\ConfigFactory; +use Friendica\Core\Config\Factory\ConfigFactory; use Friendica\Test\MockedTest; use Friendica\Test\Util\VFSTrait; -use Friendica\Util\ConfigFileLoader; +use Friendica\Core\Config\Cache\ConfigFileLoader; use org\bovigo\vfs\vfsStream; class ConfigFileLoaderTest extends MockedTest @@ -51,7 +51,7 @@ class ConfigFileLoaderTest extends MockedTest $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR ); - $configCache = new Cache(); + $configCache = new Cache\Cache(); $configFileLoader->setupCache($configCache); @@ -77,7 +77,7 @@ class ConfigFileLoaderTest extends MockedTest $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR ); - $configCache = new Cache(); + $configCache = new Cache\Cache(); $configFileLoader->setupCache($configCache); } @@ -90,6 +90,7 @@ class ConfigFileLoaderTest extends MockedTest $this->delConfigFile('local.config.php'); $file = dirname(__DIR__) . DIRECTORY_SEPARATOR . + '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'datasets' . DIRECTORY_SEPARATOR . @@ -105,7 +106,7 @@ class ConfigFileLoaderTest extends MockedTest $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR ); - $configCache = new Cache(); + $configCache = new Cache\Cache(); $configFileLoader->setupCache($configCache); @@ -126,6 +127,7 @@ class ConfigFileLoaderTest extends MockedTest $this->delConfigFile('local.config.php'); $file = dirname(__DIR__) . DIRECTORY_SEPARATOR . + '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'datasets' . DIRECTORY_SEPARATOR . @@ -141,7 +143,7 @@ class ConfigFileLoaderTest extends MockedTest $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR ); - $configCache = new Cache(); + $configCache = new Cache\Cache(); $configFileLoader->setupCache($configCache); @@ -161,6 +163,7 @@ class ConfigFileLoaderTest extends MockedTest $this->delConfigFile('local.config.php'); $file = dirname(__DIR__) . DIRECTORY_SEPARATOR . + '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'datasets' . DIRECTORY_SEPARATOR . @@ -176,7 +179,7 @@ class ConfigFileLoaderTest extends MockedTest $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR ); - $configCache = new Cache(); + $configCache = new Cache\Cache(); $configFileLoader->setupCache($configCache); @@ -214,6 +217,7 @@ class ConfigFileLoaderTest extends MockedTest vfsStream::create($structure, $this->root); $file = dirname(__DIR__) . DIRECTORY_SEPARATOR . + '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'datasets' . DIRECTORY_SEPARATOR . @@ -249,6 +253,7 @@ class ConfigFileLoaderTest extends MockedTest $fileDir = dirname(__DIR__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . + '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'datasets' . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR; @@ -265,7 +270,7 @@ class ConfigFileLoaderTest extends MockedTest $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR ); - $configCache = new Cache(); + $configCache = new Cache\Cache(); $configFileLoader->setupCache($configCache); @@ -283,6 +288,7 @@ class ConfigFileLoaderTest extends MockedTest $fileDir = dirname(__DIR__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . + '..' . DIRECTORY_SEPARATOR . 'datasets' . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR; @@ -298,7 +304,7 @@ class ConfigFileLoaderTest extends MockedTest $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR ); - $configCache = new Cache(); + $configCache = new Cache\Cache(); $configFileLoader->setupCache($configCache); @@ -315,6 +321,7 @@ class ConfigFileLoaderTest extends MockedTest $fileDir = dirname(__DIR__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . + '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'datasets' . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR; @@ -331,7 +338,7 @@ class ConfigFileLoaderTest extends MockedTest $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR ); - $configCache = new Cache(); + $configCache = new Cache\Cache(); $configFileLoader->setupCache($configCache); @@ -347,7 +354,7 @@ class ConfigFileLoaderTest extends MockedTest $this->delConfigFile('local.config.php'); $configFileLoader = (new ConfigFactory())->createConfigFileLoader($this->root->url(), ['FRIENDICA_CONFIG_DIR' => '/a/wrong/dir/']); - $configCache = new Cache(); + $configCache = new Cache\Cache(); $configFileLoader->setupCache($configCache); @@ -362,6 +369,7 @@ class ConfigFileLoaderTest extends MockedTest $this->delConfigFile('local.config.php'); $fileDir = dirname(__DIR__) . DIRECTORY_SEPARATOR . + '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'datasets' . DIRECTORY_SEPARATOR . @@ -372,7 +380,7 @@ class ConfigFileLoaderTest extends MockedTest ->setContent(file_get_contents($fileDir . 'B.config.php')); $configFileLoader = (new ConfigFactory())->createConfigFileLoader($this->root->url(), ['FRIENDICA_CONFIG_DIR' => $this->root->getChild('config2')->url()]); - $configCache = new Cache(); + $configCache = new Cache\Cache(); $configFileLoader->setupCache($configCache); diff --git a/tests/src/Core/Config/ConfigTest.php b/tests/src/Core/Config/ConfigTest.php index 734f6bff7..e77085987 100644 --- a/tests/src/Core/Config/ConfigTest.php +++ b/tests/src/Core/Config/ConfigTest.php @@ -23,7 +23,7 @@ namespace Friendica\Test\src\Core\Config; use Friendica\Core\Config\Cache; use Friendica\Core\Config\IConfig; -use Friendica\Model\Config\Config as ConfigModel; +use Friendica\Core\Config\Model\Config as ConfigModel; use Friendica\Test\MockedTest; use Mockery\MockInterface; use Mockery; @@ -33,7 +33,7 @@ abstract class ConfigTest extends MockedTest /** @var ConfigModel|MockInterface */ protected $configModel; - /** @var Cache */ + /** @var Cache\Cache */ protected $configCache; /** @var IConfig */ @@ -61,7 +61,7 @@ abstract class ConfigTest extends MockedTest // Create the config model $this->configModel = Mockery::mock(ConfigModel::class); - $this->configCache = new Cache(); + $this->configCache = new Cache\Cache(); } /** @@ -161,7 +161,7 @@ abstract class ConfigTest extends MockedTest ->once(); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); // assert config is loaded everytime self::assertConfig('config', $data['config']); @@ -176,7 +176,7 @@ abstract class ConfigTest extends MockedTest public function testLoad(array $data, array $load) { $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); foreach ($load as $loadedCats) { $this->testedConfig->load($loadedCats); @@ -257,7 +257,7 @@ abstract class ConfigTest extends MockedTest public function testCacheLoadDouble(array $data1, array $data2, array $expect = []) { $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); foreach ($data1 as $cat => $data) { $this->testedConfig->load($cat); @@ -282,7 +282,7 @@ abstract class ConfigTest extends MockedTest $this->configModel->shouldReceive('load')->withAnyArgs()->andReturn([])->once(); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); self::assertEmpty($this->testedConfig->getCache()->getAll()); } @@ -299,7 +299,7 @@ abstract class ConfigTest extends MockedTest ->times(3); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); self::assertTrue($this->testedConfig->set('test', 'it', $data)); @@ -317,7 +317,7 @@ abstract class ConfigTest extends MockedTest $this->configModel->shouldReceive('set')->with('test', 'it', $data)->andReturn(true)->once(); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); self::assertTrue($this->testedConfig->set('test', 'it', $data)); @@ -331,7 +331,7 @@ abstract class ConfigTest extends MockedTest public function testGetWrongWithoutDB() { $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); // without refresh self::assertNull($this->testedConfig->get('test', 'it')); @@ -353,10 +353,10 @@ abstract class ConfigTest extends MockedTest */ public function testGetWithRefresh($data) { - $this->configCache->load(['test' => ['it' => 'now']], Cache::SOURCE_FILE); + $this->configCache->load(['test' => ['it' => 'now']], Cache\Cache::SOURCE_FILE); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); // without refresh self::assertEquals('now', $this->testedConfig->get('test', 'it')); @@ -378,10 +378,10 @@ abstract class ConfigTest extends MockedTest */ public function testDeleteWithoutDB($data) { - $this->configCache->load(['test' => ['it' => $data]], Cache::SOURCE_FILE); + $this->configCache->load(['test' => ['it' => $data]], Cache\Cache::SOURCE_FILE); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); self::assertEquals($data, $this->testedConfig->get('test', 'it')); self::assertEquals($data, $this->testedConfig->getCache()->get('test', 'it')); @@ -398,7 +398,7 @@ abstract class ConfigTest extends MockedTest */ public function testDeleteWithDB() { - $this->configCache->load(['test' => ['it' => 'now', 'quarter' => 'true']], Cache::SOURCE_FILE); + $this->configCache->load(['test' => ['it' => 'now', 'quarter' => 'true']], Cache\Cache::SOURCE_FILE); $this->configModel->shouldReceive('delete') ->with('test', 'it') @@ -418,7 +418,7 @@ abstract class ConfigTest extends MockedTest ->once(); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); // directly set the value to the cache $this->testedConfig->getCache()->set('test', 'it', 'now'); @@ -444,9 +444,9 @@ abstract class ConfigTest extends MockedTest public function testSetGetHighPrio() { $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); - $this->testedConfig->getCache()->set('config', 'test', 'prio', Cache::SOURCE_FILE); + $this->testedConfig->getCache()->set('config', 'test', 'prio', Cache\Cache::SOURCE_FILE); self::assertEquals('prio', $this->testedConfig->get('config', 'test')); // now you have to get the new variable entry because of the new set the get refresh succeed as well @@ -460,10 +460,10 @@ abstract class ConfigTest extends MockedTest public function testSetGetLowPrio() { $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); self::assertEquals('it', $this->testedConfig->get('config', 'test')); - $this->testedConfig->getCache()->set('config', 'test', 'prio', Cache::SOURCE_ENV); + $this->testedConfig->getCache()->set('config', 'test', 'prio', Cache\Cache::SOURCE_ENV); // now you have to get the env variable entry as output, even with a new set (which failed) and a get refresh self::assertFalse($this->testedConfig->set('config', 'test', '123')); self::assertEquals('prio', $this->testedConfig->get('config', 'test', '', true)); diff --git a/tests/src/Core/Config/JitConfigTest.php b/tests/src/Core/Config/JitConfigTest.php index 62c5effda..5c923beec 100644 --- a/tests/src/Core/Config/JitConfigTest.php +++ b/tests/src/Core/Config/JitConfigTest.php @@ -21,7 +21,7 @@ namespace Friendica\Test\src\Core\Config; -use Friendica\Core\Config\JitConfig; +use Friendica\Core\Config\Type\JitConfig; class JitConfigTest extends ConfigTest { diff --git a/tests/src/Core/Config/PreloadConfigTest.php b/tests/src/Core/Config/PreloadConfigTest.php index d12f2dcd5..9ce6f4e1b 100644 --- a/tests/src/Core/Config/PreloadConfigTest.php +++ b/tests/src/Core/Config/PreloadConfigTest.php @@ -21,7 +21,7 @@ namespace Friendica\Test\src\Core\Config; -use Friendica\Core\Config\PreloadConfig; +use Friendica\Core\Config\Type\PreloadConfig; class PreloadConfigTest extends ConfigTest { diff --git a/tests/src/Core/InstallerTest.php b/tests/src/Core/InstallerTest.php index 1263fe7e6..bdb1d53c0 100644 --- a/tests/src/Core/InstallerTest.php +++ b/tests/src/Core/InstallerTest.php @@ -23,7 +23,7 @@ namespace Friendica\Core; use Dice\Dice; -use Friendica\Core\Config\Cache; +use Friendica\Core\Config\Cache\Cache; use Friendica\DI; use Friendica\Network\IHTTPResult; use Friendica\Network\IHTTPClient; diff --git a/tests/src/Core/Lock/DatabaseLockDriverTest.php b/tests/src/Core/Lock/DatabaseLockDriverTest.php index c51d153ef..86209d5c7 100644 --- a/tests/src/Core/Lock/DatabaseLockDriverTest.php +++ b/tests/src/Core/Lock/DatabaseLockDriverTest.php @@ -22,11 +22,10 @@ namespace Friendica\Test\src\Core\Lock; use Friendica\Core\Lock\DatabaseLock; -use Friendica\Factory\ConfigFactory; +use Friendica\Core\Config\Factory\ConfigFactory; use Friendica\Test\DatabaseTestTrait; use Friendica\Test\Util\Database\StaticDatabase; use Friendica\Test\Util\VFSTrait; -use Friendica\Util\ConfigFileLoader; use Friendica\Util\Profiler; use Mockery; use Psr\Log\NullLogger; diff --git a/tests/src/Core/Lock/SemaphoreLockTest.php b/tests/src/Core/Lock/SemaphoreLockTest.php index 87d8b2cd2..89a3ec633 100644 --- a/tests/src/Core/Lock/SemaphoreLockTest.php +++ b/tests/src/Core/Lock/SemaphoreLockTest.php @@ -24,7 +24,7 @@ namespace Friendica\Test\src\Core\Lock; use Dice\Dice; use Friendica\App; use Friendica\Core\Config\IConfig; -use Friendica\Core\Config\JitConfig; +use Friendica\Core\Config\Type\JitConfig; use Friendica\Core\Lock\SemaphoreLock; use Friendica\DI; use Mockery; diff --git a/tests/src/Core/PConfig/CacheTest.php b/tests/src/Core/PConfig/Cache/CacheTest.php similarity index 91% rename from tests/src/Core/PConfig/CacheTest.php rename to tests/src/Core/PConfig/Cache/CacheTest.php index 77f6140bd..99e0e914d 100644 --- a/tests/src/Core/PConfig/CacheTest.php +++ b/tests/src/Core/PConfig/Cache/CacheTest.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Test\src\Core\PConfig; +namespace Friendica\Test\src\Core\PConfig\Cache; use Friendica\Core\PConfig\Cache; use Friendica\Test\MockedTest; @@ -47,7 +47,7 @@ class CacheTest extends MockedTest ]; } - private function assertConfigValues($data, Cache $configCache, $uid) + private function assertConfigValues($data, Cache\Cache $configCache, $uid) { foreach ($data as $cat => $values) { foreach ($values as $key => $value) { @@ -63,7 +63,7 @@ class CacheTest extends MockedTest */ public function testSetGet($data) { - $configCache = new Cache(); + $configCache = new Cache\Cache(); $uid = 345; foreach ($data as $cat => $values) { @@ -81,7 +81,7 @@ class CacheTest extends MockedTest */ public function testGetCat() { - $configCache = new Cache(); + $configCache = new Cache\Cache(); $uid = 345; $configCache->load($uid, [ @@ -113,7 +113,7 @@ class CacheTest extends MockedTest */ public function testDelete($data) { - $configCache = new Cache(); + $configCache = new Cache\Cache(); $uid = 345; foreach ($data as $cat => $values) { @@ -136,7 +136,7 @@ class CacheTest extends MockedTest */ public function testKeyDiffWithResult() { - $configCache = new Cache(); + $configCache = new Cache\Cache(); $diffConfig = [ 'fakeCat' => [ @@ -154,7 +154,7 @@ class CacheTest extends MockedTest */ public function testKeyDiffWithoutResult($data) { - $configCache = new Cache(); + $configCache = new Cache\Cache(); $configCache->load(1, $data); @@ -168,7 +168,7 @@ class CacheTest extends MockedTest */ public function testPasswordHide() { - $configCache = new Cache(); + $configCache = new Cache\Cache(); $configCache->load(1, [ 'database' => [ @@ -187,7 +187,7 @@ class CacheTest extends MockedTest */ public function testPasswordShow() { - $configCache = new Cache(false); + $configCache = new Cache\Cache(false); $configCache->load(1, [ 'database' => [ @@ -206,7 +206,7 @@ class CacheTest extends MockedTest */ public function testEmptyPassword() { - $configCache = new Cache(); + $configCache = new Cache\Cache(); $configCache->load(1, [ 'database' => [ @@ -221,7 +221,7 @@ class CacheTest extends MockedTest public function testWrongTypePassword() { - $configCache = new Cache(); + $configCache = new Cache\Cache(); $configCache->load(1, [ 'database' => [ @@ -233,7 +233,7 @@ class CacheTest extends MockedTest self::assertNotEmpty($configCache->get(1, 'database', 'password')); self::assertEmpty($configCache->get(1, 'database', 'username')); - $configCache = new Cache(); + $configCache = new Cache\Cache(); $configCache->load(1, [ 'database' => [ @@ -251,7 +251,7 @@ class CacheTest extends MockedTest */ public function testTwoUid() { - $configCache = new Cache(); + $configCache = new Cache\Cache(); $configCache->load(1, [ 'cat1' => [ @@ -282,7 +282,7 @@ class CacheTest extends MockedTest // bad UID! $uid = null; - $configCache = new Cache(); + $configCache = new Cache\Cache(); self::assertNull($configCache->get($uid, 'cat1', 'cat2')); diff --git a/tests/src/Core/PConfig/JitPConfigTest.php b/tests/src/Core/PConfig/JitPConfigTest.php index f43b9cd76..34428cb31 100644 --- a/tests/src/Core/PConfig/JitPConfigTest.php +++ b/tests/src/Core/PConfig/JitPConfigTest.php @@ -21,7 +21,7 @@ namespace Friendica\Test\src\Core\PConfig; -use Friendica\Core\PConfig\JitPConfig; +use Friendica\Core\PConfig\Type\JitPConfig; class JitPConfigTest extends PConfigTest { diff --git a/tests/src/Core/PConfig/PConfigTest.php b/tests/src/Core/PConfig/PConfigTest.php index f35aa10d9..9288b1058 100644 --- a/tests/src/Core/PConfig/PConfigTest.php +++ b/tests/src/Core/PConfig/PConfigTest.php @@ -22,8 +22,8 @@ namespace Friendica\Test\src\Core\PConfig; use Friendica\Core\PConfig\Cache; -use Friendica\Core\BasePConfig; -use Friendica\Model\Config\PConfig as PConfigModel; +use Friendica\Core\PConfig\Type\BasePConfig; +use Friendica\Core\PConfig\Model\PConfig as PConfigModel; use Friendica\Test\MockedTest; use Mockery; use Mockery\MockInterface; @@ -33,7 +33,7 @@ abstract class PConfigTest extends MockedTest /** @var PConfigModel|MockInterface */ protected $configModel; - /** @var Cache */ + /** @var Cache\Cache */ protected $configCache; /** @var BasePConfig */ @@ -63,11 +63,11 @@ abstract class PConfigTest extends MockedTest // Create the config model $this->configModel = Mockery::mock(PConfigModel::class); - $this->configCache = new Cache(); + $this->configCache = new Cache\Cache(); } /** - * @return BasePConfig + * @return \Friendica\Core\PConfig\Type\BasePConfig */ abstract public function getInstance(); @@ -163,7 +163,7 @@ abstract class PConfigTest extends MockedTest public function testSetUp() { $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); self::assertEmpty($this->testedConfig->getCache()->getAll()); } @@ -174,7 +174,7 @@ abstract class PConfigTest extends MockedTest public function testLoad(int $uid, array $data, array $possibleCats, array $load) { $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); foreach ($load as $loadedCats) { $this->testedConfig->load($uid, $loadedCats); @@ -257,7 +257,7 @@ abstract class PConfigTest extends MockedTest public function testCacheLoadDouble(int $uid, array $data1, array $data2, array $expect) { $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); foreach ($data1 as $cat => $data) { $this->testedConfig->load($uid, $cat); @@ -281,7 +281,7 @@ abstract class PConfigTest extends MockedTest public function testSetGetWithoutDB(int $uid, $data) { $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); self::assertTrue($this->testedConfig->set($uid, 'test', 'it', $data)); @@ -302,7 +302,7 @@ abstract class PConfigTest extends MockedTest ->once(); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); self::assertTrue($this->testedConfig->set($uid, 'test', 'it', $data)); @@ -316,7 +316,7 @@ abstract class PConfigTest extends MockedTest public function testGetWrongWithoutDB() { $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); // without refresh self::assertNull($this->testedConfig->get(0, 'test', 'it')); @@ -341,7 +341,7 @@ abstract class PConfigTest extends MockedTest $this->configCache->load($uid, ['test' => ['it' => 'now']]); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); // without refresh self::assertEquals('now', $this->testedConfig->get($uid, 'test', 'it')); @@ -366,7 +366,7 @@ abstract class PConfigTest extends MockedTest $this->configCache->load($uid, ['test' => ['it' => $data]]); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); self::assertEquals($data, $this->testedConfig->get($uid, 'test', 'it')); self::assertEquals($data, $this->testedConfig->getCache()->get($uid, 'test', 'it')); @@ -405,7 +405,7 @@ abstract class PConfigTest extends MockedTest ->once(); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); // directly set the value to the cache $this->testedConfig->getCache()->set($uid, 'test', 'it', 'now'); @@ -465,7 +465,7 @@ abstract class PConfigTest extends MockedTest $this->configCache->load($data2['uid'], $data2['data']); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); self::assertConfig($data1['uid'], 'cat1', $data1['data']['cat1']); self::assertConfig($data1['uid'], 'cat2', $data1['data']['cat2']); diff --git a/tests/src/Core/PConfig/PreloadPConfigTest.php b/tests/src/Core/PConfig/PreloadPConfigTest.php index aa4c2f70b..6ffee63f7 100644 --- a/tests/src/Core/PConfig/PreloadPConfigTest.php +++ b/tests/src/Core/PConfig/PreloadPConfigTest.php @@ -21,13 +21,13 @@ namespace Friendica\Test\src\Core\PConfig; -use Friendica\Core\PConfig\PreloadPConfig; +use Friendica\Core\PConfig\Type\PreloadPConfig; class PreloadPConfigTest extends PConfigTest { public function getInstance() { - return new PreloadPConfig($this->configCache, $this->configModel); + return new \Friendica\Core\PConfig\Type\PreloadPConfig($this->configCache, $this->configModel); } /** diff --git a/tests/src/Core/StorageManagerTest.php b/tests/src/Core/StorageManagerTest.php index 77e4946bd..acab50ce4 100644 --- a/tests/src/Core/StorageManagerTest.php +++ b/tests/src/Core/StorageManagerTest.php @@ -23,22 +23,22 @@ namespace Friendica\Test\src\Core; use Dice\Dice; use Friendica\Core\Config\IConfig; -use Friendica\Core\Config\PreloadConfig; +use Friendica\Core\Config\Type\PreloadConfig; use Friendica\Core\Hook; use Friendica\Core\L10n; use Friendica\Core\Session\ISession; use Friendica\Core\StorageManager; use Friendica\Database\Database; use Friendica\DI; -use Friendica\Factory\ConfigFactory; -use Friendica\Model\Config\Config; +use Friendica\Core\Config\Factory\ConfigFactory; +use Friendica\Core\Config\Model\Config; use Friendica\Model\Storage; use Friendica\Core\Session; use Friendica\Network\HTTPClient; use Friendica\Test\DatabaseTest; use Friendica\Test\Util\Database\StaticDatabase; use Friendica\Test\Util\VFSTrait; -use Friendica\Util\ConfigFileLoader; +use Friendica\Core\Config\Cache\ConfigFileLoader; use Friendica\Util\Profiler; use org\bovigo\vfs\vfsStream; use Psr\Log\LoggerInterface; diff --git a/tests/src/Model/ProcessTest.php b/tests/src/Model/ProcessTest.php index a4739d7f5..ecb4d52d4 100644 --- a/tests/src/Model/ProcessTest.php +++ b/tests/src/Model/ProcessTest.php @@ -2,12 +2,11 @@ namespace Friendica\Test\src\Model; -use Friendica\Factory\ConfigFactory; +use Friendica\Core\Config\Factory\ConfigFactory; use Friendica\Model\Process; use Friendica\Test\DatabaseTest; use Friendica\Test\Util\Database\StaticDatabase; use Friendica\Test\Util\VFSTrait; -use Friendica\Util\ConfigFileLoader; use Friendica\Util\Profiler; use Psr\Log\NullLogger; diff --git a/tests/src/Model/Storage/DatabaseStorageTest.php b/tests/src/Model/Storage/DatabaseStorageTest.php index e1dfef9a1..e92dd2135 100644 --- a/tests/src/Model/Storage/DatabaseStorageTest.php +++ b/tests/src/Model/Storage/DatabaseStorageTest.php @@ -21,7 +21,7 @@ namespace Friendica\Test\src\Model\Storage; -use Friendica\Factory\ConfigFactory; +use Friendica\Core\Config\Factory\ConfigFactory; use Friendica\Model\Storage\Database; use Friendica\Test\DatabaseTestTrait; use Friendica\Test\Util\Database\StaticDatabase; diff --git a/tests/src/Util/ProfilerTest.php b/tests/src/Util/ProfilerTest.php index 3178f7d17..4c55c419b 100644 --- a/tests/src/Util/ProfilerTest.php +++ b/tests/src/Util/ProfilerTest.php @@ -21,7 +21,7 @@ namespace Friendica\Test\src\Util; -use Friendica\Core\Config\Cache; +use Friendica\Core\Config\Cache\Cache; use Friendica\Core\Config\IConfig; use Friendica\Test\MockedTest; use Friendica\Util\Profiler; From ff1a812e1a669ca2828ccd488cd1f3e8bd884a3f Mon Sep 17 00:00:00 2001 From: Philipp Date: Sat, 23 Oct 2021 11:36:37 +0200 Subject: [PATCH 03/19] Restructure Lock to follow new paradigm --- src/Core/Lock/{ => Enum}/Type.php | 2 +- src/{ => Core/Lock}/Factory/LockFactory.php | 14 +++++++------- src/Core/{ => Lock/Type}/BaseLock.php | 2 +- src/Core/Lock/{ => Type}/CacheLock.php | 3 +-- src/Core/Lock/{ => Type}/DatabaseLock.php | 4 ++-- src/Core/Lock/{ => Type}/SemaphoreLock.php | 5 +++-- static/dependencies.config.php | 8 ++++---- tests/src/Core/Lock/APCuCacheLockTest.php | 4 ++-- tests/src/Core/Lock/ArrayCacheLockTest.php | 4 ++-- tests/src/Core/Lock/DatabaseLockDriverTest.php | 2 +- tests/src/Core/Lock/MemcacheCacheLockTest.php | 4 ++-- tests/src/Core/Lock/MemcachedCacheLockTest.php | 2 +- tests/src/Core/Lock/RedisCacheLockTest.php | 4 ++-- tests/src/Core/Lock/SemaphoreLockTest.php | 4 ++-- 14 files changed, 31 insertions(+), 31 deletions(-) rename src/Core/Lock/{ => Enum}/Type.php (96%) rename src/{ => Core/Lock}/Factory/LockFactory.php (92%) rename src/Core/{ => Lock/Type}/BaseLock.php (98%) rename src/Core/Lock/{ => Type}/CacheLock.php (98%) rename src/Core/Lock/{ => Type}/DatabaseLock.php (98%) rename src/Core/Lock/{ => Type}/SemaphoreLock.php (96%) diff --git a/src/Core/Lock/Type.php b/src/Core/Lock/Enum/Type.php similarity index 96% rename from src/Core/Lock/Type.php rename to src/Core/Lock/Enum/Type.php index 769bad12e..1ad1ef78e 100644 --- a/src/Core/Lock/Type.php +++ b/src/Core/Lock/Enum/Type.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Core\Lock; +namespace Friendica\Core\Lock\Enum; use Friendica\Core\Cache\Enum\Type as CacheType; diff --git a/src/Factory/LockFactory.php b/src/Core/Lock/Factory/LockFactory.php similarity index 92% rename from src/Factory/LockFactory.php rename to src/Core/Lock/Factory/LockFactory.php index 2a54910d4..124ed2f08 100644 --- a/src/Factory/LockFactory.php +++ b/src/Core/Lock/Factory/LockFactory.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Factory; +namespace Friendica\Core\Lock\Factory; use Friendica\Core\Cache\Factory\CacheFactory; use Friendica\Core\Cache\IMemoryCache; @@ -83,18 +83,18 @@ class LockFactory case Type::APCU: $cache = $this->cacheFactory->create($lock_type); if ($cache instanceof IMemoryCache) { - return new Lock\CacheLock($cache); + return new Lock\Type\CacheLock($cache); } else { throw new \Exception(sprintf('Incompatible cache driver \'%s\' for lock used', $lock_type)); } break; case 'database': - return new Lock\DatabaseLock($this->dba); + return new Lock\Type\DatabaseLock($this->dba); break; case 'semaphore': - return new Lock\SemaphoreLock(); + return new Lock\Type\SemaphoreLock(); break; default: @@ -121,7 +121,7 @@ class LockFactory // 1. Try to use Semaphores for - local - locking if (function_exists('sem_get')) { try { - return new Lock\SemaphoreLock(); + return new Lock\Type\SemaphoreLock(); } catch (\Exception $exception) { $this->logger->warning('Using Semaphore driver for locking failed.', ['exception' => $exception]); } @@ -133,7 +133,7 @@ class LockFactory try { $cache = $this->cacheFactory->create($cache_type); if ($cache instanceof IMemoryCache) { - return new Lock\CacheLock($cache); + return new Lock\Type\CacheLock($cache); } } catch (\Exception $exception) { $this->logger->warning('Using Cache driver for locking failed.', ['exception' => $exception]); @@ -141,6 +141,6 @@ class LockFactory } // 3. Use Database Locking as a Fallback - return new Lock\DatabaseLock($this->dba); + return new Lock\Type\DatabaseLock($this->dba); } } diff --git a/src/Core/BaseLock.php b/src/Core/Lock/Type/BaseLock.php similarity index 98% rename from src/Core/BaseLock.php rename to src/Core/Lock/Type/BaseLock.php index 474fe98ea..518475b44 100644 --- a/src/Core/BaseLock.php +++ b/src/Core/Lock/Type/BaseLock.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Core; +namespace Friendica\Core\Lock\Type; use Friendica\Core\Lock\ILock; diff --git a/src/Core/Lock/CacheLock.php b/src/Core/Lock/Type/CacheLock.php similarity index 98% rename from src/Core/Lock/CacheLock.php rename to src/Core/Lock/Type/CacheLock.php index 20705e06e..8a85f0765 100644 --- a/src/Core/Lock/CacheLock.php +++ b/src/Core/Lock/Type/CacheLock.php @@ -19,9 +19,8 @@ * */ -namespace Friendica\Core\Lock; +namespace Friendica\Core\Lock\Type; -use Friendica\Core\BaseLock; use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Cache\IMemoryCache; diff --git a/src/Core/Lock/DatabaseLock.php b/src/Core/Lock/Type/DatabaseLock.php similarity index 98% rename from src/Core/Lock/DatabaseLock.php rename to src/Core/Lock/Type/DatabaseLock.php index 14e78f625..de44e2e2b 100644 --- a/src/Core/Lock/DatabaseLock.php +++ b/src/Core/Lock/Type/DatabaseLock.php @@ -19,10 +19,10 @@ * */ -namespace Friendica\Core\Lock; +namespace Friendica\Core\Lock\Type; -use Friendica\Core\BaseLock; use Friendica\Core\Cache\Enum\Duration; +use Friendica\Core\Lock\Enum\Type; use Friendica\Database\Database; use Friendica\Util\DateTimeFormat; diff --git a/src/Core/Lock/SemaphoreLock.php b/src/Core/Lock/Type/SemaphoreLock.php similarity index 96% rename from src/Core/Lock/SemaphoreLock.php rename to src/Core/Lock/Type/SemaphoreLock.php index fa5cf5e87..4393e4515 100644 --- a/src/Core/Lock/SemaphoreLock.php +++ b/src/Core/Lock/Type/SemaphoreLock.php @@ -19,10 +19,11 @@ * */ -namespace Friendica\Core\Lock; +namespace Friendica\Core\Lock\Type; -use Friendica\Core\BaseLock; use Friendica\Core\Cache\Enum\Duration; +use Friendica\Core\Lock\Enum\Type; +use function get_temppath; class SemaphoreLock extends BaseLock { diff --git a/static/dependencies.config.php b/static/dependencies.config.php index fe063c046..48ed997f3 100644 --- a/static/dependencies.config.php +++ b/static/dependencies.config.php @@ -39,7 +39,7 @@ use Friendica\Core\Cache; use Friendica\Core\Config; use Friendica\Core\PConfig; use Friendica\Core\L10n; -use Friendica\Core\Lock\ILock; +use Friendica\Core\Lock; use Friendica\Core\Process; use Friendica\Core\Session\ISession; use Friendica\Core\StorageManager; @@ -101,7 +101,7 @@ return [ ['create', [], Dice::CHAIN_CALL], ], ], - \Friendica\Core\PConfig\IPConfig::class => [ + PConfig\IPConfig::class => [ 'instanceOf' => PConfig\Factory\PConfigFactory::class, 'call' => [ ['create', [], Dice::CHAIN_CALL], @@ -170,8 +170,8 @@ return [ ['create', [], Dice::CHAIN_CALL], ], ], - ILock::class => [ - 'instanceOf' => Factory\LockFactory::class, + Lock\ILock::class => [ + 'instanceOf' => Lock\Factory\LockFactory::class, 'call' => [ ['create', [], Dice::CHAIN_CALL], ], diff --git a/tests/src/Core/Lock/APCuCacheLockTest.php b/tests/src/Core/Lock/APCuCacheLockTest.php index 750748975..3f13000e0 100644 --- a/tests/src/Core/Lock/APCuCacheLockTest.php +++ b/tests/src/Core/Lock/APCuCacheLockTest.php @@ -22,7 +22,7 @@ namespace Friendica\Test\src\Core\Lock; use Friendica\Core\Cache\Type\APCuCache; -use Friendica\Core\Lock\CacheLock; +use Friendica\Core\Lock\Type\CacheLock; /** * @group APCU @@ -40,6 +40,6 @@ class APCuCacheLockTest extends LockTest protected function getInstance() { - return new CacheLock(new APCuCache('localhost')); + return new \Friendica\Core\Lock\Type\CacheLock(new APCuCache('localhost')); } } diff --git a/tests/src/Core/Lock/ArrayCacheLockTest.php b/tests/src/Core/Lock/ArrayCacheLockTest.php index 93c2c2052..4f6bf3fe9 100644 --- a/tests/src/Core/Lock/ArrayCacheLockTest.php +++ b/tests/src/Core/Lock/ArrayCacheLockTest.php @@ -22,13 +22,13 @@ namespace Friendica\Test\src\Core\Lock; use Friendica\Core\Cache\Type\ArrayCache; -use Friendica\Core\Lock\CacheLock; +use Friendica\Core\Lock\Type\CacheLock; class ArrayCacheLockTest extends LockTest { protected function getInstance() { - return new CacheLock(new ArrayCache('localhost')); + return new \Friendica\Core\Lock\Type\CacheLock(new ArrayCache('localhost')); } /** diff --git a/tests/src/Core/Lock/DatabaseLockDriverTest.php b/tests/src/Core/Lock/DatabaseLockDriverTest.php index 86209d5c7..e08a0d7ca 100644 --- a/tests/src/Core/Lock/DatabaseLockDriverTest.php +++ b/tests/src/Core/Lock/DatabaseLockDriverTest.php @@ -21,7 +21,7 @@ namespace Friendica\Test\src\Core\Lock; -use Friendica\Core\Lock\DatabaseLock; +use Friendica\Core\Lock\Type\DatabaseLock; use Friendica\Core\Config\Factory\ConfigFactory; use Friendica\Test\DatabaseTestTrait; use Friendica\Test\Util\Database\StaticDatabase; diff --git a/tests/src/Core/Lock/MemcacheCacheLockTest.php b/tests/src/Core/Lock/MemcacheCacheLockTest.php index efb27dcab..a3068b6a5 100644 --- a/tests/src/Core/Lock/MemcacheCacheLockTest.php +++ b/tests/src/Core/Lock/MemcacheCacheLockTest.php @@ -24,7 +24,7 @@ namespace Friendica\Test\src\Core\Lock; use Exception; use Friendica\Core\Cache\Type\MemcacheCache; use Friendica\Core\Config\IConfig; -use Friendica\Core\Lock\CacheLock; +use Friendica\Core\Lock\Type\CacheLock; use Mockery; /** @@ -53,7 +53,7 @@ class MemcacheCacheLockTest extends LockTest try { $cache = new MemcacheCache($host, $configMock); - $lock = new CacheLock($cache); + $lock = new \Friendica\Core\Lock\Type\CacheLock($cache); } catch (Exception $e) { static::markTestSkipped('Memcache is not available'); } diff --git a/tests/src/Core/Lock/MemcachedCacheLockTest.php b/tests/src/Core/Lock/MemcachedCacheLockTest.php index f72936484..26cc16f22 100644 --- a/tests/src/Core/Lock/MemcachedCacheLockTest.php +++ b/tests/src/Core/Lock/MemcachedCacheLockTest.php @@ -24,7 +24,7 @@ namespace Friendica\Test\src\Core\Lock; use Exception; use Friendica\Core\Cache\Type\MemcachedCache; use Friendica\Core\Config\IConfig; -use Friendica\Core\Lock\CacheLock; +use Friendica\Core\Lock\Type\CacheLock; use Mockery; use Psr\Log\NullLogger; diff --git a/tests/src/Core/Lock/RedisCacheLockTest.php b/tests/src/Core/Lock/RedisCacheLockTest.php index 6fdbd1eeb..fba68b197 100644 --- a/tests/src/Core/Lock/RedisCacheLockTest.php +++ b/tests/src/Core/Lock/RedisCacheLockTest.php @@ -24,7 +24,7 @@ namespace Friendica\Test\src\Core\Lock; use Exception; use Friendica\Core\Cache\Type\RedisCache; use Friendica\Core\Config\IConfig; -use Friendica\Core\Lock\CacheLock; +use Friendica\Core\Lock\Type\CacheLock; use Mockery; /** @@ -62,7 +62,7 @@ class RedisCacheLockTest extends LockTest try { $cache = new RedisCache($host, $configMock); - $lock = new CacheLock($cache); + $lock = new \Friendica\Core\Lock\Type\CacheLock($cache); } catch (Exception $e) { static::markTestSkipped('Redis is not available. Error: ' . $e->getMessage()); } diff --git a/tests/src/Core/Lock/SemaphoreLockTest.php b/tests/src/Core/Lock/SemaphoreLockTest.php index 89a3ec633..59b110a33 100644 --- a/tests/src/Core/Lock/SemaphoreLockTest.php +++ b/tests/src/Core/Lock/SemaphoreLockTest.php @@ -25,7 +25,7 @@ use Dice\Dice; use Friendica\App; use Friendica\Core\Config\IConfig; use Friendica\Core\Config\Type\JitConfig; -use Friendica\Core\Lock\SemaphoreLock; +use Friendica\Core\Lock\Type\SemaphoreLock; use Friendica\DI; use Mockery; use Mockery\MockInterface; @@ -56,7 +56,7 @@ class SemaphoreLockTest extends LockTest protected function getInstance() { - return new SemaphoreLock(); + return new \Friendica\Core\Lock\Type\SemaphoreLock(); } /** From 57b4c008cb0796fe4add72bc94746d0bba64355f Mon Sep 17 00:00:00 2001 From: Philipp Date: Sat, 23 Oct 2021 11:39:29 +0200 Subject: [PATCH 04/19] Restructure Session to follow new paradigm --- src/{ => Core/Session}/Factory/SessionFactory.php | 7 +++---- src/Core/Session/{ => Type}/AbstractSession.php | 2 +- src/Core/Session/{ => Type}/Memory.php | 4 +++- src/Core/Session/{ => Type}/Native.php | 3 ++- static/dependencies.config.php | 2 +- tests/FixtureTest.php | 2 +- tests/src/Core/StorageManagerTest.php | 4 ++-- 7 files changed, 13 insertions(+), 11 deletions(-) rename src/{ => Core/Session}/Factory/SessionFactory.php (94%) rename src/Core/Session/{ => Type}/AbstractSession.php (97%) rename src/Core/Session/{ => Type}/Memory.php (93%) rename src/Core/Session/{ => Type}/Native.php (95%) diff --git a/src/Factory/SessionFactory.php b/src/Core/Session/Factory/SessionFactory.php similarity index 94% rename from src/Factory/SessionFactory.php rename to src/Core/Session/Factory/SessionFactory.php index 82161fb55..510ff08c7 100644 --- a/src/Factory/SessionFactory.php +++ b/src/Core/Session/Factory/SessionFactory.php @@ -19,14 +19,13 @@ * */ -namespace Friendica\Factory; +namespace Friendica\Core\Session\Factory; use Friendica\App; use Friendica\Core\Cache\ICache; use Friendica\Core\Cache\Enum\Type; use Friendica\Core\Config\IConfig; use Friendica\Core\Session; -use Friendica\Core\System; use Friendica\Database\Database; use Friendica\Util\Profiler; use Psr\Log\LoggerInterface; @@ -63,7 +62,7 @@ class SessionFactory try { if ($mode->isInstall() || $mode->isBackend()) { - $session = new Session\Memory(); + $session = new Session\Type\Memory(); } else { $session_handler = $config->get('system', 'session_handler', self::HANDLER_DEFAULT); $handler = null; @@ -82,7 +81,7 @@ class SessionFactory break; } - $session = new Session\Native($baseURL, $handler); + $session = new Session\Type\Native($baseURL, $handler); } } finally { $profiler->stopRecording(); diff --git a/src/Core/Session/AbstractSession.php b/src/Core/Session/Type/AbstractSession.php similarity index 97% rename from src/Core/Session/AbstractSession.php rename to src/Core/Session/Type/AbstractSession.php index c185f1bbf..8126804db 100644 --- a/src/Core/Session/AbstractSession.php +++ b/src/Core/Session/Type/AbstractSession.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Core\Session; +namespace Friendica\Core\Session\Type; /** * Contains the base methods for $_SESSION interaction diff --git a/src/Core/Session/Memory.php b/src/Core/Session/Type/Memory.php similarity index 93% rename from src/Core/Session/Memory.php rename to src/Core/Session/Type/Memory.php index 7cf9fd6ae..635d880e7 100644 --- a/src/Core/Session/Memory.php +++ b/src/Core/Session/Type/Memory.php @@ -19,7 +19,9 @@ * */ -namespace Friendica\Core\Session; +namespace Friendica\Core\Session\Type; + +use Friendica\Core\Session\ISession; /** * Usable for backend processes (daemon/worker) and testing diff --git a/src/Core/Session/Native.php b/src/Core/Session/Type/Native.php similarity index 95% rename from src/Core/Session/Native.php rename to src/Core/Session/Type/Native.php index 23d02af92..4edd9a962 100644 --- a/src/Core/Session/Native.php +++ b/src/Core/Session/Type/Native.php @@ -19,9 +19,10 @@ * */ -namespace Friendica\Core\Session; +namespace Friendica\Core\Session\Type; use Friendica\App; +use Friendica\Core\Session\ISession; use Friendica\Model\User\Cookie; use SessionHandlerInterface; diff --git a/static/dependencies.config.php b/static/dependencies.config.php index 48ed997f3..4591f4761 100644 --- a/static/dependencies.config.php +++ b/static/dependencies.config.php @@ -207,7 +207,7 @@ return [ ], ], ISession::class => [ - 'instanceOf' => Factory\SessionFactory::class, + 'instanceOf' => \Friendica\Core\Session\Factory\SessionFactory::class, 'call' => [ ['createSession', [$_SERVER], Dice::CHAIN_CALL], ['start', [], Dice::CHAIN_CALL], diff --git a/tests/FixtureTest.php b/tests/FixtureTest.php index fdeda1feb..c09f874fa 100644 --- a/tests/FixtureTest.php +++ b/tests/FixtureTest.php @@ -33,7 +33,7 @@ abstract class FixtureTest extends DatabaseTest $this->dice = (new Dice()) ->addRules(include __DIR__ . '/../static/dependencies.config.php') ->addRule(Database::class, ['instanceOf' => StaticDatabase::class, 'shared' => true]) - ->addRule(ISession::class, ['instanceOf' => Session\Memory::class, 'shared' => true, 'call' => null]); + ->addRule(ISession::class, ['instanceOf' => Session\Type\Memory::class, 'shared' => true, 'call' => null]); DI::init($this->dice); /** @var IConfig $config */ diff --git a/tests/src/Core/StorageManagerTest.php b/tests/src/Core/StorageManagerTest.php index acab50ce4..b7e5715ed 100644 --- a/tests/src/Core/StorageManagerTest.php +++ b/tests/src/Core/StorageManagerTest.php @@ -253,7 +253,7 @@ class StorageManagerTest extends DatabaseTest $dice = (new Dice()) ->addRules(include __DIR__ . '/../../../static/dependencies.config.php') ->addRule(Database::class, ['instanceOf' => StaticDatabase::class, 'shared' => true]) - ->addRule(ISession::class, ['instanceOf' => Session\Memory::class, 'shared' => true, 'call' => null]); + ->addRule(ISession::class, ['instanceOf' => Session\Type\Memory::class, 'shared' => true, 'call' => null]); DI::init($dice); $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); @@ -281,7 +281,7 @@ class StorageManagerTest extends DatabaseTest $dice = (new Dice()) ->addRules(include __DIR__ . '/../../../static/dependencies.config.php') ->addRule(Database::class, ['instanceOf' => StaticDatabase::class, 'shared' => true]) - ->addRule(ISession::class, ['instanceOf' => Session\Memory::class, 'shared' => true, 'call' => null]); + ->addRule(ISession::class, ['instanceOf' => Session\Type\Memory::class, 'shared' => true, 'call' => null]); DI::init($dice); $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); From b21631747714ac2282abfc6d6ac573a3347df11b Mon Sep 17 00:00:00 2001 From: Philipp Date: Tue, 26 Oct 2021 21:44:29 +0200 Subject: [PATCH 05/19] Refactoring Core class structures ... --- doc/AddonStorageBackend.md | 8 +- index.php | 2 +- src/App.php | 48 +++---- src/App/BaseURL.php | 10 +- src/App/Mode.php | 2 +- src/App/Module.php | 8 +- src/App/Page.php | 32 ++--- src/App/Router.php | 12 +- src/Console/AutomaticInstallation.php | 14 +- src/Console/Cache.php | 6 +- src/Console/Config.php | 6 +- src/Console/DatabaseStructure.php | 2 +- src/Console/Lock.php | 6 +- src/Console/Maintenance.php | 6 +- src/Console/PostUpdate.php | 6 +- src/Console/ServerBlock.php | 26 ++-- src/Console/Typo.php | 6 +- src/Console/User.php | 6 +- src/Content/Conversation.php | 12 +- .../{ICache.php => Capability/ICanCache.php} | 40 +++--- .../ICanCacheInMemory.php} | 37 +++-- .../Exception/CachePersistenceException.php | 13 ++ .../Exception/InvalidCacheDriverException.php | 13 ++ .../Factory/{CacheFactory.php => Cache.php} | 47 ++++--- src/Core/Cache/Type/APCuCache.php | 61 +++++---- .../Type/{BaseCache.php => AbstractCache.php} | 24 ++-- src/Core/Cache/Type/ArrayCache.php | 30 ++--- ...mpareDelete.php => CompareDeleteTrait.php} | 22 +-- ...raitCompareSet.php => CompareSetTrait.php} | 25 ++-- src/Core/Cache/Type/DatabaseCache.php | 123 ++++++++++------- src/Core/Cache/Type/MemcacheCache.php | 73 +++++----- ...heCommand.php => MemcacheCommandTrait.php} | 25 ++-- src/Core/Cache/Type/MemcachedCache.php | 75 ++++++----- ...erCache.php => ProfilerCacheDecorator.php} | 38 +++--- src/Core/Cache/Type/RedisCache.php | 87 ++++++------ .../IManageConfigValues.php} | 40 +++--- .../Config/Exception/ConfigFileException.php | 13 ++ .../Exception/ConfigPersistenceException.php | 13 ++ .../Factory/{ConfigFactory.php => Config.php} | 40 +++--- .../Config/{Model => Repository}/Config.php | 101 ++++++++------ .../{BaseConfig.php => AbstractConfig.php} | 26 ++-- src/Core/Config/Type/JitConfig.php | 46 +++---- src/Core/Config/Type/PreloadConfig.php | 49 +++---- .../{Cache => Util}/ConfigFileLoader.php | 52 ++++---- .../DbaUtils.php => Util/ValueConversion.php} | 11 +- .../Config/{Cache => ValueObject}/Cache.php | 27 ++-- src/Core/Installer.php | 6 +- src/Core/L10n.php | 10 +- .../{ILock.php => Capability/ICanLock.php} | 35 ++--- .../Exception/InvalidLockDriverException.php | 13 ++ .../Exception/LockPersistenceException.php | 13 ++ .../Factory/{LockFactory.php => Lock.php} | 47 +++---- .../Type/{BaseLock.php => AbstractLock.php} | 12 +- src/Core/Lock/Type/CacheLock.php | 101 ++++++++------ src/Core/Lock/Type/DatabaseLock.php | 126 +++++++++++------- src/Core/Lock/Type/SemaphoreLock.php | 19 +-- .../IManagePersonalConfigValues.php} | 36 +++-- .../Exception/PConfigPersistenceException.php | 13 ++ .../{PConfigFactory.php => PConfig.php} | 23 ++-- .../PConfig/{Model => Repository}/PConfig.php | 104 ++++++++------- ...ePConfig.php => AbstractPConfigValues.php} | 28 ++-- src/Core/PConfig/Type/JitPConfig.php | 34 +++-- src/Core/PConfig/Type/PreloadPConfig.php | 24 ++-- .../PConfig/{Cache => ValueObject}/Cache.php | 31 +++-- src/Core/Process.php | 8 +- .../IHandleSessions.php} | 8 +- .../{SessionFactory.php => Session.php} | 45 ++++--- src/Core/Session/Handler/Cache.php | 67 ++++++---- src/Core/Session/Handler/Database.php | 75 +++++++---- src/Core/Session/Type/AbstractSession.php | 8 +- src/Core/Session/Type/Memory.php | 4 +- src/Core/Session/Type/Native.php | 6 +- src/Core/StorageManager.php | 14 +- src/DI.php | 20 +-- src/Database/Database.php | 4 +- src/Factory/HTTPClientFactory.php | 6 +- src/Factory/LoggerFactory.php | 20 +-- src/Model/Storage/FilesystemConfig.php | 10 +- src/Model/User/Cookie.php | 12 +- src/Module/Admin/Summary.php | 8 +- src/Module/Install.php | 12 +- .../Notifications/Factory/Introduction.php | 10 +- .../Notifications/Repository/Notify.php | 6 +- src/Security/Authentication.php | 30 ++--- src/Security/ExAuth.php | 21 +-- src/Util/EMailer/MailBuilder.php | 6 +- src/Util/EMailer/NotifyMailBuilder.php | 4 +- src/Util/EMailer/SystemMailBuilder.php | 4 +- src/Util/Emailer.php | 10 +- src/Util/Profiler.php | 10 +- static/dependencies.config.php | 34 ++--- tests/FixtureTest.php | 10 +- tests/Util/AppMockTrait.php | 10 +- tests/functional/DependencyCheckTest.php | 40 +++--- tests/legacy/ApiTest.php | 16 +-- tests/src/App/ModeTest.php | 2 +- tests/src/App/ModuleTest.php | 12 +- tests/src/App/RouterTest.php | 12 +- .../AutomaticInstallationConsoleTest.php | 4 +- tests/src/Console/ConfigConsoleTest.php | 6 +- tests/src/Console/LockConsoleTest.php | 6 +- tests/src/Console/ServerBlockConsoleTest.php | 6 +- tests/src/Core/Cache/CacheTest.php | 8 +- tests/src/Core/Cache/DatabaseCacheTest.php | 6 +- tests/src/Core/Cache/MemcacheCacheTest.php | 4 +- tests/src/Core/Cache/MemcachedCacheTest.php | 4 +- tests/src/Core/Cache/MemoryCacheTest.php | 6 +- tests/src/Core/Cache/RedisCacheTest.php | 4 +- tests/src/Core/Config/Cache/CacheTest.php | 52 ++++---- .../Config/Cache/ConfigFileLoaderTest.php | 74 +++++----- tests/src/Core/Config/ConfigTest.php | 46 +++---- tests/src/Core/InstallerTest.php | 2 +- .../src/Core/Lock/DatabaseLockDriverTest.php | 6 +- tests/src/Core/Lock/LockTest.php | 4 +- tests/src/Core/Lock/MemcacheCacheLockTest.php | 4 +- .../src/Core/Lock/MemcachedCacheLockTest.php | 4 +- tests/src/Core/Lock/RedisCacheLockTest.php | 4 +- tests/src/Core/Lock/SemaphoreLockTest.php | 4 +- tests/src/Core/PConfig/Cache/CacheTest.php | 41 ++---- tests/src/Core/PConfig/PConfigTest.php | 32 ++--- tests/src/Core/StorageManagerTest.php | 21 ++- tests/src/Model/ProcessTest.php | 6 +- .../src/Model/Storage/DatabaseStorageTest.php | 6 +- .../Storage/FilesystemStorageConfigTest.php | 4 +- tests/src/Model/User/CookieTest.php | 6 +- tests/src/Util/BaseURLTest.php | 14 +- tests/src/Util/EMailerTest.php | 12 +- tests/src/Util/Emailer/MailBuilderTest.php | 6 +- .../Util/Emailer/SystemMailBuilderTest.php | 6 +- tests/src/Util/ProfilerTest.php | 6 +- 130 files changed, 1625 insertions(+), 1397 deletions(-) rename src/Core/Cache/{ICache.php => Capability/ICanCache.php} (55%) rename src/Core/Cache/{IMemoryCache.php => Capability/ICanCacheInMemory.php} (53%) create mode 100644 src/Core/Cache/Exception/CachePersistenceException.php create mode 100644 src/Core/Cache/Exception/InvalidCacheDriverException.php rename src/Core/Cache/Factory/{CacheFactory.php => Cache.php} (60%) rename src/Core/Cache/Type/{BaseCache.php => AbstractCache.php} (81%) rename src/Core/Cache/Type/{TraitCompareDelete.php => CompareDeleteTrait.php} (70%) rename src/Core/Cache/Type/{TraitCompareSet.php => CompareSetTrait.php} (67%) rename src/Core/Cache/Type/{TraitMemcacheCommand.php => MemcacheCommandTrait.php} (81%) rename src/Core/Cache/Type/{ProfilerCache.php => ProfilerCacheDecorator.php} (70%) rename src/Core/Config/{IConfig.php => Capability/IManageConfigValues.php} (66%) create mode 100644 src/Core/Config/Exception/ConfigFileException.php create mode 100644 src/Core/Config/Exception/ConfigPersistenceException.php rename src/Core/Config/Factory/{ConfigFactory.php => Config.php} (65%) rename src/Core/Config/{Model => Repository}/Config.php (52%) rename src/Core/Config/Type/{BaseConfig.php => AbstractConfig.php} (61%) rename src/Core/Config/{Cache => Util}/ConfigFileLoader.php (86%) rename src/Core/Config/{Model/DbaUtils.php => Util/ValueConversion.php} (82%) rename src/Core/Config/{Cache => ValueObject}/Cache.php (88%) rename src/Core/Lock/{ILock.php => Capability/ICanLock.php} (62%) create mode 100644 src/Core/Lock/Exception/InvalidLockDriverException.php create mode 100644 src/Core/Lock/Exception/LockPersistenceException.php rename src/Core/Lock/Factory/{LockFactory.php => Lock.php} (74%) rename src/Core/Lock/Type/{BaseLock.php => AbstractLock.php} (85%) rename src/Core/PConfig/{IPConfig.php => Capability/IManagePersonalConfigValues.php} (75%) create mode 100644 src/Core/PConfig/Exception/PConfigPersistenceException.php rename src/Core/PConfig/Factory/{PConfigFactory.php => PConfig.php} (62%) rename src/Core/PConfig/{Model => Repository}/PConfig.php (55%) rename src/Core/PConfig/Type/{BasePConfig.php => AbstractPConfigValues.php} (61%) rename src/Core/PConfig/{Cache => ValueObject}/Cache.php (85%) rename src/Core/Session/{ISession.php => Capability/IHandleSessions.php} (92%) rename src/Core/Session/Factory/{SessionFactory.php => Session.php} (64%) diff --git a/doc/AddonStorageBackend.md b/doc/AddonStorageBackend.md index f4773acb8..0b0672376 100644 --- a/doc/AddonStorageBackend.md +++ b/doc/AddonStorageBackend.md @@ -188,7 +188,7 @@ namespace Friendica\Addon\samplestorage; use Friendica\Model\Storage\IWritableStorage; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\L10n; class SampleStorageBackend implements IWritableStorage @@ -249,12 +249,12 @@ namespace Friendica\Addon\samplestorage; use Friendica\Model\Storage\IStorageConfiguration; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\L10n; class SampleStorageBackendConfig implements IStorageConfiguration { - /** @var IConfig */ + /** @var \Friendica\Core\Config\Capability\IManageConfigValues */ private $config; /** @var L10n */ private $l10n; @@ -265,7 +265,7 @@ class SampleStorageBackendConfig implements IStorageConfiguration * You can add here every dynamic class as dependency you like and add them to a private field * Friendica automatically creates these classes and passes them as argument to the constructor */ - public function __construct(IConfig $config, L10n $l10n) + public function __construct(IManageConfigValues $config, L10n $l10n) { $this->config = $config; $this->l10n = $l10n; diff --git a/index.php b/index.php index 011b9d7f9..4f690ed51 100644 --- a/index.php +++ b/index.php @@ -43,7 +43,7 @@ $a = \Friendica\DI::app(); $a->runFrontend( $dice->create(\Friendica\App\Module::class), $dice->create(\Friendica\App\Router::class), - $dice->create(\Friendica\Core\PConfig\IPConfig::class), + $dice->create(\Friendica\Core\PConfig\Capability\IManagePersonalConfigValues::class), $dice->create(\Friendica\Security\Authentication::class), $dice->create(\Friendica\App\Page::class), $start_time diff --git a/src/App.php b/src/App.php index cd217c34e..9c0699a18 100644 --- a/src/App.php +++ b/src/App.php @@ -25,12 +25,12 @@ use Exception; use Friendica\App\Arguments; use Friendica\App\BaseURL; use Friendica\App\Module; -use Friendica\Core\Config\Factory\ConfigFactory; +use Friendica\Core\Config\Factory\Config; use Friendica\Module\Maintenance; use Friendica\Security\Authentication; -use Friendica\Core\Config\Cache\Cache; -use Friendica\Core\Config\IConfig; -use Friendica\Core\PConfig\IPConfig; +use Friendica\Core\Config\ValueObject\Cache; +use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Core\Theme; @@ -88,7 +88,7 @@ class App private $currentMobileTheme; /** - * @var IConfig The config + * @var IManageConfigValues The config */ private $config; @@ -123,7 +123,7 @@ class App private $process; /** - * @var IPConfig + * @var IManagePersonalConfigValues */ private $pConfig; @@ -305,18 +305,18 @@ class App } /** - * @param Database $database The Friendica Database - * @param IConfig $config The Configuration - * @param App\Mode $mode The mode of this Friendica app - * @param BaseURL $baseURL The full base URL of this Friendica app - * @param LoggerInterface $logger The current app logger - * @param Profiler $profiler The profiler of this application - * @param L10n $l10n The translator instance - * @param App\Arguments $args The Friendica Arguments of the call - * @param Core\Process $process The process methods - * @param IPConfig $pConfig Personal configuration + * @param Database $database The Friendica Database + * @param IManageConfigValues $config The Configuration + * @param App\Mode $mode The mode of this Friendica app + * @param BaseURL $baseURL The full base URL of this Friendica app + * @param LoggerInterface $logger The current app logger + * @param Profiler $profiler The profiler of this application + * @param L10n $l10n The translator instance + * @param App\Arguments $args The Friendica Arguments of the call + * @param Core\Process $process The process methods + * @param \Friendica\Core\PConfig\Capability\IManagePersonalConfigValues $pConfig Personal configuration */ - public function __construct(Database $database, IConfig $config, App\Mode $mode, BaseURL $baseURL, LoggerInterface $logger, Profiler $profiler, L10n $l10n, Arguments $args, Core\Process $process, IPConfig $pConfig) + public function __construct(Database $database, IManageConfigValues $config, App\Mode $mode, BaseURL $baseURL, LoggerInterface $logger, Profiler $profiler, L10n $l10n, Arguments $args, Core\Process $process, IManagePersonalConfigValues $pConfig) { $this->database = $database; $this->config = $config; @@ -357,7 +357,7 @@ class App $this->profiler->update($this->config); Core\Hook::loadHooks(); - $loader = (new ConfigFactory())->createConfigFileLoader($this->getBasePath(), $_SERVER); + $loader = (new Config())->createConfigFileLoader($this->getBasePath(), $_SERVER); Core\Hook::callAll('load_config', $loader); } @@ -552,16 +552,16 @@ class App * * This probably should change to limit the size of this monster method. * - * @param App\Module $module The determined module - * @param App\Router $router - * @param IPConfig $pconfig - * @param Authentication $auth The Authentication backend of the node - * @param App\Page $page The Friendica page printing container + * @param App\Module $module The determined module + * @param App\Router $router + * @param IManagePersonalConfigValues $pconfig + * @param Authentication $auth The Authentication backend of the node + * @param App\Page $page The Friendica page printing container * * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ - public function runFrontend(App\Module $module, App\Router $router, IPConfig $pconfig, Authentication $auth, App\Page $page, float $start_time) + public function runFrontend(App\Module $module, App\Router $router, IManagePersonalConfigValues $pconfig, Authentication $auth, App\Page $page, float $start_time) { $this->profiler->set($start_time, 'start'); $this->profiler->set(microtime(true), 'classinit'); diff --git a/src/App/BaseURL.php b/src/App/BaseURL.php index a7bfce2b1..40ed79416 100644 --- a/src/App/BaseURL.php +++ b/src/App/BaseURL.php @@ -21,7 +21,7 @@ namespace Friendica\App; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\System; use Friendica\Util\Network; use Friendica\Util\Strings; @@ -56,7 +56,7 @@ class BaseURL /** * The Friendica Config * - * @var IConfig + * @var IManageConfigValues */ private $config; @@ -272,10 +272,10 @@ class BaseURL } /** - * @param IConfig $config The Friendica IConfiguration - * @param array $server The $_SERVER array + * @param \Friendica\Core\Config\Capability\IManageConfigValues $config The Friendica IConfiguration + * @param array $server The $_SERVER array */ - public function __construct(IConfig $config, array $server) + public function __construct(IManageConfigValues $config, array $server) { $this->config = $config; $this->server = $server; diff --git a/src/App/Mode.php b/src/App/Mode.php index 9f7a34a53..1087b08a0 100644 --- a/src/App/Mode.php +++ b/src/App/Mode.php @@ -22,7 +22,7 @@ namespace Friendica\App; use Detection\MobileDetect; -use Friendica\Core\Config\Cache\Cache; +use Friendica\Core\Config\ValueObject\Cache; use Friendica\Database\Database; use Friendica\Util\BasePath; diff --git a/src/App/Module.php b/src/App/Module.php index f15b1236e..ce7cc98f0 100644 --- a/src/App/Module.php +++ b/src/App/Module.php @@ -168,15 +168,15 @@ class Module /** * Determine the class of the current module * - * @param Arguments $args The Friendica execution arguments - * @param Router $router The Friendica routing instance - * @param Core\Config\IConfig $config The Friendica Configuration + * @param Arguments $args The Friendica execution arguments + * @param Router $router The Friendica routing instance + * @param \Friendica\Core\Config\Capability\IManageConfigValues $config The Friendica Configuration * * @return Module The determined module of this call * * @throws \Exception */ - public function determineClass(Arguments $args, Router $router, Core\Config\IConfig $config) + public function determineClass(Arguments $args, Router $router, Core\Config\Capability\IManageConfigValues $config) { $printNotAllowedAddon = false; diff --git a/src/App/Page.php b/src/App/Page.php index 766dd4ebe..abc84b0e9 100644 --- a/src/App/Page.php +++ b/src/App/Page.php @@ -26,8 +26,8 @@ use DOMDocument; use DOMXPath; use Friendica\App; use Friendica\Content\Nav; -use Friendica\Core\Config\IConfig; -use Friendica\Core\PConfig\IPConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; use Friendica\Core\Hook; use Friendica\Core\L10n; use Friendica\Core\Renderer; @@ -190,15 +190,15 @@ class Page implements ArrayAccess * - Infinite scroll data * - head.tpl template * - * @param App $app The Friendica App instance - * @param Module $module The loaded Friendica module - * @param L10n $l10n The l10n language instance - * @param IConfig $config The Friendica configuration - * @param IPConfig $pConfig The Friendica personal configuration (for user) + * @param App $app The Friendica App instance + * @param Module $module The loaded Friendica module + * @param L10n $l10n The l10n language instance + * @param \Friendica\Core\Config\Capability\IManageConfigValues $config The Friendica configuration + * @param \Friendica\Core\PConfig\Capability\IManagePersonalConfigValues $pConfig The Friendica personal configuration (for user) * * @throws HTTPException\InternalServerErrorException */ - private function initHead(App $app, Module $module, L10n $l10n, IConfig $config, IPConfig $pConfig) + private function initHead(App $app, Module $module, L10n $l10n, IManageConfigValues $config, IManagePersonalConfigValues $pConfig) { $interval = ((local_user()) ? $pConfig->get(local_user(), 'system', 'update_interval') : 40000); @@ -367,17 +367,17 @@ class Page implements ArrayAccess /** * Executes the creation of the current page and prints it to the screen * - * @param App $app The Friendica App - * @param BaseURL $baseURL The Friendica Base URL - * @param Mode $mode The current node mode - * @param Module $module The loaded Friendica module - * @param L10n $l10n The l10n language class - * @param IConfig $config The Configuration of this node - * @param IPConfig $pconfig The personal/user configuration + * @param App $app The Friendica App + * @param BaseURL $baseURL The Friendica Base URL + * @param Mode $mode The current node mode + * @param Module $module The loaded Friendica module + * @param L10n $l10n The l10n language class + * @param IManageConfigValues $config The Configuration of this node + * @param IManagePersonalConfigValues $pconfig The personal/user configuration * * @throws HTTPException\InternalServerErrorException */ - public function run(App $app, BaseURL $baseURL, Mode $mode, Module $module, L10n $l10n, Profiler $profiler, IConfig $config, IPConfig $pconfig) + public function run(App $app, BaseURL $baseURL, Mode $mode, Module $module, L10n $l10n, Profiler $profiler, IManageConfigValues $config, IManagePersonalConfigValues $pconfig) { $moduleName = $module->getName(); diff --git a/src/App/Router.php b/src/App/Router.php index 507683953..181f5368d 100644 --- a/src/App/Router.php +++ b/src/App/Router.php @@ -27,10 +27,10 @@ use FastRoute\Dispatcher; use FastRoute\RouteCollector; use FastRoute\RouteParser\Std; use Friendica\Core\Cache\Enum\Duration; -use Friendica\Core\Cache\ICache; +use Friendica\Core\Cache\Capability\ICanCache; use Friendica\Core\Hook; use Friendica\Core\L10n; -use Friendica\Core\Lock\ILock; +use Friendica\Core\Lock\Capability\ICanLock; use Friendica\Network\HTTPException; /** @@ -77,10 +77,10 @@ class Router /** @var L10n */ private $l10n; - /** @var ICache */ + /** @var ICanCache */ private $cache; - /** @var ILock */ + /** @var ICanLock */ private $lock; /** @var string */ @@ -90,10 +90,10 @@ class Router * @param array $server The $_SERVER variable * @param string $baseRoutesFilepath The path to a base routes file to leverage cache, can be empty * @param L10n $l10n - * @param ICache $cache + * @param ICanCache $cache * @param RouteCollector|null $routeCollector */ - public function __construct(array $server, string $baseRoutesFilepath, L10n $l10n, ICache $cache, ILock $lock, RouteCollector $routeCollector = null) + public function __construct(array $server, string $baseRoutesFilepath, L10n $l10n, ICanCache $cache, ICanLock $lock, RouteCollector $routeCollector = null) { $this->baseRoutesFilepath = $baseRoutesFilepath; $this->l10n = $l10n; diff --git a/src/Console/AutomaticInstallation.php b/src/Console/AutomaticInstallation.php index 9ef82524a..8be1b34cf 100644 --- a/src/Console/AutomaticInstallation.php +++ b/src/Console/AutomaticInstallation.php @@ -24,8 +24,8 @@ namespace Friendica\Console; use Asika\SimpleConsole\Console; use Friendica\App; use Friendica\App\BaseURL; -use Friendica\Core\Config\IConfig; -use Friendica\Core\Config\Cache\Cache; +use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\Config\ValueObject\Cache; use Friendica\Core\Installer; use Friendica\Core\Theme; use Friendica\Database\Database; @@ -36,9 +36,9 @@ class AutomaticInstallation extends Console { /** @var App\Mode */ private $appMode; - /** @var \Friendica\Core\Config\Cache\Cache */ + /** @var \Friendica\Core\Config\ValueObject\Cache */ private $configCache; - /** @var IConfig */ + /** @var IManageConfigValues */ private $config; /** @var Database */ private $dba; @@ -98,7 +98,7 @@ Examples HELP; } - public function __construct(App\Mode $appMode, Cache $configCache, IConfig $config, Database $dba, array $argv = null) + public function __construct(App\Mode $appMode, Cache $configCache, IManageConfigValues $config, Database $dba, array $argv = null) { parent::__construct($argv); @@ -252,8 +252,8 @@ HELP; } /** - * @param Installer $installer The Installer instance - * @param Cache $configCache The config cache + * @param Installer $installer The Installer instance + * @param \Friendica\Core\Config\ValueObject\Cache $configCache The config cache * * @return bool true if checks were successfully, otherwise false * @throws \Friendica\Network\HTTPException\InternalServerErrorException diff --git a/src/Console/Cache.php b/src/Console/Cache.php index a9452435e..560832c9c 100644 --- a/src/Console/Cache.php +++ b/src/Console/Cache.php @@ -24,7 +24,7 @@ namespace Friendica\Console; use Asika\SimpleConsole\CommandArgsException; use Friendica\App; use Friendica\Core\Cache\Enum\Duration; -use Friendica\Core\Cache\ICache; +use Friendica\Core\Cache\Capability\ICanCache; use RuntimeException; /** @@ -44,7 +44,7 @@ class Cache extends \Asika\SimpleConsole\Console private $appMode; /** - * @var ICache + * @var ICanCache */ private $cache; @@ -82,7 +82,7 @@ HELP; return $help; } - public function __construct(App\Mode $appMode, ICache $cache, array $argv = null) + public function __construct(App\Mode $appMode, ICanCache $cache, array $argv = null) { parent::__construct($argv); diff --git a/src/Console/Config.php b/src/Console/Config.php index 3c775d432..9b2d25197 100644 --- a/src/Console/Config.php +++ b/src/Console/Config.php @@ -23,7 +23,7 @@ namespace Friendica\Console; use Asika\SimpleConsole\CommandArgsException; use Friendica\App; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use RuntimeException; /** @@ -56,7 +56,7 @@ class Config extends \Asika\SimpleConsole\Console */ private $appMode; /** - * @var IConfig + * @var IManageConfigValues */ private $config; @@ -94,7 +94,7 @@ HELP; return $help; } - public function __construct(App\Mode $appMode, IConfig $config, array $argv = null) + public function __construct(App\Mode $appMode, IManageConfigValues $config, array $argv = null) { parent::__construct($argv); diff --git a/src/Console/DatabaseStructure.php b/src/Console/DatabaseStructure.php index 1083a512d..be301746c 100644 --- a/src/Console/DatabaseStructure.php +++ b/src/Console/DatabaseStructure.php @@ -21,7 +21,7 @@ namespace Friendica\Console; -use Friendica\Core\Config\Cache\Cache; +use Friendica\Core\Config\ValueObject\Cache; use Friendica\Core\Update; use Friendica\Database\Database; use Friendica\Database\DBStructure; diff --git a/src/Console/Lock.php b/src/Console/Lock.php index 7ac1cdd24..3b73837b6 100644 --- a/src/Console/Lock.php +++ b/src/Console/Lock.php @@ -23,7 +23,7 @@ namespace Friendica\Console; use Asika\SimpleConsole\CommandArgsException; use Friendica\App; -use Friendica\Core\Lock\ILock; +use Friendica\Core\Lock\Capability\ICanLock; use RuntimeException; /** @@ -42,7 +42,7 @@ class Lock extends \Asika\SimpleConsole\Console private $appMode; /** - * @var ILock + * @var \Friendica\Core\Lock\Capability\ICanLock */ private $lock; @@ -76,7 +76,7 @@ HELP; return $help; } - public function __construct(App\Mode $appMode, ILock $lock, array $argv = null) + public function __construct(App\Mode $appMode, ICanLock $lock, array $argv = null) { parent::__construct($argv); diff --git a/src/Console/Maintenance.php b/src/Console/Maintenance.php index 647d1910f..29ae120f7 100644 --- a/src/Console/Maintenance.php +++ b/src/Console/Maintenance.php @@ -22,7 +22,7 @@ namespace Friendica\Console; use Friendica\App; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; /** * Sets maintenance mode for this node @@ -36,7 +36,7 @@ class Maintenance extends \Asika\SimpleConsole\Console */ private $appMode; /** - * @var IConfig + * @var IManageConfigValues */ private $config; @@ -69,7 +69,7 @@ HELP; return $help; } - public function __construct(App\Mode $appMode, IConfig $config, $argv = null) + public function __construct(App\Mode $appMode, IManageConfigValues $config, $argv = null) { parent::__construct($argv); diff --git a/src/Console/PostUpdate.php b/src/Console/PostUpdate.php index 35b57fb7a..4c047e502 100644 --- a/src/Console/PostUpdate.php +++ b/src/Console/PostUpdate.php @@ -22,7 +22,7 @@ namespace Friendica\Console; use Friendica\App; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\L10n; use Friendica\Core\Update; @@ -38,7 +38,7 @@ class PostUpdate extends \Asika\SimpleConsole\Console */ private $appMode; /** - * @var IConfig + * @var \Friendica\Core\Config\Capability\IManageConfigValues */ private $config; /** @@ -60,7 +60,7 @@ HELP; return $help; } - public function __construct(App\Mode $appMode, IConfig $config, L10n $l10n, array $argv = null) + public function __construct(App\Mode $appMode, IManageConfigValues $config, L10n $l10n, array $argv = null) { parent::__construct($argv); diff --git a/src/Console/ServerBlock.php b/src/Console/ServerBlock.php index bba37c617..2bf5fe1ab 100644 --- a/src/Console/ServerBlock.php +++ b/src/Console/ServerBlock.php @@ -24,7 +24,7 @@ namespace Friendica\Console; use Asika\SimpleConsole\CommandArgsException; use Asika\SimpleConsole\Console; use Console_Table; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; /** * Manage blocked servers @@ -39,7 +39,7 @@ class ServerBlock extends Console protected $helpOptions = ['h', 'help', '?']; /** - * @var IConfig + * @var IManageConfigValues */ private $config; @@ -72,7 +72,7 @@ HELP; return $help; } - public function __construct(IConfig $config, $argv = null) + public function __construct(IManageConfigValues $config, $argv = null) { parent::__construct($argv); @@ -105,9 +105,9 @@ HELP; * Exports the list of blocked domains including the reason for the * block to a CSV file. * - * @param IConfig $config + * @param IManageConfigValues $config */ - private function exportBlockedServers(IConfig $config) + private function exportBlockedServers(IManageConfigValues $config) { $filename = $this->getArgument(1); $blocklist = $config->get('system', 'blocklist', []); @@ -123,9 +123,9 @@ HELP; * Imports a list of domains and a reason for the block from a CSV * file, e.g. created with the export function. * - * @param IConfig $config + * @param IManageConfigValues $config */ - private function importBlockedServers(IConfig $config) + private function importBlockedServers(IManageConfigValues $config) { $filename = $this->getArgument(1); $currBlockList = $config->get('system', 'blocklist', []); @@ -167,9 +167,9 @@ HELP; /** * Prints the whole list of blocked domains including the reason * - * @param IConfig $config + * @param IManageConfigValues $config */ - private function printBlockedServers(IConfig $config) + private function printBlockedServers(IManageConfigValues $config) { $table = new Console_Table(); $table->setHeaders(['Domain', 'Reason']); @@ -183,11 +183,11 @@ HELP; /** * Adds a server to the blocked list * - * @param IConfig $config + * @param IManageConfigValues $config * * @return int The return code (0 = success, 1 = failed) */ - private function addBlockedServer(IConfig $config) + private function addBlockedServer(IManageConfigValues $config) { if (count($this->args) < 2 || count($this->args) > 3) { throw new CommandArgsException('Add needs a domain and optional a reason.'); @@ -235,11 +235,11 @@ HELP; /** * Removes a server from the blocked list * - * @param IConfig $config + * @param IManageConfigValues $config * * @return int The return code (0 = success, 1 = failed) */ - private function removeBlockedServer(IConfig $config) + private function removeBlockedServer(IManageConfigValues $config) { if (count($this->args) !== 2) { throw new CommandArgsException('Remove needs a second parameter.'); diff --git a/src/Console/Typo.php b/src/Console/Typo.php index 633ec1ec3..488e362aa 100644 --- a/src/Console/Typo.php +++ b/src/Console/Typo.php @@ -21,7 +21,7 @@ namespace Friendica\Console; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; /** * Tired of chasing typos and finding them after a commit. @@ -32,7 +32,7 @@ class Typo extends \Asika\SimpleConsole\Console protected $helpOptions = ['h', 'help', '?']; /** - * @var IConfig + * @var IManageConfigValues */ private $config; @@ -53,7 +53,7 @@ HELP; return $help; } - public function __construct(IConfig $config, array $argv = null) + public function __construct(IManageConfigValues $config, array $argv = null) { parent::__construct($argv); diff --git a/src/Console/User.php b/src/Console/User.php index bb0748d6f..5cf15747e 100644 --- a/src/Console/User.php +++ b/src/Console/User.php @@ -25,7 +25,7 @@ use Console_Table; use Friendica\App; use Friendica\Content\Pager; use Friendica\Core\L10n; -use Friendica\Core\PConfig\IPConfig; +use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; use Friendica\Model\Register; use Friendica\Model\User as UserModel; use Friendica\Util\Temporal; @@ -48,7 +48,7 @@ class User extends \Asika\SimpleConsole\Console */ private $l10n; /** - * @var IPConfig + * @var IManagePersonalConfigValues */ private $pConfig; @@ -88,7 +88,7 @@ HELP; return $help; } - public function __construct(App\Mode $appMode, L10n $l10n, IPConfig $pConfig, array $argv = null) + public function __construct(App\Mode $appMode, L10n $l10n, IManagePersonalConfigValues $pConfig, array $argv = null) { parent::__construct($argv); diff --git a/src/Content/Conversation.php b/src/Content/Conversation.php index 879e47c24..7bd7ea69f 100644 --- a/src/Content/Conversation.php +++ b/src/Content/Conversation.php @@ -26,10 +26,10 @@ use Friendica\App\Arguments; use Friendica\App\BaseURL; use Friendica\BaseModule; use Friendica\Core\ACL; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Hook; use Friendica\Core\L10n; -use Friendica\Core\PConfig\IPConfig; +use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; use Friendica\Core\Protocol; use Friendica\Core\Renderer; use Friendica\Core\Session; @@ -66,11 +66,11 @@ class Conversation private $item; /** @var App\Arguments */ private $args; - /** @var IPConfig */ + /** @var IManagePersonalConfigValues */ private $pConfig; /** @var BaseURL */ private $baseURL; - /** @var IConfig */ + /** @var IManageConfigValues */ private $config; /** @var App */ private $app; @@ -79,7 +79,7 @@ class Conversation /** @var App\Mode */ private $mode; - public function __construct(LoggerInterface $logger, Profiler $profiler, Activity $activity, L10n $l10n, Item $item, Arguments $args, BaseURL $baseURL, IConfig $config, IPConfig $pConfig, App\Page $page, App\Mode $mode, App $app) + public function __construct(LoggerInterface $logger, Profiler $profiler, Activity $activity, L10n $l10n, Item $item, Arguments $args, BaseURL $baseURL, IManageConfigValues $config, IManagePersonalConfigValues $pConfig, App\Page $page, App\Mode $mode, App $app) { $this->activity = $activity; $this->item = $item; @@ -629,7 +629,7 @@ class Conversation $body_html = ItemModel::prepareBody($item, true, $preview); - list($categories, $folders) = $this->item->determineCategoriesTerms($item, local_user()); + [$categories, $folders] = $this->item->determineCategoriesTerms($item, local_user()); if (!empty($item['content-warning']) && $this->pConfig->get(local_user(), 'system', 'disable_cw', false)) { $title = ucfirst($item['content-warning']); diff --git a/src/Core/Cache/ICache.php b/src/Core/Cache/Capability/ICanCache.php similarity index 55% rename from src/Core/Cache/ICache.php rename to src/Core/Cache/Capability/ICanCache.php index 3918b0089..46d1df468 100644 --- a/src/Core/Cache/ICache.php +++ b/src/Core/Cache/Capability/ICanCache.php @@ -19,23 +19,24 @@ * */ -namespace Friendica\Core\Cache; +namespace Friendica\Core\Cache\Capability; use Friendica\Core\Cache\Enum\Duration; +use Friendica\Core\Cache\Exception\CachePersistenceException; /** - * Cache Interface + * Interface for caches */ -interface ICache +interface ICanCache { /** * Lists all cache keys * - * @param string prefix optional a prefix to search + * @param string|null prefix optional a prefix to search * * @return array Empty if it isn't supported by the cache driver */ - public function getAllKeys($prefix = null); + public function getAllKeys(?string $prefix = null): array; /** * Fetches cached data according to the key @@ -43,41 +44,50 @@ interface ICache * @param string $key The key to the cached data * * @return mixed Cached $value or "null" if not found + * + * @throws CachePersistenceException In case the underlying cache driver has errors during persistence */ - public function get($key); + public function get(string $key); /** * Stores data in the cache identified by the key. The input $value can have multiple formats. * - * @param string $key The cache key - * @param mixed $value The value to store - * @param integer $ttl The cache lifespan, must be one of the Cache constants + * @param string $key The cache key + * @param mixed $value The value to store + * @param integer $ttl The cache lifespan, must be one of the Cache constants * * @return bool + * + * @throws CachePersistenceException In case the underlying cache driver has errors during persistence */ - public function set($key, $value, $ttl = Duration::FIVE_MINUTES); + public function set(string $key, $value, int $ttl = Duration::FIVE_MINUTES): bool; /** * Delete a key from the cache * - * @param string $key The cache key + * @param string $key The cache key * * @return bool + * + * @throws CachePersistenceException In case the underlying cache driver has errors during persistence */ - public function delete($key); + public function delete(string $key): bool; /** * Remove outdated data from the cache - * @param boolean $outdated just remove outdated values + * + * @param boolean $outdated just remove outdated values * * @return bool + * + * @throws CachePersistenceException In case the underlying cache driver has errors during persistence */ - public function clear($outdated = true); + public function clear(bool $outdated = true): bool; /** * Returns the name of the current cache * * @return string */ - public function getName(); + public function getName(): string; } diff --git a/src/Core/Cache/IMemoryCache.php b/src/Core/Cache/Capability/ICanCacheInMemory.php similarity index 53% rename from src/Core/Cache/IMemoryCache.php rename to src/Core/Cache/Capability/ICanCacheInMemory.php index a46db0b01..96e47ada1 100644 --- a/src/Core/Cache/IMemoryCache.php +++ b/src/Core/Cache/Capability/ICanCacheInMemory.php @@ -19,43 +19,52 @@ * */ -namespace Friendica\Core\Cache; +namespace Friendica\Core\Cache\Capability; use Friendica\Core\Cache\Enum\Duration; +use Friendica\Core\Cache\Exception\CachePersistenceException; /** * This interface defines methods for Memory-Caches only */ -interface IMemoryCache extends ICache +interface ICanCacheInMemory extends ICanCache { /** * Sets a value if it's not already stored * - * @param string $key The cache key - * @param mixed $value The old value we know from the cache - * @param int $ttl The cache lifespan, must be one of the Cache constants + * @param string $key The cache key + * @param mixed $value The old value we know from the cache + * @param int $ttl The cache lifespan, must be one of the Cache constants + * * @return bool + * + * @throws CachePersistenceException In case the underlying cache driver has errors during persistence */ - public function add($key, $value, $ttl = Duration::FIVE_MINUTES); + public function add(string $key, $value, int $ttl = Duration::FIVE_MINUTES): bool; /** * Compares if the old value is set and sets the new value * - * @param string $key The cache key - * @param mixed $oldValue The old value we know from the cache - * @param mixed $newValue The new value we want to set - * @param int $ttl The cache lifespan, must be one of the Cache constants + * @param string $key The cache key + * @param mixed $oldValue The old value we know from the cache + * @param mixed $newValue The new value we want to set + * @param int $ttl The cache lifespan, must be one of the Cache constants * * @return bool + * + * @throws CachePersistenceException In case the underlying cache driver has errors during persistence */ - public function compareSet($key, $oldValue, $newValue, $ttl = Duration::FIVE_MINUTES); + public function compareSet(string $key, $oldValue, $newValue, int $ttl = Duration::FIVE_MINUTES): bool; /** * Compares if the old value is set and removes it * - * @param string $key The cache key - * @param mixed $value The old value we know and want to delete + * @param string $key The cache key + * @param mixed $value The old value we know and want to delete + * * @return bool + * + * @throws CachePersistenceException In case the underlying cache driver has errors during persistence */ - public function compareDelete($key, $value); + public function compareDelete(string $key, $value): bool; } diff --git a/src/Core/Cache/Exception/CachePersistenceException.php b/src/Core/Cache/Exception/CachePersistenceException.php new file mode 100644 index 000000000..d50221ae7 --- /dev/null +++ b/src/Core/Cache/Exception/CachePersistenceException.php @@ -0,0 +1,13 @@ +hostname = $baseURL->getHostname(); $this->config = $config; @@ -80,39 +83,41 @@ class CacheFactory /** * This method creates a CacheDriver for the given cache driver name * - * @param string $type The cache type to create (default is per config) + * @param string|null $type The cache type to create (default is per config) * - * @return ICache The instance of the CacheDriver - * @throws \Exception The exception if something went wrong during the CacheDriver creation + * @return ICanCache The instance of the CacheDriver + * + * @throws InvalidCacheDriverException In case the underlying cache driver isn't valid or not configured properly + * @throws CachePersistenceException In case the underlying cache has errors during persistence */ - public function create(string $type = null) + public function create(string $type = null): ICanCache { if (empty($type)) { $type = $this->config->get('system', 'cache_driver', self::DEFAULT_TYPE); } switch ($type) { - case Cache\Enum\Type::MEMCACHE: - $cache = new Cache\Type\MemcacheCache($this->hostname, $this->config); + case Enum\Type::MEMCACHE: + $cache = new Type\MemcacheCache($this->hostname, $this->config); break; - case Cache\Enum\Type::MEMCACHED: - $cache = new Cache\Type\MemcachedCache($this->hostname, $this->config, $this->logger); + case Enum\Type::MEMCACHED: + $cache = new Type\MemcachedCache($this->hostname, $this->config, $this->logger); break; - case Cache\Enum\Type::REDIS: - $cache = new Cache\Type\RedisCache($this->hostname, $this->config); + case Enum\Type::REDIS: + $cache = new Type\RedisCache($this->hostname, $this->config); break; - case Cache\Enum\Type::APCU: - $cache = new Cache\Type\APCuCache($this->hostname); + case Enum\Type::APCU: + $cache = new Type\APCuCache($this->hostname); break; default: - $cache = new Cache\Type\DatabaseCache($this->hostname, $this->dba); + $cache = new Type\DatabaseCache($this->hostname, $this->dba); } $profiling = $this->config->get('system', 'profiling', false); // In case profiling is enabled, wrap the ProfilerCache around the current cache if (isset($profiling) && $profiling !== false) { - return new Cache\Type\ProfilerCache($cache, $this->profiler); + return new Type\ProfilerCacheDecorator($cache, $this->profiler); } else { return $cache; } diff --git a/src/Core/Cache/Type/APCuCache.php b/src/Core/Cache/Type/APCuCache.php index b473f6803..b315a5cc0 100644 --- a/src/Core/Cache/Type/APCuCache.php +++ b/src/Core/Cache/Type/APCuCache.php @@ -21,28 +21,28 @@ namespace Friendica\Core\Cache\Type; -use Exception; use Friendica\Core\Cache\Enum\Duration; -use Friendica\Core\Cache\IMemoryCache; -use Friendica\Core\Cache\Type\TraitCompareDelete; -use Friendica\Core\Cache\Type\TraitCompareSet; +use Friendica\Core\Cache\Capability\ICanCacheInMemory; use Friendica\Core\Cache\Enum\Type; +use Friendica\Core\Cache\Exception\InvalidCacheDriverException; /** * APCu Cache. */ -class APCuCache extends BaseCache implements IMemoryCache +class APCuCache extends AbstractCache implements ICanCacheInMemory { - use TraitCompareSet; - use TraitCompareDelete; + use CompareSetTrait; + use CompareDeleteTrait; /** - * @throws Exception + * @param string $hostname + * + * @throws InvalidCacheDriverException */ public function __construct(string $hostname) { if (!self::isAvailable()) { - throw new Exception('APCu is not available.'); + throw new InvalidCacheDriverException('APCu is not available.'); } parent::__construct($hostname); @@ -51,9 +51,9 @@ class APCuCache extends BaseCache implements IMemoryCache /** * (@inheritdoc) */ - public function getAllKeys($prefix = null) + public function getAllKeys(?string $prefix = null): array { - $ns = $this->getCacheKey($prefix); + $ns = $this->getCacheKey($prefix ?? ''); $ns = preg_quote($ns, '/'); if (class_exists('\APCIterator')) { @@ -73,12 +73,11 @@ class APCuCache extends BaseCache implements IMemoryCache /** * (@inheritdoc) */ - public function get($key) + public function get(string $key) { - $return = null; - $cachekey = $this->getCacheKey($key); + $cacheKey = $this->getCacheKey($key); - $cached = apcu_fetch($cachekey, $success); + $cached = apcu_fetch($cacheKey, $success); if (!$success) { return null; } @@ -89,30 +88,30 @@ class APCuCache extends BaseCache implements IMemoryCache // We also check if the db entry is a serialized // boolean 'false' value (which we want to return). if ($cached === serialize(false) || $value !== false) { - $return = $value; + return $value; } - return $return; + return null; } /** * (@inheritdoc) */ - public function set($key, $value, $ttl = Duration::FIVE_MINUTES) + public function set(string $key, $value, int $ttl = Duration::FIVE_MINUTES): bool { - $cachekey = $this->getCacheKey($key); + $cacheKey = $this->getCacheKey($key); $cached = serialize($value); if ($ttl > 0) { return apcu_store( - $cachekey, + $cacheKey, $cached, $ttl ); } else { return apcu_store( - $cachekey, + $cacheKey, $cached ); } @@ -121,16 +120,16 @@ class APCuCache extends BaseCache implements IMemoryCache /** * (@inheritdoc) */ - public function delete($key) + public function delete(string $key): bool { - $cachekey = $this->getCacheKey($key); - return apcu_delete($cachekey); + $cacheKey = $this->getCacheKey($key); + return apcu_delete($cacheKey); } /** * (@inheritdoc) */ - public function clear($outdated = true) + public function clear(bool $outdated = true): bool { if ($outdated) { return true; @@ -151,15 +150,15 @@ class APCuCache extends BaseCache implements IMemoryCache /** * (@inheritdoc) */ - public function add($key, $value, $ttl = Duration::FIVE_MINUTES) + public function add(string $key, $value, int $ttl = Duration::FIVE_MINUTES): bool { - $cachekey = $this->getCacheKey($key); - $cached = serialize($value); + $cacheKey = $this->getCacheKey($key); + $cached = serialize($value); - return apcu_add($cachekey, $cached); + return apcu_add($cacheKey, $cached); } - public static function isAvailable() + public static function isAvailable(): bool { if (!extension_loaded('apcu')) { return false; @@ -178,7 +177,7 @@ class APCuCache extends BaseCache implements IMemoryCache /** * {@inheritDoc} */ - public function getName() + public function getName(): string { return Type::APCU; } diff --git a/src/Core/Cache/Type/BaseCache.php b/src/Core/Cache/Type/AbstractCache.php similarity index 81% rename from src/Core/Cache/Type/BaseCache.php rename to src/Core/Cache/Type/AbstractCache.php index a52f1e9ce..f4d2e9232 100644 --- a/src/Core/Cache/Type/BaseCache.php +++ b/src/Core/Cache/Type/AbstractCache.php @@ -21,12 +21,12 @@ namespace Friendica\Core\Cache\Type; -use Friendica\Core\Cache\ICache; +use Friendica\Core\Cache\Capability\ICanCache; /** * Abstract class for common used functions */ -abstract class BaseCache implements ICache +abstract class AbstractCache implements ICanCache { /** * @var string The hostname @@ -42,9 +42,8 @@ abstract class BaseCache implements ICache * Returns the prefix (to avoid namespace conflicts) * * @return string - * @throws \Exception */ - protected function getPrefix() + protected function getPrefix(): string { // We fetch with the hostname as key to avoid problems with other applications return $this->hostName; @@ -52,19 +51,20 @@ abstract class BaseCache implements ICache /** * @param string $key The original key + * * @return string The cache key used for the cache - * @throws \Exception */ - protected function getCacheKey($key) + protected function getCacheKey(string $key): string { return $this->getPrefix() . ":" . $key; } /** - * @param array $keys A list of cached keys - * @return array A list of original keys + * @param string[] $keys A list of cached keys + * + * @return string[] A list of original keys */ - protected function getOriginalKeys($keys) + protected function getOriginalKeys(array $keys): array { if (empty($keys)) { return []; @@ -84,12 +84,12 @@ abstract class BaseCache implements ICache * Filters the keys of an array with a given prefix * Returns the filtered keys as an new array * - * @param array $keys The keys, which should get filtered + * @param string[] $keys The keys, which should get filtered * @param string|null $prefix The prefix (if null, all keys will get returned) * - * @return array The filtered array with just the keys + * @return string[] The filtered array with just the keys */ - protected function filterArrayKeysByPrefix(array $keys, string $prefix = null) + protected function filterArrayKeysByPrefix(array $keys, string $prefix = null): array { if (empty($prefix)) { return $keys; diff --git a/src/Core/Cache/Type/ArrayCache.php b/src/Core/Cache/Type/ArrayCache.php index dd0985a97..879128dee 100644 --- a/src/Core/Cache/Type/ArrayCache.php +++ b/src/Core/Cache/Type/ArrayCache.php @@ -21,25 +21,23 @@ namespace Friendica\Core\Cache\Type; -use Friendica\Core\Cache\Enum\Duration; -use Friendica\Core\Cache\IMemoryCache; -use Friendica\Core\Cache\Type\TraitCompareDelete; -use Friendica\Core\Cache\Enum\Type; +use Friendica\Core\Cache\Capability\ICanCacheInMemory; +use Friendica\Core\Cache\Enum; /** * Implementation of the IMemoryCache mainly for testing purpose */ -class ArrayCache extends BaseCache implements IMemoryCache +class ArrayCache extends AbstractCache implements ICanCacheInMemory { - use TraitCompareDelete; + use CompareDeleteTrait; /** @var array Array with the cached data */ - protected $cachedData = array(); + protected $cachedData = []; /** * (@inheritdoc) */ - public function getAllKeys($prefix = null) + public function getAllKeys(?string $prefix = null): array { return $this->filterArrayKeysByPrefix(array_keys($this->cachedData), $prefix); } @@ -47,7 +45,7 @@ class ArrayCache extends BaseCache implements IMemoryCache /** * (@inheritdoc) */ - public function get($key) + public function get(string $key) { if (isset($this->cachedData[$key])) { return $this->cachedData[$key]; @@ -58,7 +56,7 @@ class ArrayCache extends BaseCache implements IMemoryCache /** * (@inheritdoc) */ - public function set($key, $value, $ttl = Duration::FIVE_MINUTES) + public function set(string $key, $value, int $ttl = Enum\Duration::FIVE_MINUTES): bool { $this->cachedData[$key] = $value; return true; @@ -67,7 +65,7 @@ class ArrayCache extends BaseCache implements IMemoryCache /** * (@inheritdoc) */ - public function delete($key) + public function delete(string $key): bool { unset($this->cachedData[$key]); return true; @@ -76,7 +74,7 @@ class ArrayCache extends BaseCache implements IMemoryCache /** * (@inheritdoc) */ - public function clear($outdated = true) + public function clear(bool $outdated = true): bool { // Array doesn't support TTL so just don't delete something if ($outdated) { @@ -90,7 +88,7 @@ class ArrayCache extends BaseCache implements IMemoryCache /** * (@inheritdoc) */ - public function add($key, $value, $ttl = Duration::FIVE_MINUTES) + public function add(string $key, $value, int $ttl = Enum\Duration::FIVE_MINUTES): bool { if (isset($this->cachedData[$key])) { return false; @@ -102,7 +100,7 @@ class ArrayCache extends BaseCache implements IMemoryCache /** * (@inheritdoc) */ - public function compareSet($key, $oldValue, $newValue, $ttl = Duration::FIVE_MINUTES) + public function compareSet(string $key, $oldValue, $newValue, int $ttl = Enum\Duration::FIVE_MINUTES): bool { if ($this->get($key) === $oldValue) { return $this->set($key, $newValue); @@ -114,8 +112,8 @@ class ArrayCache extends BaseCache implements IMemoryCache /** * {@inheritDoc} */ - public function getName() + public function getName(): string { - return Type::ARRAY; + return Enum\Type::ARRAY; } } diff --git a/src/Core/Cache/Type/TraitCompareDelete.php b/src/Core/Cache/Type/CompareDeleteTrait.php similarity index 70% rename from src/Core/Cache/Type/TraitCompareDelete.php rename to src/Core/Cache/Type/CompareDeleteTrait.php index 487363892..5dffb3080 100644 --- a/src/Core/Cache/Type/TraitCompareDelete.php +++ b/src/Core/Cache/Type/CompareDeleteTrait.php @@ -24,28 +24,28 @@ namespace Friendica\Core\Cache\Type; use Friendica\Core\Cache\Enum\Duration; /** - * Trait TraitCompareSetDelete - * - * This Trait is to compensate non native "exclusive" sets/deletes in caches + * This Trait is to compensate nonnative "exclusive" sets/deletes in caches */ -trait TraitCompareDelete +trait CompareDeleteTrait { - abstract public function get($key); + abstract public function get(string $key); - abstract public function set($key, $value, $ttl = Duration::FIVE_MINUTES); + abstract public function set(string $key, $value, int $ttl = Duration::FIVE_MINUTES); - abstract public function delete($key); + abstract public function delete(string $key); - abstract public function add($key, $value, $ttl = Duration::FIVE_MINUTES); + abstract public function add(string $key, $value, int $ttl = Duration::FIVE_MINUTES); /** * NonNative - Compares if the old value is set and removes it * - * @param string $key The cache key - * @param mixed $value The old value we know and want to delete + * @param string $key The cache key + * @param mixed $value The old value we know and want to delete + * * @return bool */ - public function compareDelete($key, $value) { + public function compareDelete(string $key, $value): bool + { if ($this->add($key . "_lock", true)) { if ($this->get($key) === $value) { $this->delete($key); diff --git a/src/Core/Cache/Type/TraitCompareSet.php b/src/Core/Cache/Type/CompareSetTrait.php similarity index 67% rename from src/Core/Cache/Type/TraitCompareSet.php rename to src/Core/Cache/Type/CompareSetTrait.php index 86aef9290..6f0eeb2c1 100644 --- a/src/Core/Cache/Type/TraitCompareSet.php +++ b/src/Core/Cache/Type/CompareSetTrait.php @@ -24,37 +24,36 @@ namespace Friendica\Core\Cache\Type; use Friendica\Core\Cache\Enum\Duration; /** - * Trait TraitCompareSetDelete - * - * This Trait is to compensate non native "exclusive" sets/deletes in caches + * This Trait is to compensate nonnative "exclusive" sets/deletes in caches */ -trait TraitCompareSet +trait CompareSetTrait { - abstract public function get($key); + abstract public function get(string $key); - abstract public function set($key, $value, $ttl = Duration::FIVE_MINUTES); + abstract public function set(string $key, $value, int $ttl = Duration::FIVE_MINUTES); - abstract public function delete($key); + abstract public function delete(string $key); - abstract public function add($key, $value, $ttl = Duration::FIVE_MINUTES); + abstract public function add(string $key, $value, int $ttl = Duration::FIVE_MINUTES); /** * NonNative - Compares if the old value is set and sets the new value * - * @param string $key The cache key - * @param mixed $oldValue The old value we know from the cache - * @param mixed $newValue The new value we want to set + * @param string $key The cache key + * @param mixed $oldValue The old value we know from the cache + * @param mixed $newValue The new value we want to set * @param int $ttl The cache lifespan, must be one of the Cache constants * * @return bool */ - public function compareSet($key, $oldValue, $newValue, $ttl = Duration::FIVE_MINUTES) { + public function compareSet(string $key, $oldValue, $newValue, int $ttl = Duration::FIVE_MINUTES): bool + { if ($this->add($key . "_lock", true)) { if ($this->get($key) === $oldValue) { $this->set($key, $newValue, $ttl); $this->delete($key . "_lock"); return true; - } else { + } else { $this->delete($key . "_lock"); return false; } diff --git a/src/Core/Cache/Type/DatabaseCache.php b/src/Core/Cache/Type/DatabaseCache.php index a3c83c8df..ef6a30afe 100644 --- a/src/Core/Cache/Type/DatabaseCache.php +++ b/src/Core/Cache/Type/DatabaseCache.php @@ -21,16 +21,16 @@ namespace Friendica\Core\Cache\Type; -use Friendica\Core\Cache\Enum\Duration; -use Friendica\Core\Cache\ICache; -use Friendica\Core\Cache\Enum\Type; +use Friendica\Core\Cache\Capability\ICanCache; +use Friendica\Core\Cache\Enum; +use Friendica\Core\Cache\Exception\CachePersistenceException; use Friendica\Database\Database; use Friendica\Util\DateTimeFormat; /** * Database Cache */ -class DatabaseCache extends BaseCache implements ICache +class DatabaseCache extends AbstractCache implements ICanCache { /** * @var Database @@ -46,22 +46,29 @@ class DatabaseCache extends BaseCache implements ICache /** * (@inheritdoc) + * + * @throws CachePersistenceException */ - public function getAllKeys($prefix = null) + public function getAllKeys(?string $prefix = null): array { - if (empty($prefix)) { - $where = ['`expires` >= ?', DateTimeFormat::utcNow()]; - } else { - $where = ['`expires` >= ? AND `k` LIKE CONCAT(?, \'%\')', DateTimeFormat::utcNow(), $prefix]; - } + try { + if (empty($prefix)) { + $where = ['`expires` >= ?', DateTimeFormat::utcNow()]; + } else { + $where = ['`expires` >= ? AND `k` LIKE CONCAT(?, \'%\')', DateTimeFormat::utcNow(), $prefix]; + } - $stmt = $this->dba->select('cache', ['k'], $where); + $stmt = $this->dba->select('cache', ['k'], $where); - $keys = []; - while ($key = $this->dba->fetch($stmt)) { - array_push($keys, $key['k']); + $keys = []; + while ($key = $this->dba->fetch($stmt)) { + array_push($keys, $key['k']); + } + } catch (\Exception $exception) { + throw new CachePersistenceException(sprintf('Cannot fetch all keys with prefix %s', $prefix), $exception); + } finally { + $this->dba->close($stmt); } - $this->dba->close($stmt); return $keys; } @@ -69,20 +76,26 @@ class DatabaseCache extends BaseCache implements ICache /** * (@inheritdoc) */ - public function get($key) + public function get(string $key) { - $cache = $this->dba->selectFirst('cache', ['v'], ['`k` = ? AND (`expires` >= ? OR `expires` = -1)', $key, DateTimeFormat::utcNow()]); + try { + $cache = $this->dba->selectFirst('cache', ['v'], [ + '`k` = ? AND (`expires` >= ? OR `expires` = -1)', $key, DateTimeFormat::utcNow() + ]); - if ($this->dba->isResult($cache)) { - $cached = $cache['v']; - $value = @unserialize($cached); + if ($this->dba->isResult($cache)) { + $cached = $cache['v']; + $value = @unserialize($cached); - // Only return a value if the serialized value is valid. - // We also check if the db entry is a serialized - // boolean 'false' value (which we want to return). - if ($cached === serialize(false) || $value !== false) { - return $value; + // Only return a value if the serialized value is valid. + // We also check if the db entry is a serialized + // boolean 'false' value (which we want to return). + if ($cached === serialize(false) || $value !== false) { + return $value; + } } + } catch (\Exception $exception) { + throw new CachePersistenceException(sprintf('Cannot get cache entry with key %s', $key), $exception); } return null; @@ -91,50 +104,62 @@ class DatabaseCache extends BaseCache implements ICache /** * (@inheritdoc) */ - public function set($key, $value, $ttl = Duration::FIVE_MINUTES) + public function set(string $key, $value, int $ttl = Enum\Duration::FIVE_MINUTES): bool { - if ($ttl > 0) { - $fields = [ - 'v' => serialize($value), - 'expires' => DateTimeFormat::utc('now + ' . $ttl . 'seconds'), - 'updated' => DateTimeFormat::utcNow() - ]; - } else { - $fields = [ - 'v' => serialize($value), - 'expires' => -1, - 'updated' => DateTimeFormat::utcNow() - ]; + try { + if ($ttl > 0) { + $fields = [ + 'v' => serialize($value), + 'expires' => DateTimeFormat::utc('now + ' . $ttl . 'seconds'), + 'updated' => DateTimeFormat::utcNow() + ]; + } else { + $fields = [ + 'v' => serialize($value), + 'expires' => -1, + 'updated' => DateTimeFormat::utcNow() + ]; + } + + return $this->dba->update('cache', $fields, ['k' => $key], true); + } catch (\Exception $exception) { + throw new CachePersistenceException(sprintf('Cannot set cache entry with key %s', $key), $exception); } - - return $this->dba->update('cache', $fields, ['k' => $key], true); } /** * (@inheritdoc) */ - public function delete($key) + public function delete(string $key): bool { - return $this->dba->delete('cache', ['k' => $key]); + try { + return $this->dba->delete('cache', ['k' => $key]); + } catch (\Exception $exception) { + throw new CachePersistenceException(sprintf('Cannot delete cache entry with key %s', $key), $exception); + } } /** * (@inheritdoc) */ - public function clear($outdated = true) + public function clear(bool $outdated = true): bool { - if ($outdated) { - return $this->dba->delete('cache', ['`expires` < NOW()']); - } else { - return $this->dba->delete('cache', ['`k` IS NOT NULL ']); + try { + if ($outdated) { + return $this->dba->delete('cache', ['`expires` < NOW()']); + } else { + return $this->dba->delete('cache', ['`k` IS NOT NULL ']); + } + } catch (\Exception $exception) { + throw new CachePersistenceException('Cannot clear cache', $exception); } } /** * {@inheritDoc} */ - public function getName() + public function getName(): string { - return Type::DATABASE; + return Enum\Type::DATABASE; } } diff --git a/src/Core/Cache/Type/MemcacheCache.php b/src/Core/Cache/Type/MemcacheCache.php index f991517fc..a8a183daa 100644 --- a/src/Core/Cache/Type/MemcacheCache.php +++ b/src/Core/Cache/Type/MemcacheCache.php @@ -21,24 +21,22 @@ namespace Friendica\Core\Cache\Type; -use Exception; use Friendica\Core\Cache\Enum\Duration; -use Friendica\Core\Cache\IMemoryCache; -use Friendica\Core\Cache\Type\TraitCompareDelete; -use Friendica\Core\Cache\Type\TraitCompareSet; -use Friendica\Core\Cache\Type\TraitMemcacheCommand; +use Friendica\Core\Cache\Capability\ICanCacheInMemory; use Friendica\Core\Cache\Enum\Type; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Cache\Exception\CachePersistenceException; +use Friendica\Core\Cache\Exception\InvalidCacheDriverException; +use Friendica\Core\Config\Capability\IManageConfigValues; use Memcache; /** * Memcache Cache */ -class MemcacheCache extends BaseCache implements IMemoryCache +class MemcacheCache extends AbstractCache implements ICanCacheInMemory { - use TraitCompareSet; - use TraitCompareDelete; - use TraitMemcacheCommand; + use CompareSetTrait; + use CompareDeleteTrait; + use MemcacheCommandTrait; /** * @var Memcache @@ -46,30 +44,34 @@ class MemcacheCache extends BaseCache implements IMemoryCache private $memcache; /** - * @throws Exception + * @param string $hostname + * @param IManageConfigValues $config + * + * @throws InvalidCacheDriverException + * @throws CachePersistenceException */ - public function __construct(string $hostname, IConfig $config) + public function __construct(string $hostname, IManageConfigValues $config) { if (!class_exists('Memcache', false)) { - throw new Exception('Memcache class isn\'t available'); + throw new InvalidCacheDriverException('Memcache class isn\'t available'); } parent::__construct($hostname); $this->memcache = new Memcache(); - $this->server = $config->get('system', 'memcache_host');; - $this->port = $config->get('system', 'memcache_port'); + $this->server = $config->get('system', 'memcache_host'); + $this->port = $config->get('system', 'memcache_port'); if (!@$this->memcache->connect($this->server, $this->port)) { - throw new Exception('Expected Memcache server at ' . $this->server . ':' . $this->port . ' isn\'t available'); + throw new CachePersistenceException('Expected Memcache server at ' . $this->server . ':' . $this->port . ' isn\'t available'); } } /** * (@inheritdoc) */ - public function getAllKeys($prefix = null) + public function getAllKeys(?string $prefix = null): array { $keys = $this->getOriginalKeys($this->getMemcacheKeys()); @@ -79,17 +81,16 @@ class MemcacheCache extends BaseCache implements IMemoryCache /** * (@inheritdoc) */ - public function get($key) + public function get(string $key) { - $return = null; - $cachekey = $this->getCacheKey($key); + $cacheKey = $this->getCacheKey($key); // We fetch with the hostname as key to avoid problems with other applications - $cached = $this->memcache->get($cachekey); + $cached = $this->memcache->get($cacheKey); // @see http://php.net/manual/en/memcache.get.php#84275 if (is_bool($cached) || is_double($cached) || is_long($cached)) { - return $return; + return null; } $value = @unserialize($cached); @@ -98,30 +99,30 @@ class MemcacheCache extends BaseCache implements IMemoryCache // We also check if the db entry is a serialized // boolean 'false' value (which we want to return). if ($cached === serialize(false) || $value !== false) { - $return = $value; + return $value; } - return $return; + return null; } /** * (@inheritdoc) */ - public function set($key, $value, $ttl = Duration::FIVE_MINUTES) + public function set(string $key, $value, int $ttl = Duration::FIVE_MINUTES): bool { - $cachekey = $this->getCacheKey($key); + $cacheKey = $this->getCacheKey($key); // We store with the hostname as key to avoid problems with other applications if ($ttl > 0) { return $this->memcache->set( - $cachekey, + $cacheKey, serialize($value), MEMCACHE_COMPRESSED, time() + $ttl ); } else { return $this->memcache->set( - $cachekey, + $cacheKey, serialize($value), MEMCACHE_COMPRESSED ); @@ -131,16 +132,16 @@ class MemcacheCache extends BaseCache implements IMemoryCache /** * (@inheritdoc) */ - public function delete($key) + public function delete(string $key): bool { - $cachekey = $this->getCacheKey($key); - return $this->memcache->delete($cachekey); + $cacheKey = $this->getCacheKey($key); + return $this->memcache->delete($cacheKey); } /** * (@inheritdoc) */ - public function clear($outdated = true) + public function clear(bool $outdated = true): bool { if ($outdated) { return true; @@ -152,16 +153,16 @@ class MemcacheCache extends BaseCache implements IMemoryCache /** * (@inheritdoc) */ - public function add($key, $value, $ttl = Duration::FIVE_MINUTES) + public function add(string $key, $value, int $ttl = Duration::FIVE_MINUTES): bool { - $cachekey = $this->getCacheKey($key); - return $this->memcache->add($cachekey, serialize($value), MEMCACHE_COMPRESSED, $ttl); + $cacheKey = $this->getCacheKey($key); + return $this->memcache->add($cacheKey, serialize($value), MEMCACHE_COMPRESSED, $ttl); } /** * {@inheritDoc} */ - public function getName() + public function getName(): string { return Type::MEMCACHE; } diff --git a/src/Core/Cache/Type/TraitMemcacheCommand.php b/src/Core/Cache/Type/MemcacheCommandTrait.php similarity index 81% rename from src/Core/Cache/Type/TraitMemcacheCommand.php rename to src/Core/Cache/Type/MemcacheCommandTrait.php index 73495e2de..10315d67b 100644 --- a/src/Core/Cache/Type/TraitMemcacheCommand.php +++ b/src/Core/Cache/Type/MemcacheCommandTrait.php @@ -21,7 +21,7 @@ namespace Friendica\Core\Cache\Type; -use Friendica\Network\HTTPException\InternalServerErrorException; +use Friendica\Core\Cache\Exception\CachePersistenceException; /** * Trait for Memcache to add a custom version of the @@ -29,7 +29,7 @@ use Friendica\Network\HTTPException\InternalServerErrorException; * * Adds the possibility to directly communicate with the memcache too */ -trait TraitMemcacheCommand +trait MemcacheCommandTrait { /** * @var string server address @@ -52,23 +52,19 @@ trait TraitMemcacheCommand * * @return array All keys of the memcache instance * - * @throws InternalServerErrorException + * @throws CachePersistenceException */ - protected function getMemcacheKeys() + protected function getMemcacheKeys(): array { $string = $this->sendMemcacheCommand("stats items"); $lines = explode("\r\n", $string); - $slabs = []; $keys = []; foreach ($lines as $line) { - if (preg_match("/STAT items:([\d]+):number ([\d]+)/", $line, $matches) && - isset($matches[1]) && - !in_array($matches[1], $keys)) { - - $slabs[] = $matches[1]; - $string = $this->sendMemcacheCommand("stats cachedump " . $matches[1] . " " . $matches[2]); + isset($matches[1]) && + !in_array($matches[1], $keys)) { + $string = $this->sendMemcacheCommand("stats cachedump " . $matches[1] . " " . $matches[2]); preg_match_all("/ITEM (.*?) /", $string, $matches); $keys = array_merge($keys, $matches[1]); } @@ -88,20 +84,19 @@ trait TraitMemcacheCommand * * @return string The returned buffer result * - * @throws InternalServerErrorException In case the memcache server isn't available (anymore) + * @throws CachePersistenceException In case the memcache server isn't available (anymore) */ - protected function sendMemcacheCommand(string $command) + protected function sendMemcacheCommand(string $command): string { $s = @fsockopen($this->server, $this->port); if (!$s) { - throw new InternalServerErrorException("Cant connect to:" . $this->server . ':' . $this->port); + throw new CachePersistenceException("Cant connect to:" . $this->server . ':' . $this->port); } fwrite($s, $command . "\r\n"); $buf = ''; while (!feof($s)) { - $buf .= fgets($s, 256); if (strpos($buf, "END\r\n") !== false) { // stat says end diff --git a/src/Core/Cache/Type/MemcachedCache.php b/src/Core/Cache/Type/MemcachedCache.php index ded53ee97..7aff735ce 100644 --- a/src/Core/Cache/Type/MemcachedCache.php +++ b/src/Core/Cache/Type/MemcachedCache.php @@ -21,25 +21,23 @@ namespace Friendica\Core\Cache\Type; -use Exception; use Friendica\Core\Cache\Enum\Duration; -use Friendica\Core\Cache\IMemoryCache; -use Friendica\Core\Cache\Type\TraitCompareDelete; -use Friendica\Core\Cache\Type\TraitCompareSet; -use Friendica\Core\Cache\Type\TraitMemcacheCommand; +use Friendica\Core\Cache\Capability\ICanCacheInMemory; use Friendica\Core\Cache\Enum\Type; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Cache\Exception\CachePersistenceException; +use Friendica\Core\Cache\Exception\InvalidCacheDriverException; +use Friendica\Core\Config\Capability\IManageConfigValues; use Memcached; use Psr\Log\LoggerInterface; /** * Memcached Cache */ -class MemcachedCache extends BaseCache implements IMemoryCache +class MemcachedCache extends AbstractCache implements ICanCacheInMemory { - use TraitCompareSet; - use TraitCompareDelete; - use TraitMemcacheCommand; + use CompareSetTrait; + use CompareDeleteTrait; + use MemcacheCommandTrait; /** * @var \Memcached @@ -58,14 +56,17 @@ class MemcachedCache extends BaseCache implements IMemoryCache * 1 => ... * } * - * @param array $memcached_hosts + * @param string $hostname + * @param IManageConfigValues $config + * @param LoggerInterface $logger * - * @throws \Exception + * @throws InvalidCacheDriverException + * @throws CachePersistenceException */ - public function __construct(string $hostname, IConfig $config, LoggerInterface $logger) + public function __construct(string $hostname, IManageConfigValues $config, LoggerInterface $logger) { if (!class_exists('Memcached', false)) { - throw new Exception('Memcached class isn\'t available'); + throw new InvalidCacheDriverException('Memcached class isn\'t available'); } parent::__construct($hostname); @@ -83,19 +84,19 @@ class MemcachedCache extends BaseCache implements IMemoryCache }); $this->server = $memcached_hosts[0][0] ?? 'localhost'; - $this->port = $memcached_hosts[0][1] ?? 11211; + $this->port = $memcached_hosts[0][1] ?? 11211; $this->memcached->addServers($memcached_hosts); if (count($this->memcached->getServerList()) == 0) { - throw new Exception('Expected Memcached servers aren\'t available, config:' . var_export($memcached_hosts, true)); + throw new CachePersistenceException('Expected Memcached servers aren\'t available, config:' . var_export($memcached_hosts, true)); } } /** * (@inheritdoc) */ - public function getAllKeys($prefix = null) + public function getAllKeys(?string $prefix = null): array { $keys = $this->getOriginalKeys($this->getMemcacheKeys()); @@ -105,40 +106,40 @@ class MemcachedCache extends BaseCache implements IMemoryCache /** * (@inheritdoc) */ - public function get($key) + public function get(string $key) { - $return = null; - $cachekey = $this->getCacheKey($key); + $cacheKey = $this->getCacheKey($key); // We fetch with the hostname as key to avoid problems with other applications - $value = $this->memcached->get($cachekey); + $value = $this->memcached->get($cacheKey); if ($this->memcached->getResultCode() === Memcached::RES_SUCCESS) { - $return = $value; + return $value; + } elseif ($this->memcached->getResultCode() === Memcached::RES_NOTFOUND) { + $this->logger->notice('Try to use unknown key.', ['key' => $key]); + return null; } else { - $this->logger->debug('Memcached \'get\' failed', ['result' => $this->memcached->getResultMessage()]); + throw new CachePersistenceException(sprintf('Cannot get cache entry with key %s', $key), new \MemcachedException($this->memcached->getResultMessage(), $this->memcached->getResultCode())); } - - return $return; } /** * (@inheritdoc) */ - public function set($key, $value, $ttl = Duration::FIVE_MINUTES) + public function set(string $key, $value, int $ttl = Duration::FIVE_MINUTES): bool { - $cachekey = $this->getCacheKey($key); + $cacheKey = $this->getCacheKey($key); // We store with the hostname as key to avoid problems with other applications if ($ttl > 0) { return $this->memcached->set( - $cachekey, + $cacheKey, $value, $ttl ); } else { return $this->memcached->set( - $cachekey, + $cacheKey, $value ); } @@ -147,16 +148,16 @@ class MemcachedCache extends BaseCache implements IMemoryCache /** * (@inheritdoc) */ - public function delete($key) + public function delete(string $key): bool { - $cachekey = $this->getCacheKey($key); - return $this->memcached->delete($cachekey); + $cacheKey = $this->getCacheKey($key); + return $this->memcached->delete($cacheKey); } /** * (@inheritdoc) */ - public function clear($outdated = true) + public function clear(bool $outdated = true): bool { if ($outdated) { return true; @@ -168,16 +169,16 @@ class MemcachedCache extends BaseCache implements IMemoryCache /** * (@inheritdoc) */ - public function add($key, $value, $ttl = Duration::FIVE_MINUTES) + public function add(string $key, $value, int $ttl = Duration::FIVE_MINUTES): bool { - $cachekey = $this->getCacheKey($key); - return $this->memcached->add($cachekey, $value, $ttl); + $cacheKey = $this->getCacheKey($key); + return $this->memcached->add($cacheKey, $value, $ttl); } /** * {@inheritDoc} */ - public function getName() + public function getName(): string { return Type::MEMCACHED; } diff --git a/src/Core/Cache/Type/ProfilerCache.php b/src/Core/Cache/Type/ProfilerCacheDecorator.php similarity index 70% rename from src/Core/Cache/Type/ProfilerCache.php rename to src/Core/Cache/Type/ProfilerCacheDecorator.php index fd003857c..11b1755ed 100644 --- a/src/Core/Cache/Type/ProfilerCache.php +++ b/src/Core/Cache/Type/ProfilerCacheDecorator.php @@ -22,19 +22,19 @@ namespace Friendica\Core\Cache\Type; use Friendica\Core\Cache\Enum\Duration; -use Friendica\Core\Cache\ICache; -use Friendica\Core\Cache\IMemoryCache; +use Friendica\Core\Cache\Capability\ICanCache; +use Friendica\Core\Cache\Capability\ICanCacheInMemory; use Friendica\Util\Profiler; /** - * This class wraps cache driver so they can get profiled - in case the profiler is enabled + * This class wraps cache driver, so they can get profiled - in case the profiler is enabled * - * It is using the decorator pattern (@see + * It is using the decorator pattern (@see https://en.wikipedia.org/wiki/Decorator_pattern ) */ -class ProfilerCache implements ICache, IMemoryCache +class ProfilerCacheDecorator implements ICanCache, ICanCacheInMemory { /** - * @var ICache The original cache driver + * @var ICanCache The original cache driver */ private $cache; @@ -43,7 +43,7 @@ class ProfilerCache implements ICache, IMemoryCache */ private $profiler; - public function __construct(ICache $cache, Profiler $profiler) + public function __construct(ICanCache $cache, Profiler $profiler) { $this->cache = $cache; $this->profiler = $profiler; @@ -52,7 +52,7 @@ class ProfilerCache implements ICache, IMemoryCache /** * {@inheritDoc} */ - public function getAllKeys($prefix = null) + public function getAllKeys(?string $prefix = null): array { $this->profiler->startRecording('cache'); @@ -66,7 +66,7 @@ class ProfilerCache implements ICache, IMemoryCache /** * {@inheritDoc} */ - public function get($key) + public function get(string $key) { $this->profiler->startRecording('cache'); @@ -80,7 +80,7 @@ class ProfilerCache implements ICache, IMemoryCache /** * {@inheritDoc} */ - public function set($key, $value, $ttl = Duration::FIVE_MINUTES) + public function set(string $key, $value, int $ttl = Duration::FIVE_MINUTES): bool { $this->profiler->startRecording('cache'); @@ -94,7 +94,7 @@ class ProfilerCache implements ICache, IMemoryCache /** * {@inheritDoc} */ - public function delete($key) + public function delete(string $key): bool { $this->profiler->startRecording('cache'); @@ -108,7 +108,7 @@ class ProfilerCache implements ICache, IMemoryCache /** * {@inheritDoc} */ - public function clear($outdated = true) + public function clear(bool $outdated = true): bool { $this->profiler->startRecording('cache'); @@ -122,9 +122,9 @@ class ProfilerCache implements ICache, IMemoryCache /** * {@inheritDoc} */ - public function add($key, $value, $ttl = Duration::FIVE_MINUTES) + public function add(string $key, $value, int $ttl = Duration::FIVE_MINUTES): bool { - if ($this->cache instanceof IMemoryCache) { + if ($this->cache instanceof ICanCacheInMemory) { $this->profiler->startRecording('cache'); $return = $this->cache->add($key, $value, $ttl); @@ -140,9 +140,9 @@ class ProfilerCache implements ICache, IMemoryCache /** * {@inheritDoc} */ - public function compareSet($key, $oldValue, $newValue, $ttl = Duration::FIVE_MINUTES) + public function compareSet(string $key, $oldValue, $newValue, int $ttl = Duration::FIVE_MINUTES): bool { - if ($this->cache instanceof IMemoryCache) { + if ($this->cache instanceof ICanCacheInMemory) { $this->profiler->startRecording('cache'); $return = $this->cache->compareSet($key, $oldValue, $newValue, $ttl); @@ -158,9 +158,9 @@ class ProfilerCache implements ICache, IMemoryCache /** * {@inheritDoc} */ - public function compareDelete($key, $value) + public function compareDelete(string $key, $value): bool { - if ($this->cache instanceof IMemoryCache) { + if ($this->cache instanceof ICanCacheInMemory) { $this->profiler->startRecording('cache'); $return = $this->cache->compareDelete($key, $value); @@ -176,7 +176,7 @@ class ProfilerCache implements ICache, IMemoryCache /** * {@inheritDoc} */ - public function GetName() + public function GetName(): string { return $this->cache->getName() . ' (with profiler)'; } diff --git a/src/Core/Cache/Type/RedisCache.php b/src/Core/Cache/Type/RedisCache.php index a4cc41972..494bd83d3 100644 --- a/src/Core/Cache/Type/RedisCache.php +++ b/src/Core/Cache/Type/RedisCache.php @@ -23,15 +23,17 @@ namespace Friendica\Core\Cache\Type; use Exception; use Friendica\Core\Cache\Enum\Duration; -use Friendica\Core\Cache\IMemoryCache; +use Friendica\Core\Cache\Capability\ICanCacheInMemory; use Friendica\Core\Cache\Enum\Type; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Cache\Exception\CachePersistenceException; +use Friendica\Core\Cache\Exception\InvalidCacheDriverException; +use Friendica\Core\Config\Capability\IManageConfigValues; use Redis; /** * Redis Cache. This driver is based on Memcache driver */ -class RedisCache extends BaseCache implements IMemoryCache +class RedisCache extends AbstractCache implements ICanCacheInMemory { /** * @var Redis @@ -39,12 +41,13 @@ class RedisCache extends BaseCache implements IMemoryCache private $redis; /** - * @throws Exception + * @throws InvalidCacheDriverException + * @throws CachePersistenceException */ - public function __construct(string $hostname, IConfig $config) + public function __construct(string $hostname, IManageConfigValues $config) { if (!class_exists('Redis', false)) { - throw new Exception('Redis class isn\'t available'); + throw new InvalidCacheDriverException('Redis class isn\'t available'); } parent::__construct($hostname); @@ -57,24 +60,24 @@ class RedisCache extends BaseCache implements IMemoryCache $redis_db = $config->get('system', 'redis_db', 0); if (isset($redis_port) && !@$this->redis->connect($redis_host, $redis_port)) { - throw new Exception('Expected Redis server at ' . $redis_host . ':' . $redis_port . ' isn\'t available'); + throw new CachePersistenceException('Expected Redis server at ' . $redis_host . ':' . $redis_port . ' isn\'t available'); } elseif (!@$this->redis->connect($redis_host)) { - throw new Exception('Expected Redis server at ' . $redis_host . ' isn\'t available'); + throw new CachePersistenceException('Expected Redis server at ' . $redis_host . ' isn\'t available'); } if (isset($redis_pw) && !$this->redis->auth($redis_pw)) { - throw new Exception('Cannot authenticate redis server at ' . $redis_host . ':' . $redis_port); + throw new CachePersistenceException('Cannot authenticate redis server at ' . $redis_host . ':' . $redis_port); } if ($redis_db !== 0 && !$this->redis->select($redis_db)) { - throw new Exception('Cannot switch to redis db ' . $redis_db . ' at ' . $redis_host . ':' . $redis_port); + throw new CachePersistenceException('Cannot switch to redis db ' . $redis_db . ' at ' . $redis_host . ':' . $redis_port); } } /** * (@inheritdoc) */ - public function getAllKeys($prefix = null) + public function getAllKeys(?string $prefix = null): array { if (empty($prefix)) { $search = '*'; @@ -90,13 +93,13 @@ class RedisCache extends BaseCache implements IMemoryCache /** * (@inheritdoc) */ - public function get($key) + public function get(string $key) { - $return = null; - $cachekey = $this->getCacheKey($key); + $return = null; + $cacheKey = $this->getCacheKey($key); - $cached = $this->redis->get($cachekey); - if ($cached === false && !$this->redis->exists($cachekey)) { + $cached = $this->redis->get($cacheKey); + if ($cached === false && !$this->redis->exists($cacheKey)) { return null; } @@ -115,21 +118,21 @@ class RedisCache extends BaseCache implements IMemoryCache /** * (@inheritdoc) */ - public function set($key, $value, $ttl = Duration::FIVE_MINUTES) + public function set(string $key, $value, int $ttl = Duration::FIVE_MINUTES): bool { - $cachekey = $this->getCacheKey($key); + $cacheKey = $this->getCacheKey($key); $cached = serialize($value); if ($ttl > 0) { return $this->redis->setex( - $cachekey, + $cacheKey, $ttl, $cached ); } else { return $this->redis->set( - $cachekey, + $cacheKey, $cached ); } @@ -138,10 +141,10 @@ class RedisCache extends BaseCache implements IMemoryCache /** * (@inheritdoc) */ - public function delete($key) + public function delete(string $key): bool { - $cachekey = $this->getCacheKey($key); - $this->redis->del($cachekey); + $cacheKey = $this->getCacheKey($key); + $this->redis->del($cacheKey); // Redis doesn't have an error state for del() return true; } @@ -149,7 +152,7 @@ class RedisCache extends BaseCache implements IMemoryCache /** * (@inheritdoc) */ - public function clear($outdated = true) + public function clear(bool $outdated = true): bool { if ($outdated) { return true; @@ -161,34 +164,30 @@ class RedisCache extends BaseCache implements IMemoryCache /** * (@inheritdoc) */ - public function add($key, $value, $ttl = Duration::FIVE_MINUTES) + public function add(string $key, $value, int $ttl = Duration::FIVE_MINUTES): bool { - $cachekey = $this->getCacheKey($key); - $cached = serialize($value); + $cacheKey = $this->getCacheKey($key); + $cached = serialize($value); - return $this->redis->setnx($cachekey, $cached); + return $this->redis->setnx($cacheKey, $cached); } /** * (@inheritdoc) */ - public function compareSet($key, $oldValue, $newValue, $ttl = Duration::FIVE_MINUTES) + public function compareSet(string $key, $oldValue, $newValue, int $ttl = Duration::FIVE_MINUTES): bool { - $cachekey = $this->getCacheKey($key); + $cacheKey = $this->getCacheKey($key); $newCached = serialize($newValue); - $this->redis->watch($cachekey); + $this->redis->watch($cacheKey); // If the old value isn't what we expected, somebody else changed the key meanwhile if ($this->get($key) === $oldValue) { if ($ttl > 0) { - $result = $this->redis->multi() - ->setex($cachekey, $ttl, $newCached) - ->exec(); + $result = $this->redis->multi()->setex($cacheKey, $ttl, $newCached)->exec(); } else { - $result = $this->redis->multi() - ->set($cachekey, $newCached) - ->exec(); + $result = $this->redis->multi()->set($cacheKey, $newCached)->exec(); } return $result !== false; } @@ -199,17 +198,15 @@ class RedisCache extends BaseCache implements IMemoryCache /** * (@inheritdoc) */ - public function compareDelete($key, $value) + public function compareDelete(string $key, $value): bool { - $cachekey = $this->getCacheKey($key); + $cacheKey = $this->getCacheKey($key); - $this->redis->watch($cachekey); + $this->redis->watch($cacheKey); // If the old value isn't what we expected, somebody else changed the key meanwhile if ($this->get($key) === $value) { - $result = $this->redis->multi() - ->del($cachekey) - ->exec(); - return $result !== false; + $this->redis->multi()->del($cacheKey)->exec(); + return true; } $this->redis->unwatch(); return false; @@ -218,7 +215,7 @@ class RedisCache extends BaseCache implements IMemoryCache /** * {@inheritDoc} */ - public function getName() + public function getName(): string { return Type::REDIS; } diff --git a/src/Core/Config/IConfig.php b/src/Core/Config/Capability/IManageConfigValues.php similarity index 66% rename from src/Core/Config/IConfig.php rename to src/Core/Config/Capability/IManageConfigValues.php index 21cee2e92..09e70ba6d 100644 --- a/src/Core/Config/IConfig.php +++ b/src/Core/Config/Capability/IManageConfigValues.php @@ -19,32 +19,35 @@ * */ -namespace Friendica\Core\Config; +namespace Friendica\Core\Config\Capability; -use Friendica\Core\Config\Cache\Cache; +use Friendica\Core\Config\Exception\ConfigPersistenceException; +use Friendica\Core\Config\ValueObject\Cache; /** - * Interface for accessing system wide configurations + * Interface for accessing system-wide configurations */ -interface IConfig +interface IManageConfigValues { - /** * Loads all configuration values of family into a cached storage. * - * All configuration values of the system are stored in the cache ( @param string $cat The category of the configuration value + * All configuration values of the system are stored in the cache. + * + * @param string $cat The category of the configuration value * * @return void + * + * @throws ConfigPersistenceException In case the persistence layer throws errors */ - function load(string $cat = 'config'); + public function load(string $cat = 'config'); /** * Get a particular user's config variable given the category name * ($cat) and a $key. * * Get a particular config value from the given category ($cat) - * and the $key from a cached storage either from the $this->configAdapter - * (@see IConfigAdapter) or from the $this->configCache (@see ConfigCache). + * and the $key from a cached storage either from the database or from the cache. * * @param string $cat The category of the configuration value * @param string $key The configuration key to query @@ -52,8 +55,11 @@ interface IConfig * @param boolean $refresh optional, If true the config is loaded from the db and not from the cache (default: false) * * @return mixed Stored value or null if it does not exist + * + * @throws ConfigPersistenceException In case the persistence layer throws errors + * */ - function get(string $cat, string $key, $default_value = null, bool $refresh = false); + public function get(string $cat, string $key, $default_value = null, bool $refresh = false); /** * Sets a configuration value for system config @@ -67,26 +73,30 @@ interface IConfig * @param mixed $value The value to store * * @return bool Operation success + * + * @throws ConfigPersistenceException In case the persistence layer throws errors */ - function set(string $cat, string $key, $value); + public function set(string $cat, string $key, $value): bool; /** * Deletes the given key from the system configuration. * - * Removes the configured value from the stored cache in $this->configCache - * (@see ConfigCache) and removes it from the database (@see IConfigAdapter). + * Removes the configured value from the stored cache in the cache and removes it from the database. * * @param string $cat The category of the configuration value * @param string $key The configuration key to delete * * @return bool + * + * @throws ConfigPersistenceException In case the persistence layer throws errors + * */ - function delete(string $cat, string $key); + public function delete(string $cat, string $key): bool; /** * Returns the Config Cache * * @return Cache */ - function getCache(); + public function getCache(): Cache; } diff --git a/src/Core/Config/Exception/ConfigFileException.php b/src/Core/Config/Exception/ConfigFileException.php new file mode 100644 index 000000000..e8d6cd657 --- /dev/null +++ b/src/Core/Config/Exception/ConfigFileException.php @@ -0,0 +1,13 @@ +setupCache($configCache, $server); @@ -84,20 +83,19 @@ class ConfigFactory } /** - * @param \Friendica\Core\Config\Cache\Cache $configCache The config cache of this adapter - * @param ConfigModel $configModel The configuration model + * @param Cache $configCache The config cache of this adapter + * @param Repository\Config $configRepo The configuration repository * - * @return Config\IConfig + * @return Capability\IManageConfigValues */ - public function create(Cache $configCache, ConfigModel $configModel) + public function create(Cache $configCache, Repository\Config $configRepo) { if ($configCache->get('system', 'config_adapter') === 'preload') { - $configuration = new Config\Type\PreloadConfig($configCache, $configModel); + $configuration = new Type\PreloadConfig($configCache, $configRepo); } else { - $configuration = new Config\Type\JitConfig($configCache, $configModel); + $configuration = new Type\JitConfig($configCache, $configRepo); } - return $configuration; } } diff --git a/src/Core/Config/Model/Config.php b/src/Core/Config/Repository/Config.php similarity index 52% rename from src/Core/Config/Model/Config.php rename to src/Core/Config/Repository/Config.php index bca2145fb..db03a86d0 100644 --- a/src/Core/Config/Model/Config.php +++ b/src/Core/Config/Repository/Config.php @@ -19,34 +19,35 @@ * */ -namespace Friendica\Core\Config\Model; +namespace Friendica\Core\Config\Repository; +use Friendica\Core\Config\Exception\ConfigPersistenceException; +use Friendica\Core\Config\Util\ValueConversion; use Friendica\Database\Database; /** - * The Config model backend, which is using the general DB-model backend for configs + * The Config Repository, which is using the general DB-model backend for configs */ class Config { /** @var Database */ - protected $dba; + protected $db; - /** - * @param Database $dba The database connection of this model - */ - public function __construct(Database $dba) + public function __construct(Database $db) { - $this->dba = $dba; + $this->db = $db; } + protected static $table_name = 'config'; + /** * Checks if the model is currently connected * * @return bool */ - public function isConnected() + public function isConnected(): bool { - return $this->dba->isConnected(); + return $this->db->isConnected(); } /** @@ -56,29 +57,33 @@ class Config * * @return array The config array * - * @throws \Exception In case DB calls are invalid + * @throws ConfigPersistenceException In case the persistence layer throws errors */ - public function load(string $cat = null) + public function load(?string $cat = null): array { $return = []; - if (empty($cat)) { - $configs = $this->dba->select('config', ['cat', 'v', 'k']); - } else { - $configs = $this->dba->select('config', ['cat', 'v', 'k'], ['cat' => $cat]); - } - - while ($config = $this->dba->fetch($configs)) { - - $key = $config['k']; - $value = DbaUtils::toConfigValue($config['v']); - - // just save it in case it is set - if (isset($value)) { - $return[$config['cat']][$key] = $value; + try { + if (empty($cat)) { + $configs = $this->db->select(static::$table_name, ['cat', 'v', 'k']); + } else { + $configs = $this->db->select(static::$table_name, ['cat', 'v', 'k'], ['cat' => $cat]); } + + while ($config = $this->db->fetch($configs)) { + $key = $config['k']; + $value = ValueConversion::toConfigValue($config['v']); + + // just save it in case it is set + if (isset($value)) { + $return[$config['cat']][$key] = $value; + } + } + } catch (\Exception $exception) { + throw new ConfigPersistenceException(sprintf('Cannot load config category %s', $cat), $exception); + } finally { + $this->db->close($configs); } - $this->dba->close($configs); return $return; } @@ -94,7 +99,7 @@ class Config * * @return array|string|null Stored value or null if it does not exist * - * @throws \Exception In case DB calls are invalid + * @throws ConfigPersistenceException In case the persistence layer throws errors */ public function get(string $cat, string $key) { @@ -102,14 +107,18 @@ class Config return null; } - $config = $this->dba->selectFirst('config', ['v'], ['cat' => $cat, 'k' => $key]); - if ($this->dba->isResult($config)) { - $value = DbaUtils::toConfigValue($config['v']); + try { + $config = $this->db->selectFirst(static::$table_name, ['v'], ['cat' => $cat, 'k' => $key]); + if ($this->db->isResult($config)) { + $value = ValueConversion::toConfigValue($config['v']); - // just return it in case it is set - if (isset($value)) { - return $value; + // just return it in case it is set + if (isset($value)) { + return $value; + } } + } catch (\Exception $exception) { + throw new ConfigPersistenceException(sprintf('Cannot get config with category %s and key %s', $cat, $key), $exception); } return null; @@ -126,9 +135,9 @@ class Config * * @return bool Operation success * - * @throws \Exception In case DB calls are invalid + * @throws ConfigPersistenceException In case the persistence layer throws errors */ - public function set(string $cat, string $key, $value) + public function set(string $cat, string $key, $value): bool { if (!$this->isConnected()) { return false; @@ -144,11 +153,13 @@ class Config return true; } - $dbvalue = DbaUtils::toDbValue($value); + $dbValue = ValueConversion::toDbValue($value); - $result = $this->dba->update('config', ['v' => $dbvalue], ['cat' => $cat, 'k' => $key], true); - - return $result; + try { + return $this->db->update(static::$table_name, ['v' => $dbValue], ['cat' => $cat, 'k' => $key], true); + } catch (\Exception $exception) { + throw new ConfigPersistenceException(sprintf('Cannot set config with category %s and key %s', $cat, $key), $exception); + } } /** @@ -159,14 +170,18 @@ class Config * * @return bool Operation success * - * @throws \Exception In case DB calls are invalid + * @throws ConfigPersistenceException In case the persistence layer throws errors */ - public function delete(string $cat, string $key) + public function delete(string $cat, string $key): bool { if (!$this->isConnected()) { return false; } - return $this->dba->delete('config', ['cat' => $cat, 'k' => $key]); + try { + return $this->db->delete(static::$table_name, ['cat' => $cat, 'k' => $key]); + } catch (\Exception $exception) { + throw new ConfigPersistenceException(sprintf('Cannot delete config with category %s and key %s', $cat, $key), $exception); + } } } diff --git a/src/Core/Config/Type/BaseConfig.php b/src/Core/Config/Type/AbstractConfig.php similarity index 61% rename from src/Core/Config/Type/BaseConfig.php rename to src/Core/Config/Type/AbstractConfig.php index 86a847a7b..782f0e7c5 100644 --- a/src/Core/Config/Type/BaseConfig.php +++ b/src/Core/Config/Type/AbstractConfig.php @@ -21,17 +21,17 @@ namespace Friendica\Core\Config\Type; -use Friendica\Core\Config\Cache\Cache; -use Friendica\Core\Config\IConfig; -use Friendica\Model; +use Friendica\Core\Config\Repository\Config; +use Friendica\Core\Config\ValueObject\Cache; +use Friendica\Core\Config\Capability\IManageConfigValues; /** * This class is responsible for all system-wide configuration values in Friendica * There are two types of storage - * - The Config-Files (loaded into the FileCache @see ConfigCache) - * - The Config-DB-Table (per Config-DB-model @see Model\Config\Config) + * - The Config-Files (loaded into the FileCache @see Cache) + * - The Config-Repository (per Config-Repository @see Config ) */ -abstract class BaseConfig implements IConfig +abstract class AbstractConfig implements IManageConfigValues { /** * @var Cache @@ -39,24 +39,24 @@ abstract class BaseConfig implements IConfig protected $configCache; /** - * @var \Friendica\Core\Config\Model\Config + * @var Config */ - protected $configModel; + protected $configRepo; /** - * @param Cache $configCache The configuration cache (based on the config-files) - * @param \Friendica\Core\Config\Model\Config $configModel The configuration model + * @param Cache $configCache The configuration cache (based on the config-files) + * @param Config $configRepo The configuration repository */ - public function __construct(Cache $configCache, \Friendica\Core\Config\Model\Config $configModel) + public function __construct(Cache $configCache, Config $configRepo) { $this->configCache = $configCache; - $this->configModel = $configModel; + $this->configRepo = $configRepo; } /** * {@inheritDoc} */ - public function getCache() + public function getCache(): Cache { return $this->configCache; } diff --git a/src/Core/Config/Type/JitConfig.php b/src/Core/Config/Type/JitConfig.php index 5e1fe24c4..b9b897f95 100644 --- a/src/Core/Config/Type/JitConfig.php +++ b/src/Core/Config/Type/JitConfig.php @@ -21,8 +21,8 @@ namespace Friendica\Core\Config\Type; -use Friendica\Core\Config\Cache\Cache; -use Friendica\Core\Config\Model\Config; +use Friendica\Core\Config\ValueObject\Cache; +use Friendica\Core\Config\Repository\Config; /** * This class implements the Just-In-Time configuration, which will cache @@ -31,7 +31,7 @@ use Friendica\Core\Config\Model\Config; * Default Configuration type. * Provides the best performance for pages loading few configuration variables. */ -class JitConfig extends BaseConfig +class JitConfig extends AbstractConfig { /** * @var array Array of already loaded db values (even if there was no value) @@ -39,12 +39,12 @@ class JitConfig extends BaseConfig private $db_loaded; /** - * @param Cache $configCache The configuration cache (based on the config-files) - * @param Config $configModel The configuration model + * @param Cache $configCache The configuration cache (based on the config-files) + * @param Config $configRepo The configuration model */ - public function __construct(Cache $configCache, Config $configModel) + public function __construct(Cache $configCache, Config $configRepo) { - parent::__construct($configCache, $configModel); + parent::__construct($configCache, $configRepo); $this->db_loaded = []; $this->load(); @@ -52,16 +52,15 @@ class JitConfig extends BaseConfig /** * {@inheritDoc} - * */ public function load(string $cat = 'config') { // If not connected, do nothing - if (!$this->configModel->isConnected()) { + if (!$this->configRepo->isConnected()) { return; } - $config = $this->configModel->load($cat); + $config = $this->configRepo->load($cat); if (!empty($config[$cat])) { foreach ($config[$cat] as $key => $value) { @@ -79,15 +78,14 @@ class JitConfig extends BaseConfig public function get(string $cat, string $key, $default_value = null, bool $refresh = false) { // if the value isn't loaded or refresh is needed, load it to the cache - if ($this->configModel->isConnected() && - (empty($this->db_loaded[$cat][$key]) || - $refresh)) { + if ($this->configRepo->isConnected() && + (empty($this->db_loaded[$cat][$key]) || + $refresh)) { + $dbValue = $this->configRepo->get($cat, $key); - $dbvalue = $this->configModel->get($cat, $key); - - if (isset($dbvalue)) { - $this->configCache->set($cat, $key, $dbvalue, Cache::SOURCE_DB); - unset($dbvalue); + if (isset($dbValue)) { + $this->configCache->set($cat, $key, $dbValue, Cache::SOURCE_DB); + unset($dbValue); } $this->db_loaded[$cat][$key] = true; @@ -102,17 +100,17 @@ class JitConfig extends BaseConfig /** * {@inheritDoc} */ - public function set(string $cat, string $key, $value) + public function set(string $cat, string $key, $value): bool { // set the cache first $cached = $this->configCache->set($cat, $key, $value, Cache::SOURCE_DB); // If there is no connected adapter, we're finished - if (!$this->configModel->isConnected()) { + if (!$this->configRepo->isConnected()) { return $cached; } - $stored = $this->configModel->set($cat, $key, $value); + $stored = $this->configRepo->set($cat, $key, $value); $this->db_loaded[$cat][$key] = $stored; @@ -122,7 +120,7 @@ class JitConfig extends BaseConfig /** * {@inheritDoc} */ - public function delete(string $cat, string $key) + public function delete(string $cat, string $key): bool { $cacheRemoved = $this->configCache->delete($cat, $key); @@ -130,11 +128,11 @@ class JitConfig extends BaseConfig unset($this->db_loaded[$cat][$key]); } - if (!$this->configModel->isConnected()) { + if (!$this->configRepo->isConnected()) { return $cacheRemoved; } - $storeRemoved = $this->configModel->delete($cat, $key); + $storeRemoved = $this->configRepo->delete($cat, $key); return $cacheRemoved || $storeRemoved; } diff --git a/src/Core/Config/Type/PreloadConfig.php b/src/Core/Config/Type/PreloadConfig.php index c6abfcd9f..ed1b9a302 100644 --- a/src/Core/Config/Type/PreloadConfig.php +++ b/src/Core/Config/Type/PreloadConfig.php @@ -21,8 +21,8 @@ namespace Friendica\Core\Config\Type; -use Friendica\Core\Config\Cache\Cache; -use Friendica\Core\Config\Model\Config; +use Friendica\Core\Config\ValueObject\Cache; +use Friendica\Core\Config\Repository\Config; /** * This class implements the preload configuration, which will cache @@ -30,18 +30,18 @@ use Friendica\Core\Config\Model\Config; * * Minimizes the number of database queries to retrieve configuration values at the cost of memory. */ -class PreloadConfig extends BaseConfig +class PreloadConfig extends AbstractConfig { /** @var bool */ private $config_loaded; /** - * @param Cache $configCache The configuration cache (based on the config-files) - * @param Config $configModel The configuration model + * @param Cache $configCache The configuration cache (based on the config-files) + * @param Config $configRepo The configuration model */ - public function __construct(Cache $configCache, Config $configModel) + public function __construct(Cache $configCache, Config $configRepo) { - parent::__construct($configCache, $configModel); + parent::__construct($configCache, $configRepo); $this->config_loaded = false; $this->load(); @@ -51,7 +51,6 @@ class PreloadConfig extends BaseConfig * {@inheritDoc} * * This loads all config values everytime load is called - * */ public function load(string $cat = 'config') { @@ -61,11 +60,11 @@ class PreloadConfig extends BaseConfig } // If not connected, do nothing - if (!$this->configModel->isConnected()) { + if (!$this->configRepo->isConnected()) { return; } - $config = $this->configModel->load(); + $config = $this->configRepo->load(); $this->config_loaded = true; // load the whole category out of the DB into the cache @@ -78,8 +77,8 @@ class PreloadConfig extends BaseConfig public function get(string $cat, string $key, $default_value = null, bool $refresh = false) { if ($refresh) { - if ($this->configModel->isConnected()) { - $config = $this->configModel->get($cat, $key); + if ($this->configRepo->isConnected()) { + $config = $this->configRepo->get($cat, $key); if (isset($config)) { $this->configCache->set($cat, $key, $config, Cache::SOURCE_DB); } @@ -95,7 +94,7 @@ class PreloadConfig extends BaseConfig /** * {@inheritDoc} */ - public function set(string $cat, string $key, $value) + public function set(string $cat, string $key, $value): bool { if (!$this->config_loaded) { $this->load(); @@ -105,11 +104,11 @@ class PreloadConfig extends BaseConfig $cached = $this->configCache->set($cat, $key, $value, Cache::SOURCE_DB); // If there is no connected adapter, we're finished - if (!$this->configModel->isConnected()) { + if (!$this->configRepo->isConnected()) { return $cached; } - $stored = $this->configModel->set($cat, $key, $value); + $stored = $this->configRepo->set($cat, $key, $value); return $cached && $stored; } @@ -117,7 +116,7 @@ class PreloadConfig extends BaseConfig /** * {@inheritDoc} */ - public function delete(string $cat, string $key) + public function delete(string $cat, string $key): bool { if ($this->config_loaded) { $this->load(); @@ -125,26 +124,12 @@ class PreloadConfig extends BaseConfig $cacheRemoved = $this->configCache->delete($cat, $key); - if (!$this->configModel->isConnected()) { + if (!$this->configRepo->isConnected()) { return $cacheRemoved; } - $storeRemoved = $this->configModel->delete($cat, $key); + $storeRemoved = $this->configRepo->delete($cat, $key); return $cacheRemoved || $storeRemoved; } - - public function testSetDouble() - { - $this->configModel->shouldReceive('isConnected') - ->andReturn(true); - - // constructor loading - $this->configModel->shouldReceive('load') - ->with('config') - ->andReturn(['config' => ['test' => 'it']]) - ->once(); - - parent::testSetDouble(); - } } diff --git a/src/Core/Config/Cache/ConfigFileLoader.php b/src/Core/Config/Util/ConfigFileLoader.php similarity index 86% rename from src/Core/Config/Cache/ConfigFileLoader.php rename to src/Core/Config/Util/ConfigFileLoader.php index 4b1a09c1d..7740ec326 100644 --- a/src/Core/Config/Cache/ConfigFileLoader.php +++ b/src/Core/Config/Util/ConfigFileLoader.php @@ -19,11 +19,11 @@ * */ -namespace Friendica\Core\Config\Cache; +namespace Friendica\Core\Config\Util; -use Exception; use Friendica\Core\Addon; -use Friendica\Core\Config\Cache\Cache; +use Friendica\Core\Config\Exception\ConfigFileException; +use Friendica\Core\Config\ValueObject\Cache; /** * The ConfigFileLoader loads config-files and stores them in a ConfigCache ( @see Cache ) @@ -91,7 +91,7 @@ class ConfigFileLoader * @param array $server The $_SERVER array * @param bool $raw Setup the raw config format * - * @throws Exception + * @throws ConfigFileException */ public function setupCache(Cache $config, array $server = [], bool $raw = false) { @@ -122,9 +122,9 @@ class ConfigFileLoader * * @return array The config array (empty if no config found) * - * @throws Exception if the configuration file isn't readable + * @throws ConfigFileException if the configuration file isn't readable */ - private function loadStaticConfig($name) + private function loadStaticConfig(string $name): array { $configName = $this->staticDir . DIRECTORY_SEPARATOR . $name . '.config.php'; $iniName = $this->staticDir . DIRECTORY_SEPARATOR . $name . '.ini.php'; @@ -143,9 +143,7 @@ class ConfigFileLoader * * @param Cache $config The Config cache * - * @return array The config array (empty if no config found) - * - * @throws Exception if the configuration file isn't readable + * @throws ConfigFileException if the configuration file isn't readable */ private function loadCoreConfig(Cache $config) { @@ -158,8 +156,6 @@ class ConfigFileLoader foreach ($this->getConfigFiles() as $configFile) { $config->load($this->loadConfigFile($configFile), Cache::SOURCE_FILE); } - - return []; } /** @@ -169,15 +165,15 @@ class ConfigFileLoader * * @return array The config array (empty if no config found) * - * @throws Exception if the configuration file isn't readable + * @throws ConfigFileException if the configuration file isn't readable */ - public function loadAddonConfig($name) + public function loadAddonConfig(string $name): array { $filepath = $this->baseDir . DIRECTORY_SEPARATOR . // /var/www/html/ - Addon::DIRECTORY . DIRECTORY_SEPARATOR . // addon/ - $name . DIRECTORY_SEPARATOR . // openstreetmap/ - 'config'. DIRECTORY_SEPARATOR . // config/ - $name . ".config.php"; // openstreetmap.config.php + Addon::DIRECTORY . DIRECTORY_SEPARATOR . // addon/ + $name . DIRECTORY_SEPARATOR . // openstreetmap/ + 'config'. DIRECTORY_SEPARATOR . // config/ + $name . ".config.php"; // openstreetmap.config.php if (file_exists($filepath)) { return $this->loadConfigFile($filepath); @@ -193,9 +189,9 @@ class ConfigFileLoader * * @return array The config array (empty if no config was found) * - * @throws Exception if the configuration file isn't readable + * @throws ConfigFileException if the configuration file isn't readable */ - public function loadEnvConfig(array $server) + public function loadEnvConfig(array $server): array { $filepath = $this->staticDir . DIRECTORY_SEPARATOR . // /var/www/html/static/ "env.config.php"; // env.config.php @@ -224,10 +220,10 @@ class ConfigFileLoader * * @return array */ - private function getConfigFiles(bool $ini = false) + private function getConfigFiles(bool $ini = false): array { $files = scandir($this->configDir); - $found = array(); + $found = []; $filePattern = ($ini ? '*.ini.php' : '*.config.php'); @@ -252,7 +248,7 @@ class ConfigFileLoader * * @deprecated since version 2018.09 */ - private function loadLegacyConfig($name = '') + private function loadLegacyConfig(string $name = ''): array { $name = !empty($name) ? $name : self::CONFIG_HTCONFIG; $fullName = $this->baseDir . DIRECTORY_SEPARATOR . '.' . $name . '.php'; @@ -322,17 +318,17 @@ class ConfigFileLoader * @param string $filepath * * @return array The configuration array - * @throws Exception + * @throws ConfigFileException * @deprecated since version 2018.12 */ - private function loadINIConfigFile($filepath) + private function loadINIConfigFile(string $filepath): array { $contents = include($filepath); $config = parse_ini_string($contents, true, INI_SCANNER_TYPED); if ($config === false) { - throw new Exception('Error parsing INI config file ' . $filepath); + throw new ConfigFileException('Error parsing INI config file ' . $filepath); } return $config; @@ -353,14 +349,14 @@ class ConfigFileLoader * * @return array The config array0 * - * @throws Exception if the config cannot get loaded. + * @throws ConfigFileException if the config cannot get loaded. */ - private function loadConfigFile($filepath) + private function loadConfigFile(string $filepath): array { $config = include($filepath); if (!is_array($config)) { - throw new Exception('Error loading config file ' . $filepath); + throw new ConfigFileException('Error loading config file ' . $filepath); } return $config; diff --git a/src/Core/Config/Model/DbaUtils.php b/src/Core/Config/Util/ValueConversion.php similarity index 82% rename from src/Core/Config/Model/DbaUtils.php rename to src/Core/Config/Util/ValueConversion.php index da2b89737..a3cdf7ca2 100644 --- a/src/Core/Config/Model/DbaUtils.php +++ b/src/Core/Config/Util/ValueConversion.php @@ -1,8 +1,11 @@ config[$cat][$key])) { return $this->config[$cat][$key]; - } else if (!isset($key) && isset($this->config[$cat])) { + } elseif (!isset($key) && isset($this->config[$cat])) { return $this->config[$cat]; } else { return null; @@ -122,7 +123,7 @@ class Cache * * @return bool True, if the value is set */ - public function set(string $cat, string $key, $value, $source = self::SOURCE_DEFAULT) + public function set(string $cat, string $key, $value, int $source = self::SOURCE_DEFAULT): bool { if (!isset($this->config[$cat])) { $this->config[$cat] = []; @@ -155,7 +156,7 @@ class Cache * * @return bool true, if deleted */ - public function delete(string $cat, string $key) + public function delete(string $cat, string $key): bool { if (isset($this->config[$cat][$key])) { unset($this->config[$cat][$key]); @@ -173,9 +174,9 @@ class Cache /** * Returns the whole configuration * - * @return array The configuration + * @return string[][] The configuration */ - public function getAll() + public function getAll(): array { return $this->config; } @@ -183,11 +184,11 @@ class Cache /** * Returns an array with missing categories/Keys * - * @param array $config The array to check + * @param string[][] $config The array to check * - * @return array + * @return string[][] */ - public function keyDiff(array $config) + public function keyDiff(array $config): array { $return = []; diff --git a/src/Core/Installer.php b/src/Core/Installer.php index fc0da6cbe..96e73b993 100644 --- a/src/Core/Installer.php +++ b/src/Core/Installer.php @@ -23,7 +23,7 @@ namespace Friendica\Core; use DOMDocument; use Exception; -use Friendica\Core\Config\Cache\Cache; +use Friendica\Core\Config\ValueObject\Cache; use Friendica\Database\Database; use Friendica\Database\DBStructure; use Friendica\DI; @@ -678,8 +678,8 @@ class Installer /** * Setup the default cache for a new installation * - * @param \Friendica\Core\Config\Cache\Cache $configCache The configuration cache - * @param string $basePath The determined basepath + * @param \Friendica\Core\Config\ValueObject\Cache $configCache The configuration cache + * @param string $basePath The determined basepath * * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ diff --git a/src/Core/L10n.php b/src/Core/L10n.php index 2a2988341..aca57793c 100644 --- a/src/Core/L10n.php +++ b/src/Core/L10n.php @@ -21,8 +21,8 @@ namespace Friendica\Core; -use Friendica\Core\Config\IConfig; -use Friendica\Core\Session\ISession; +use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\Session\Capability\IHandleSessions; use Friendica\Database\Database; use Friendica\Util\Strings; use Psr\Log\LoggerInterface; @@ -62,7 +62,7 @@ class L10n */ private $logger; - public function __construct(IConfig $config, Database $dba, LoggerInterface $logger, ISession $session, array $server, array $get) + public function __construct(IManageConfigValues $config, Database $dba, LoggerInterface $logger, IHandleSessions $session, array $server, array $get) { $this->dba = $dba; $this->logger = $logger; @@ -85,7 +85,7 @@ class L10n /** * Sets the language session variable */ - private function setSessionVariable(ISession $session) + private function setSessionVariable(IHandleSessions $session) { if ($session->get('authenticated') && !$session->get('language')) { $session->set('language', $this->lang); @@ -103,7 +103,7 @@ class L10n } } - private function setLangFromSession(ISession $session) + private function setLangFromSession(IHandleSessions $session) { if ($session->get('language') !== $this->lang) { $this->loadTranslationTable($session->get('language')); diff --git a/src/Core/Lock/ILock.php b/src/Core/Lock/Capability/ICanLock.php similarity index 62% rename from src/Core/Lock/ILock.php rename to src/Core/Lock/Capability/ICanLock.php index 35e21305e..1029e2b96 100644 --- a/src/Core/Lock/ILock.php +++ b/src/Core/Lock/Capability/ICanLock.php @@ -19,23 +19,22 @@ * */ -namespace Friendica\Core\Lock; +namespace Friendica\Core\Lock\Capability; use Friendica\Core\Cache\Enum\Duration; +use Friendica\Core\Lock\Exception\LockPersistenceException; /** * Lock Interface */ -interface ILock +interface ICanLock { /** * Checks, if a key is currently locked to a or my process * * @param string $key The name of the lock - * - * @return bool */ - public function isLocked($key); + public function isLocked(string $key): bool; /** * @@ -45,9 +44,9 @@ interface ILock * @param integer $timeout Seconds until we give up * @param integer $ttl Seconds The lock lifespan, must be one of the Cache constants * - * @return boolean Was the lock successful? + * @throws LockPersistenceException In case the underlying persistence throws errors */ - public function acquire($key, $timeout = 120, $ttl = Duration::FIVE_MINUTES); + public function acquire(string $key, int $timeout = 120, int $ttl = Duration::FIVE_MINUTES): bool; /** * Releases a lock if it was set by us @@ -55,32 +54,36 @@ interface ILock * @param string $key The Name of the lock * @param bool $override Overrides the lock to get released * - * @return boolean Was the unlock successful? + * @return bool Was the unlock successful? + * + * @throws LockPersistenceException In case the underlying persistence throws errors */ - public function release($key, $override = false); + public function release(string $key, bool $override = false): bool; /** * Releases all lock that were set by us * * @param bool $override Override to release all locks * - * @return boolean Was the unlock of all locks successful? + * @return bool Was the unlock of all locks successful? + * + * @throws LockPersistenceException In case the underlying persistence throws errors */ - public function releaseAll($override = false); + public function releaseAll(bool $override = false): bool; /** * Returns the name of the current lock - * - * @return string */ - public function getName(); + public function getName(): string; /** * Lists all locks * * @param string prefix optional a prefix to search * - * @return array Empty if it isn't supported by the cache driver + * @return string[] Empty if it isn't supported by the cache driver + * + * @throws LockPersistenceException In case the underlying persistence throws errors */ - public function getLocks(string $prefix = ''); + public function getLocks(string $prefix = ''): array; } diff --git a/src/Core/Lock/Exception/InvalidLockDriverException.php b/src/Core/Lock/Exception/InvalidLockDriverException.php new file mode 100644 index 000000000..38f2399bf --- /dev/null +++ b/src/Core/Lock/Exception/InvalidLockDriverException.php @@ -0,0 +1,13 @@ +cacheFactory = $cacheFactory; $this->config = $config; @@ -77,24 +78,24 @@ class LockFactory try { switch ($lock_type) { - case Type::MEMCACHE: - case Type::MEMCACHED: - case Type::REDIS: - case Type::APCU: + case Enum\Type::MEMCACHE: + case Enum\Type::MEMCACHED: + case Enum\Type::REDIS: + case Enum\Type::APCU: $cache = $this->cacheFactory->create($lock_type); - if ($cache instanceof IMemoryCache) { - return new Lock\Type\CacheLock($cache); + if ($cache instanceof ICanCacheInMemory) { + return new Type\CacheLock($cache); } else { throw new \Exception(sprintf('Incompatible cache driver \'%s\' for lock used', $lock_type)); } break; case 'database': - return new Lock\Type\DatabaseLock($this->dba); + return new Type\DatabaseLock($this->dba); break; case 'semaphore': - return new Lock\Type\SemaphoreLock(); + return new Type\SemaphoreLock(); break; default: @@ -114,14 +115,14 @@ class LockFactory * 2. Cache Locking * 3. Database Locking * - * @return Lock\ILock + * @return ICanLock */ private function useAutoDriver() { // 1. Try to use Semaphores for - local - locking if (function_exists('sem_get')) { try { - return new Lock\Type\SemaphoreLock(); + return new Type\SemaphoreLock(); } catch (\Exception $exception) { $this->logger->warning('Using Semaphore driver for locking failed.', ['exception' => $exception]); } @@ -129,11 +130,11 @@ class LockFactory // 2. Try to use Cache Locking (don't use the DB-Cache Locking because it works different!) $cache_type = $this->config->get('system', 'cache_driver', 'database'); - if ($cache_type != Type::DATABASE) { + if ($cache_type != Enum\Type::DATABASE) { try { $cache = $this->cacheFactory->create($cache_type); - if ($cache instanceof IMemoryCache) { - return new Lock\Type\CacheLock($cache); + if ($cache instanceof ICanCacheInMemory) { + return new Type\CacheLock($cache); } } catch (\Exception $exception) { $this->logger->warning('Using Cache driver for locking failed.', ['exception' => $exception]); @@ -141,6 +142,6 @@ class LockFactory } // 3. Use Database Locking as a Fallback - return new Lock\Type\DatabaseLock($this->dba); + return new Type\DatabaseLock($this->dba); } } diff --git a/src/Core/Lock/Type/BaseLock.php b/src/Core/Lock/Type/AbstractLock.php similarity index 85% rename from src/Core/Lock/Type/BaseLock.php rename to src/Core/Lock/Type/AbstractLock.php index 518475b44..fc9c57a54 100644 --- a/src/Core/Lock/Type/BaseLock.php +++ b/src/Core/Lock/Type/AbstractLock.php @@ -21,12 +21,12 @@ namespace Friendica\Core\Lock\Type; -use Friendica\Core\Lock\ILock; +use Friendica\Core\Lock\Capability\ICanLock; /** * Basic class for Locking with common functions (local acquired locks, releaseAll, ..) */ -abstract class BaseLock implements ILock +abstract class AbstractLock implements ICanLock { /** * @var array The local acquired locks @@ -40,7 +40,7 @@ abstract class BaseLock implements ILock * * @return bool Returns true if the lock is set */ - protected function hasAcquiredLock($key) + protected function hasAcquiredLock(string $key): bool { return isset($this->acquireLock[$key]) && $this->acquiredLocks[$key] === true; } @@ -50,7 +50,7 @@ abstract class BaseLock implements ILock * * @param string $key The Name of the lock */ - protected function markAcquire($key) + protected function markAcquire(string $key) { $this->acquiredLocks[$key] = true; } @@ -60,7 +60,7 @@ abstract class BaseLock implements ILock * * @param string $key The Name of the lock */ - protected function markRelease($key) + protected function markRelease(string $key) { unset($this->acquiredLocks[$key]); } @@ -68,7 +68,7 @@ abstract class BaseLock implements ILock /** * {@inheritDoc} */ - public function releaseAll($override = false) + public function releaseAll(bool $override = false): bool { $return = true; diff --git a/src/Core/Lock/Type/CacheLock.php b/src/Core/Lock/Type/CacheLock.php index 8a85f0765..d3032c402 100644 --- a/src/Core/Lock/Type/CacheLock.php +++ b/src/Core/Lock/Type/CacheLock.php @@ -21,10 +21,13 @@ namespace Friendica\Core\Lock\Type; +use Friendica\Core\Cache\Capability\ICanCache; +use Friendica\Core\Cache\Capability\ICanCacheInMemory; use Friendica\Core\Cache\Enum\Duration; -use Friendica\Core\Cache\IMemoryCache; +use Friendica\Core\Cache\Exception\CachePersistenceException; +use Friendica\Core\Lock\Exception\LockPersistenceException; -class CacheLock extends BaseLock +class CacheLock extends AbstractLock { /** * @var string The static prefix of all locks inside the cache @@ -32,16 +35,16 @@ class CacheLock extends BaseLock const CACHE_PREFIX = 'lock:'; /** - * @var \Friendica\Core\Cache\ICache; + * @var ICanCache; */ private $cache; /** * CacheLock constructor. * - * @param IMemoryCache $cache The CacheDriver for this type of lock + * @param ICanCacheInMemory $cache The CacheDriver for this type of lock */ - public function __construct(IMemoryCache $cache) + public function __construct(ICanCacheInMemory $cache) { $this->cache = $cache; } @@ -49,35 +52,39 @@ class CacheLock extends BaseLock /** * (@inheritdoc) */ - public function acquire($key, $timeout = 120, $ttl = Duration::FIVE_MINUTES) + public function acquire(string $key, int $timeout = 120, int $ttl = Duration::FIVE_MINUTES): bool { $got_lock = false; $start = time(); - $cachekey = self::getLockKey($key); + $lockKey = self::getLockKey($key); - do { - $lock = $this->cache->get($cachekey); - // When we do want to lock something that was already locked by us. - if ((int)$lock == getmypid()) { - $got_lock = true; - } - - // When we do want to lock something new - if (is_null($lock)) { - // At first initialize it with "0" - $this->cache->add($cachekey, 0); - // Now the value has to be "0" because otherwise the key was used by another process meanwhile - if ($this->cache->compareSet($cachekey, 0, getmypid(), $ttl)) { + try { + do { + $lock = $this->cache->get($lockKey); + // When we do want to lock something that was already locked by us. + if ((int)$lock == getmypid()) { $got_lock = true; - $this->markAcquire($key); } - } - if (!$got_lock && ($timeout > 0)) { - usleep(rand(10000, 200000)); - } - } while (!$got_lock && ((time() - $start) < $timeout)); + // When we do want to lock something new + if (is_null($lock)) { + // At first initialize it with "0" + $this->cache->add($lockKey, 0); + // Now the value has to be "0" because otherwise the key was used by another process meanwhile + if ($this->cache->compareSet($lockKey, 0, getmypid(), $ttl)) { + $got_lock = true; + $this->markAcquire($key); + } + } + + if (!$got_lock && ($timeout > 0)) { + usleep(rand(10000, 200000)); + } + } while (!$got_lock && ((time() - $start) < $timeout)); + } catch (CachePersistenceException $exception) { + throw new LockPersistenceException(sprintf('Cannot acquire lock for key %s', $key), $exception); + } return $got_lock; } @@ -85,14 +92,18 @@ class CacheLock extends BaseLock /** * (@inheritdoc) */ - public function release($key, $override = false) + public function release(string $key, bool $override = false): bool { - $cachekey = self::getLockKey($key); + $lockKey = self::getLockKey($key); - if ($override) { - $return = $this->cache->delete($cachekey); - } else { - $return = $this->cache->compareDelete($cachekey, getmypid()); + try { + if ($override) { + $return = $this->cache->delete($lockKey); + } else { + $return = $this->cache->compareDelete($lockKey, getmypid()); + } + } catch (CachePersistenceException $exception) { + throw new LockPersistenceException(sprintf('Cannot release lock for key %s (override %b)', $key, $override), $exception); } $this->markRelease($key); @@ -102,17 +113,21 @@ class CacheLock extends BaseLock /** * (@inheritdoc) */ - public function isLocked($key) + public function isLocked(string $key): bool { - $cachekey = self::getLockKey($key); - $lock = $this->cache->get($cachekey); + $lockKey = self::getLockKey($key); + try { + $lock = $this->cache->get($lockKey); + } catch (CachePersistenceException $exception) { + throw new LockPersistenceException(sprintf('Cannot check lock state for key %s', $key), $exception); + } return isset($lock) && ($lock !== false); } /** * {@inheritDoc} */ - public function getName() + public function getName(): string { return $this->cache->getName(); } @@ -120,11 +135,15 @@ class CacheLock extends BaseLock /** * {@inheritDoc} */ - public function getLocks(string $prefix = '') + public function getLocks(string $prefix = ''): array { - $locks = $this->cache->getAllKeys(self::CACHE_PREFIX . $prefix); + try { + $locks = $this->cache->getAllKeys(self::CACHE_PREFIX . $prefix); + } catch (CachePersistenceException $exception) { + throw new LockPersistenceException(sprintf('Cannot get locks with prefix %s', $prefix), $exception); + } - array_walk($locks, function (&$lock, $key) { + array_walk($locks, function (&$lock) { $lock = substr($lock, strlen(self::CACHE_PREFIX)); }); @@ -134,7 +153,7 @@ class CacheLock extends BaseLock /** * {@inheritDoc} */ - public function releaseAll($override = false) + public function releaseAll(bool $override = false): bool { $success = parent::releaseAll($override); @@ -154,7 +173,7 @@ class CacheLock extends BaseLock * * @return string The cache key used for the cache */ - private static function getLockKey($key) + private static function getLockKey(string $key): string { return self::CACHE_PREFIX . $key; } diff --git a/src/Core/Lock/Type/DatabaseLock.php b/src/Core/Lock/Type/DatabaseLock.php index de44e2e2b..9c2dd2d4d 100644 --- a/src/Core/Lock/Type/DatabaseLock.php +++ b/src/Core/Lock/Type/DatabaseLock.php @@ -23,13 +23,14 @@ namespace Friendica\Core\Lock\Type; use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Lock\Enum\Type; +use Friendica\Core\Lock\Exception\LockPersistenceException; use Friendica\Database\Database; use Friendica\Util\DateTimeFormat; /** * Locking driver that stores the locks in the database */ -class DatabaseLock extends BaseLock +class DatabaseLock extends AbstractLock { /** * The current ID of the process @@ -44,49 +45,63 @@ class DatabaseLock extends BaseLock private $dba; /** - * @param null|int $pid The Id of the current process (null means determine automatically) + * @param int|null $pid The id of the current process (null means determine automatically) */ - public function __construct(Database $dba, $pid = null) + public function __construct(Database $dba, ?int $pid = null) { $this->dba = $dba; - $this->pid = isset($pid) ? $pid : getmypid(); + $this->pid = $pid ?? getmypid(); } /** * (@inheritdoc) */ - public function acquire($key, $timeout = 120, $ttl = Duration::FIVE_MINUTES) + public function acquire(string $key, int $timeout = 120, int $ttl = Duration::FIVE_MINUTES): bool { $got_lock = false; $start = time(); - do { - $this->dba->lock('locks'); - $lock = $this->dba->selectFirst('locks', ['locked', 'pid'], ['`name` = ? AND `expires` >= ?', $key, DateTimeFormat::utcNow()]); + try { + do { + $this->dba->lock('locks'); + $lock = $this->dba->selectFirst('locks', ['locked', 'pid'], [ + '`name` = ? AND `expires` >= ?', $key,DateTimeFormat::utcNow() + ]); - if ($this->dba->isResult($lock)) { - if ($lock['locked']) { - // We want to lock something that was already locked by us? So we got the lock. - if ($lock['pid'] == $this->pid) { + if ($this->dba->isResult($lock)) { + if ($lock['locked']) { + // We want to lock something that was already locked by us? So we got the lock. + if ($lock['pid'] == $this->pid) { + $got_lock = true; + } + } + if (!$lock['locked']) { + $this->dba->update('locks', [ + 'locked' => true, + 'pid' => $this->pid, + 'expires' => DateTimeFormat::utc('now + ' . $ttl . 'seconds') + ], ['name' => $key]); $got_lock = true; } - } - if (!$lock['locked']) { - $this->dba->update('locks', ['locked' => true, 'pid' => $this->pid, 'expires' => DateTimeFormat::utc('now + ' . $ttl . 'seconds')], ['name' => $key]); + } else { + $this->dba->insert('locks', [ + 'name' => $key, + 'locked' => true, + 'pid' => $this->pid, + 'expires' => DateTimeFormat::utc('now + ' . $ttl . 'seconds')]); $got_lock = true; + $this->markAcquire($key); } - } else { - $this->dba->insert('locks', ['name' => $key, 'locked' => true, 'pid' => $this->pid, 'expires' => DateTimeFormat::utc('now + ' . $ttl . 'seconds')]); - $got_lock = true; - $this->markAcquire($key); - } - $this->dba->unlock(); + $this->dba->unlock(); - if (!$got_lock && ($timeout > 0)) { - usleep(rand(100000, 2000000)); - } - } while (!$got_lock && ((time() - $start) < $timeout)); + if (!$got_lock && ($timeout > 0)) { + usleep(rand(100000, 2000000)); + } + } while (!$got_lock && ((time() - $start) < $timeout)); + } catch (\Exception $exception) { + throw new LockPersistenceException(sprintf('Cannot acquire lock for key %s', $key), $exception); + } return $got_lock; } @@ -94,7 +109,7 @@ class DatabaseLock extends BaseLock /** * (@inheritdoc) */ - public function release($key, $override = false) + public function release(string $key, bool $override = false): bool { if ($override) { $where = ['name' => $key]; @@ -102,10 +117,14 @@ class DatabaseLock extends BaseLock $where = ['name' => $key, 'pid' => $this->pid]; } - if ($this->dba->exists('locks', $where)) { - $return = $this->dba->delete('locks', $where); - } else { - $return = false; + try { + if ($this->dba->exists('locks', $where)) { + $return = $this->dba->delete('locks', $where); + } else { + $return = false; + } + } catch (\Exception $exception) { + throw new LockPersistenceException(sprintf('Cannot release lock for key %s (override %b)', $key, $override), $exception); } $this->markRelease($key); @@ -116,7 +135,7 @@ class DatabaseLock extends BaseLock /** * (@inheritdoc) */ - public function releaseAll($override = false) + public function releaseAll(bool $override = false): bool { $success = parent::releaseAll($override); @@ -125,7 +144,12 @@ class DatabaseLock extends BaseLock } else { $where = ['pid' => $this->pid]; } - $return = $this->dba->delete('locks', $where); + + try { + $return = $this->dba->delete('locks', $where); + } catch (\Exception $exception) { + throw new LockPersistenceException(sprintf('Cannot release all lock (override %b)', $override), $exception); + } $this->acquiredLocks = []; @@ -135,9 +159,14 @@ class DatabaseLock extends BaseLock /** * (@inheritdoc) */ - public function isLocked($key) + public function isLocked(string $key): bool { - $lock = $this->dba->selectFirst('locks', ['locked'], ['`name` = ? AND `expires` >= ?', $key, DateTimeFormat::utcNow()]); + try { + $lock = $this->dba->selectFirst('locks', ['locked'], [ + '`name` = ? AND `expires` >= ?', $key, DateTimeFormat::utcNow()]); + } catch (\Exception $exception) { + throw new LockPersistenceException(sprintf('Cannot check lock state for key %s', $key), $exception); + } if ($this->dba->isResult($lock)) { return $lock['locked'] !== false; @@ -149,7 +178,7 @@ class DatabaseLock extends BaseLock /** * {@inheritDoc} */ - public function getName() + public function getName(): string { return Type::DATABASE; } @@ -157,21 +186,26 @@ class DatabaseLock extends BaseLock /** * {@inheritDoc} */ - public function getLocks(string $prefix = '') + public function getLocks(string $prefix = ''): array { - if (empty($prefix)) { - $where = ['`expires` >= ?', DateTimeFormat::utcNow()]; - } else { - $where = ['`expires` >= ? AND `name` LIKE CONCAT(?, \'%\')', DateTimeFormat::utcNow(), $prefix]; - } + try { + if (empty($prefix)) { + $where = ['`expires` >= ?', DateTimeFormat::utcNow()]; + } else { + $where = ['`expires` >= ? AND `name` LIKE CONCAT(?, \'%\')', DateTimeFormat::utcNow(), $prefix]; + } - $stmt = $this->dba->select('locks', ['name'], $where); + $stmt = $this->dba->select('locks', ['name'], $where); - $keys = []; - while ($key = $this->dba->fetch($stmt)) { - array_push($keys, $key['name']); + $keys = []; + while ($key = $this->dba->fetch($stmt)) { + array_push($keys, $key['name']); + } + } catch (\Exception $exception) { + throw new LockPersistenceException(sprintf('Cannot get lock with prefix %s', $prefix), $exception); + } finally { + $this->dba->close($stmt); } - $this->dba->close($stmt); return $keys; } diff --git a/src/Core/Lock/Type/SemaphoreLock.php b/src/Core/Lock/Type/SemaphoreLock.php index 4393e4515..f68b5546c 100644 --- a/src/Core/Lock/Type/SemaphoreLock.php +++ b/src/Core/Lock/Type/SemaphoreLock.php @@ -23,16 +23,17 @@ namespace Friendica\Core\Lock\Type; use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Lock\Enum\Type; +use Friendica\Core\Lock\Exception\InvalidLockDriverException; use function get_temppath; -class SemaphoreLock extends BaseLock +class SemaphoreLock extends AbstractLock { private static $semaphore = []; public function __construct() { if (!function_exists('sem_get')) { - throw new \Exception('Semaphore lock not supported'); + throw new InvalidLockDriverException('Semaphore lock not supported'); } } @@ -57,11 +58,11 @@ class SemaphoreLock extends BaseLock /** * (@inheritdoc) */ - public function acquire($key, $timeout = 120, $ttl = Duration::FIVE_MINUTES) + public function acquire(string $key, int $timeout = 120, int $ttl = Duration::FIVE_MINUTES): bool { self::$semaphore[$key] = sem_get(self::semaphoreKey($key)); if (!empty(self::$semaphore[$key])) { - if ((bool)sem_acquire(self::$semaphore[$key], ($timeout === 0))) { + if (sem_acquire(self::$semaphore[$key], ($timeout === 0))) { $this->markAcquire($key); return true; } @@ -76,7 +77,7 @@ class SemaphoreLock extends BaseLock * @param bool $override not necessary parameter for semaphore locks since the lock lives as long as the execution * of the using function */ - public function release($key, $override = false) + public function release(string $key, bool $override = false): bool { $success = false; @@ -96,7 +97,7 @@ class SemaphoreLock extends BaseLock /** * (@inheritdoc) */ - public function isLocked($key) + public function isLocked(string $key): bool { return isset(self::$semaphore[$key]); } @@ -104,7 +105,7 @@ class SemaphoreLock extends BaseLock /** * {@inheritDoc} */ - public function getName() + public function getName(): string { return Type::SEMAPHORE; } @@ -112,7 +113,7 @@ class SemaphoreLock extends BaseLock /** * {@inheritDoc} */ - public function getLocks(string $prefix = '') + public function getLocks(string $prefix = ''): array { // We can just return our own semaphore keys, since we don't know // the state of other semaphores, even if the .sem files exists @@ -136,7 +137,7 @@ class SemaphoreLock extends BaseLock /** * {@inheritDoc} */ - public function releaseAll($override = false) + public function releaseAll(bool $override = false): bool { // Semaphores are just alive during a run, so there is no need to release // You can just release your own locks diff --git a/src/Core/PConfig/IPConfig.php b/src/Core/PConfig/Capability/IManagePersonalConfigValues.php similarity index 75% rename from src/Core/PConfig/IPConfig.php rename to src/Core/PConfig/Capability/IManagePersonalConfigValues.php index 1795a6039..3af3576c6 100644 --- a/src/Core/PConfig/IPConfig.php +++ b/src/Core/PConfig/Capability/IManagePersonalConfigValues.php @@ -19,37 +19,34 @@ * */ -namespace Friendica\Core\PConfig; +namespace Friendica\Core\PConfig\Capability; -use Friendica\Core\Config\Cache\Cache; +use Friendica\Core\PConfig\ValueObject; /** * Interface for accessing user specific configurations */ -interface IPConfig +interface IManagePersonalConfigValues { - /** * Loads all configuration values of a user's config family into a cached storage. * * All configuration values of the given user are stored with the $uid in the cache * - * @param int $uid The user_id + * @param int $uid The user_id * @param string $cat The category of the configuration value * * @return array The loaded config array - * @see Cache - * */ - function load(int $uid, string $cat = 'config'); + public function load(int $uid, string $cat = 'config'): array; /** * Get a particular user's config variable given the category name * ($cat) and a key. * * Get a particular user's config value from the given category ($cat) - * and the $key with the $uid from a cached storage either from the $this->configAdapter - * (@see IConfigAdapter) or from the $this->configCache (@see PConfigCache). + * and the $key with the $uid from a cached storage either from the database + * or from the configCache * * @param int $uid The user_id * @param string $cat The category of the configuration value @@ -58,8 +55,9 @@ interface IPConfig * @param boolean $refresh optional, If true the config is loaded from the db and not from the cache (default: false) * * @return mixed Stored value or null if it does not exist + * */ - function get(int $uid, string $cat, string $key, $default_value = null, bool $refresh = false); + public function get(int $uid, string $cat, string $key, $default_value = null, bool $refresh = false); /** * Sets a configuration value for a user @@ -76,28 +74,26 @@ interface IPConfig * * @return bool Operation success */ - function set(int $uid, string $cat, string $key, $value); + public function set(int $uid, string $cat, string $key, $value): bool; /** - * Deletes the given key from the users's configuration. + * Deletes the given key from the users configuration. * - * Removes the configured value from the stored cache in $this->configCache - * (@see ConfigCache) and removes it from the database (@see IConfigAdapter) - * with the given $uid. + * Removes the configured value from the stored cache and removes it from the database with the given $uid. * - * @param int $uid The user_id + * @param int $uid The user_id * @param string $cat The category of the configuration value * @param string $key The configuration key to delete * * @return bool */ - function delete(int $uid, string $cat, string $key); + public function delete(int $uid, string $cat, string $key): bool; /** * Returns the Config Cache * - * @return \Friendica\Core\PConfig\Cache\Cache + * @return ValueObject\Cache */ - function getCache(); + public function getCache(): ValueObject\Cache; } diff --git a/src/Core/PConfig/Exception/PConfigPersistenceException.php b/src/Core/PConfig/Exception/PConfigPersistenceException.php new file mode 100644 index 000000000..4da14c8b4 --- /dev/null +++ b/src/Core/PConfig/Exception/PConfigPersistenceException.php @@ -0,0 +1,13 @@ +get('system', 'config_adapter') === 'preload') { - $configuration = new Type\PreloadPConfig($pConfigCache, $configModel); + $configuration = new Type\PreloadPConfig($pConfigCache, $configRepo); } else { - $configuration = new Type\JitPConfig($pConfigCache, $configModel); + $configuration = new Type\JitPConfig($pConfigCache, $configRepo); } return $configuration; diff --git a/src/Core/PConfig/Model/PConfig.php b/src/Core/PConfig/Repository/PConfig.php similarity index 55% rename from src/Core/PConfig/Model/PConfig.php rename to src/Core/PConfig/Repository/PConfig.php index 35ff34a56..d7f1ca3d3 100644 --- a/src/Core/PConfig/Model/PConfig.php +++ b/src/Core/PConfig/Repository/PConfig.php @@ -19,9 +19,10 @@ * */ -namespace Friendica\Core\PConfig\Model; +namespace Friendica\Core\PConfig\Repository; -use Friendica\Core\Config\Model\DbaUtils; +use Friendica\Core\Config\Util\ValueConversion; +use Friendica\Core\PConfig\Exception\PConfigPersistenceException; use Friendica\Database\Database; /** @@ -29,15 +30,14 @@ use Friendica\Database\Database; */ class PConfig { - /** @var Database */ - protected $dba; + protected static $table_name = 'pconfig'; - /** - * @param Database $dba The database connection of this model - */ - public function __construct(Database $dba) + /** @var Database */ + protected $db; + + public function __construct(Database $db) { - $this->dba = $dba; + $this->db = $db; } /** @@ -45,9 +45,9 @@ class PConfig * * @return bool */ - public function isConnected() + public function isConnected(): bool { - return $this->dba->isConnected(); + return $this->db->isConnected(); } /** @@ -56,30 +56,35 @@ class PConfig * @param int $uid The id of the user to load * @param string|null $cat The category of the configuration values to load * - * @return array The config array + * @return string[][] The config array * - * @throws \Exception In case DB calls are invalid + * @throws PConfigPersistenceException In case the persistence layer throws errors */ - public function load(int $uid, string $cat = null) + public function load(int $uid, ?string $cat = null): array { $return = []; - if (empty($cat)) { - $configs = $this->dba->select('pconfig', ['cat', 'v', 'k'], ['uid' => $uid]); - } else { - $configs = $this->dba->select('pconfig', ['cat', 'v', 'k'], ['cat' => $cat, 'uid' => $uid]); - } - - while ($config = $this->dba->fetch($configs)) { - $key = $config['k']; - $value = DbaUtils::toConfigValue($config['v']); - - // just save it in case it is set - if (isset($value)) { - $return[$config['cat']][$key] = $value; + try { + if (empty($cat)) { + $configs = $this->db->select(static::$table_name, ['cat', 'v', 'k'], ['uid' => $uid]); + } else { + $configs = $this->db->select(static::$table_name, ['cat', 'v', 'k'], ['cat' => $cat, 'uid' => $uid]); } + + while ($config = $this->db->fetch($configs)) { + $key = $config['k']; + $value = ValueConversion::toConfigValue($config['v']); + + // just save it in case it is set + if (isset($value)) { + $return[$config['cat']][$key] = $value; + } + } + } catch (\Exception $exception) { + throw new PConfigPersistenceException(sprintf('Cannot load config category %s for user %d', $cat, $uid), $exception); + } finally { + $this->db->close($configs); } - $this->dba->close($configs); return $return; } @@ -96,7 +101,7 @@ class PConfig * * @return array|string|null Stored value or null if it does not exist * - * @throws \Exception In case DB calls are invalid + * @throws PConfigPersistenceException In case the persistence layer throws errors */ public function get(int $uid, string $cat, string $key) { @@ -104,14 +109,18 @@ class PConfig return null; } - $config = $this->dba->selectFirst('pconfig', ['v'], ['uid' => $uid, 'cat' => $cat, 'k' => $key]); - if ($this->dba->isResult($config)) { - $value = DbaUtils::toConfigValue($config['v']); + try { + $config = $this->db->selectFirst('pconfig', ['v'], ['uid' => $uid, 'cat' => $cat, 'k' => $key]); + if ($this->db->isResult($config)) { + $value = ValueConversion::toConfigValue($config['v']); - // just return it in case it is set - if (isset($value)) { - return $value; + // just return it in case it is set + if (isset($value)) { + return $value; + } } + } catch (\Exception $exception) { + throw new PConfigPersistenceException(sprintf('Cannot get config value for category %s, key %s and user %d', $cat, $key, $uid), $exception); } return null; @@ -130,9 +139,9 @@ class PConfig * * @return bool Operation success * - * @throws \Exception In case DB calls are invalid + * @throws PConfigPersistenceException In case the persistence layer throws errors */ - public function set(int $uid, string $cat, string $key, $value) + public function set(int $uid, string $cat, string $key, $value): bool { if (!$this->isConnected()) { return false; @@ -148,11 +157,12 @@ class PConfig return true; } - $dbvalue = DbaUtils::toDbValue($value); - - $result = $this->dba->update('pconfig', ['v' => $dbvalue], ['uid' => $uid, 'cat' => $cat, 'k' => $key], true); - - return $result; + try { + $dbValue = ValueConversion::toDbValue($value); + return $this->db->update(static::$table_name, ['v' => $dbValue], ['uid' => $uid, 'cat' => $cat, 'k' => $key], true); + } catch (\Exception $exception) { + throw new PConfigPersistenceException(sprintf('Cannot set config value for category %s, key %s and user %d', $cat, $key, $uid), $exception); + } } /** @@ -164,14 +174,18 @@ class PConfig * * @return bool Operation success * - * @throws \Exception In case DB calls are invalid + * @throws PConfigPersistenceException In case the persistence layer throws errors */ - public function delete(int $uid, string $cat, string $key) + public function delete(int $uid, string $cat, string $key): bool { if (!$this->isConnected()) { return false; } - return $this->dba->delete('pconfig', ['uid' => $uid, 'cat' => $cat, 'k' => $key]); + try { + return $this->db->delete('pconfig', ['uid' => $uid, 'cat' => $cat, 'k' => $key]); + } catch (\Exception $exception) { + throw new PConfigPersistenceException(sprintf('Cannot delete config value for category %s, key %s and user %d', $cat, $key, $uid), $exception); + } } } diff --git a/src/Core/PConfig/Type/BasePConfig.php b/src/Core/PConfig/Type/AbstractPConfigValues.php similarity index 61% rename from src/Core/PConfig/Type/BasePConfig.php rename to src/Core/PConfig/Type/AbstractPConfigValues.php index 9ae374f2e..ddf8f6f95 100644 --- a/src/Core/PConfig/Type/BasePConfig.php +++ b/src/Core/PConfig/Type/AbstractPConfigValues.php @@ -21,45 +21,45 @@ namespace Friendica\Core\PConfig\Type; -use Friendica\Core\PConfig\Cache\Cache; -use Friendica\Core\PConfig\IPConfig; -use Friendica\Model; +use Friendica\Core\PConfig\Repository; +use Friendica\Core\PConfig\ValueObject\Cache; +use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; /** * This class is responsible for the user-specific configuration values in Friendica - * The values are set through the Config-DB-Table (per Config-DB-model @see Model\Config\PConfig) + * The values are set through the Config-DB-Table (per Config-DB-model @see Repository\PConfig) * - * The configuration cache (@see Cache\PConfigCache) is used for temporary caching of database calls. This will + * The configuration cache (@see Cache) is used for temporary caching of database calls. This will * increase the performance. */ -abstract class BasePConfig implements IPConfig +abstract class AbstractPConfigValues implements IManagePersonalConfigValues { /** - * @var \Friendica\Core\PConfig\Cache\Cache + * @var Cache */ protected $configCache; /** - * @var \Friendica\Core\PConfig\Model\PConfig + * @var Repository\PConfig */ protected $configModel; /** - * @param \Friendica\Core\PConfig\Cache\Cache $configCache The configuration cache - * @param \Friendica\Core\PConfig\Model\PConfig $configModel The configuration model + * @param Cache $configCache The configuration cache + * @param Repository\PConfig $configRepo The configuration model */ - public function __construct(Cache $configCache, \Friendica\Core\PConfig\Model\PConfig $configModel) + public function __construct(Cache $configCache, Repository\PConfig $configRepo) { $this->configCache = $configCache; - $this->configModel = $configModel; + $this->configModel = $configRepo; } /** * Returns the Config Cache * - * @return \Friendica\Core\PConfig\Cache\Cache + * @return Cache */ - public function getCache() + public function getCache(): Cache { return $this->configCache; } diff --git a/src/Core/PConfig/Type/JitPConfig.php b/src/Core/PConfig/Type/JitPConfig.php index 99c3b581b..14a8b2744 100644 --- a/src/Core/PConfig/Type/JitPConfig.php +++ b/src/Core/PConfig/Type/JitPConfig.php @@ -21,8 +21,8 @@ namespace Friendica\Core\PConfig\Type; -use Friendica\Core\PConfig\Cache\Cache; -use Friendica\Model; +use Friendica\Core\PConfig\Repository; +use Friendica\Core\PConfig\ValueObject; /** * This class implements the Just-In-Time configuration, which will cache @@ -31,7 +31,7 @@ use Friendica\Model; * Default Configuration type. * Provides the best performance for pages loading few configuration variables. */ -class JitPConfig extends BasePConfig +class JitPConfig extends AbstractPConfigValues { /** * @var array Array of already loaded db values (even if there was no value) @@ -39,12 +39,12 @@ class JitPConfig extends BasePConfig private $db_loaded; /** - * @param Cache $configCache The configuration cache - * @param \Friendica\Core\PConfig\Model\PConfig $configModel The configuration model + * @param ValueObject\Cache $configCache The configuration cache + * @param Repository\PConfig $configRepo The configuration model */ - public function __construct(Cache $configCache, \Friendica\Core\PConfig\Model\PConfig $configModel) + public function __construct(ValueObject\Cache $configCache, Repository\PConfig $configRepo) { - parent::__construct($configCache, $configModel); + parent::__construct($configCache, $configRepo); $this->db_loaded = []; } @@ -52,11 +52,11 @@ class JitPConfig extends BasePConfig * {@inheritDoc} * */ - public function load(int $uid, string $cat = 'config') + public function load(int $uid, string $cat = 'config'): array { // If not connected or no uid, do nothing if (!$uid || !$this->configModel->isConnected()) { - return; + return []; } $config = $this->configModel->load($uid, $cat); @@ -84,14 +84,12 @@ class JitPConfig extends BasePConfig // if the value isn't loaded or refresh is needed, load it to the cache if ($this->configModel->isConnected() && - (empty($this->db_loaded[$uid][$cat][$key]) || - $refresh)) { + (empty($this->db_loaded[$uid][$cat][$key]) || $refresh)) { + $dbValue = $this->configModel->get($uid, $cat, $key); - $dbvalue = $this->configModel->get($uid, $cat, $key); - - if (isset($dbvalue)) { - $this->configCache->set($uid, $cat, $key, $dbvalue); - unset($dbvalue); + if (isset($dbValue)) { + $this->configCache->set($uid, $cat, $key, $dbValue); + unset($dbValue); } $this->db_loaded[$uid][$cat][$key] = true; @@ -106,7 +104,7 @@ class JitPConfig extends BasePConfig /** * {@inheritDoc} */ - public function set(int $uid, string $cat, string $key, $value) + public function set(int $uid, string $cat, string $key, $value): bool { if (!$uid) { return false; @@ -130,7 +128,7 @@ class JitPConfig extends BasePConfig /** * {@inheritDoc} */ - public function delete(int $uid, string $cat, string $key) + public function delete(int $uid, string $cat, string $key): bool { if (!$uid) { return false; diff --git a/src/Core/PConfig/Type/PreloadPConfig.php b/src/Core/PConfig/Type/PreloadPConfig.php index 4498bb409..51f31691b 100644 --- a/src/Core/PConfig/Type/PreloadPConfig.php +++ b/src/Core/PConfig/Type/PreloadPConfig.php @@ -21,8 +21,8 @@ namespace Friendica\Core\PConfig\Type; -use Friendica\Core\PConfig\Cache\Cache; -use Friendica\Model; +use Friendica\Core\PConfig\Repository; +use Friendica\Core\PConfig\ValueObject; /** * This class implements the preload configuration, which will cache @@ -30,18 +30,18 @@ use Friendica\Model; * * Minimizes the number of database queries to retrieve configuration values at the cost of memory. */ -class PreloadPConfig extends BasePConfig +class PreloadPConfig extends AbstractPConfigValues { /** @var array */ private $config_loaded; /** - * @param \Friendica\Core\PConfig\Cache\Cache $configCache The configuration cache - * @param \Friendica\Core\PConfig\Model\PConfig $configModel The configuration model + * @param ValueObject\Cache $configCache The configuration cache + * @param Repository\PConfig $configRepo The configuration model */ - public function __construct(Cache $configCache, \Friendica\Core\PConfig\Model\PConfig $configModel) + public function __construct(ValueObject\Cache $configCache, Repository\PConfig $configRepo) { - parent::__construct($configCache, $configModel); + parent::__construct($configCache, $configRepo); $this->config_loaded = []; } @@ -51,16 +51,16 @@ class PreloadPConfig extends BasePConfig * This loads all config values everytime load is called * */ - public function load(int $uid, string $cat = 'config') + public function load(int $uid, string $cat = 'config'): array { // Don't load the whole configuration twice or with invalid uid if (!$uid || !empty($this->config_loaded[$uid])) { - return; + return []; } // If not connected, do nothing if (!$this->configModel->isConnected()) { - return; + return []; } $config = $this->configModel->load($uid); @@ -101,7 +101,7 @@ class PreloadPConfig extends BasePConfig /** * {@inheritDoc} */ - public function set(int $uid, string $cat, string $key, $value) + public function set(int $uid, string $cat, string $key, $value): bool { if (!$uid) { return false; @@ -127,7 +127,7 @@ class PreloadPConfig extends BasePConfig /** * {@inheritDoc} */ - public function delete(int $uid, string $cat, string $key) + public function delete(int $uid, string $cat, string $key): bool { if (!$uid) { return false; diff --git a/src/Core/PConfig/Cache/Cache.php b/src/Core/PConfig/ValueObject/Cache.php similarity index 85% rename from src/Core/PConfig/Cache/Cache.php rename to src/Core/PConfig/ValueObject/Cache.php index 97554b2fe..d6855199a 100644 --- a/src/Core/PConfig/Cache/Cache.php +++ b/src/Core/PConfig/ValueObject/Cache.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Core\PConfig\Cache; +namespace Friendica\Core\PConfig\ValueObject; use ParagonIE\HiddenString\HiddenString; @@ -31,7 +31,7 @@ class Cache /** * @var array */ - private $config; + private $config = []; /** * @var bool @@ -53,7 +53,7 @@ class Cache * @param int $uid * @param array $config */ - public function load($uid, array $config) + public function load(int $uid, array $config) { if (!is_int($uid)) { return; @@ -63,7 +63,6 @@ class Cache foreach ($categories as $category) { if (isset($config[$category]) && is_array($config[$category])) { - $keys = array_keys($config[$category]); foreach ($keys as $key) { @@ -81,11 +80,11 @@ class Cache * * @param int $uid User Id * @param string $cat Config category - * @param string $key Config key + * @param string|null $key Config key * - * @return null|string The value of the config entry or null if not set + * @return null|mixed The value of the config entry or null if not set */ - public function get($uid, string $cat, string $key = null) + public function get(int $uid, string $cat, ?string $key = null) { if (!is_int($uid)) { return null; @@ -112,7 +111,7 @@ class Cache * * @return bool Set successful */ - public function set($uid, string $cat, string $key, $value) + public function set(int $uid, string $cat, string $key, $value): bool { if (!is_int($uid)) { return false; @@ -127,8 +126,8 @@ class Cache } if ($this->hidePasswordOutput && - $key == 'password' && - !empty($value) && is_string($value)) { + $key == 'password' && + !empty($value) && is_string($value)) { $this->config[$uid][$cat][$key] = new HiddenString((string)$value); } else { $this->config[$uid][$cat][$key] = $value; @@ -147,7 +146,7 @@ class Cache * * @return bool true, if deleted */ - public function delete($uid, string $cat, string $key) + public function delete(int $uid, string $cat, string $key): bool { if (!is_int($uid)) { return false; @@ -171,9 +170,9 @@ class Cache /** * Returns the whole configuration * - * @return array The configuration + * @return string[][] The configuration */ - public function getAll() + public function getAll(): array { return $this->config; } @@ -181,11 +180,11 @@ class Cache /** * Returns an array with missing categories/Keys * - * @param array $config The array to check + * @param string[][] $config The array to check * - * @return array + * @return string[][] */ - public function keyDiff(array $config) + public function keyDiff(array $config): array { $return = []; diff --git a/src/Core/Process.php b/src/Core/Process.php index 3c1a13929..8bde3cc3d 100644 --- a/src/Core/Process.php +++ b/src/Core/Process.php @@ -22,7 +22,7 @@ namespace Friendica\Core; use Friendica\App; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Model; use Psr\Log\LoggerInterface; @@ -48,7 +48,7 @@ class Process private $mode; /** - * @var IConfig + * @var IManageConfigValues */ private $config; @@ -67,7 +67,7 @@ class Process */ private $pid; - public function __construct(LoggerInterface $logger, App\Mode $mode, IConfig $config, Model\Process $processModel, string $basepath, int $pid) + public function __construct(LoggerInterface $logger, App\Mode $mode, IManageConfigValues $config, Model\Process $processModel, string $basepath, int $pid) { $this->logger = $logger; $this->mode = $mode; @@ -176,7 +176,7 @@ class Process if (count($data) != 2) { continue; } - list($key, $val) = $data; + [$key, $val] = $data; $meminfo[$key] = (int)trim(str_replace('kB', '', $val)); $meminfo[$key] = (int)($meminfo[$key] / 1024); } diff --git a/src/Core/Session/ISession.php b/src/Core/Session/Capability/IHandleSessions.php similarity index 92% rename from src/Core/Session/ISession.php rename to src/Core/Session/Capability/IHandleSessions.php index 2b2bf32e5..7b863b76f 100644 --- a/src/Core/Session/ISession.php +++ b/src/Core/Session/Capability/IHandleSessions.php @@ -19,19 +19,19 @@ * */ -namespace Friendica\Core\Session; +namespace Friendica\Core\Session\Capability; /** * Contains all global supported Session methods */ -interface ISession +interface IHandleSessions { /** * Start the current session * * @return self The own Session instance */ - public function start(); + public function start(): IHandleSessions; /** * Checks if the key exists in this session @@ -40,7 +40,7 @@ interface ISession * * @return boolean True, if it exists */ - public function exists(string $name); + public function exists(string $name): bool; /** * Retrieves a key from the session super global or the defaults if the key is missing or the value is falsy. diff --git a/src/Core/Session/Factory/SessionFactory.php b/src/Core/Session/Factory/Session.php similarity index 64% rename from src/Core/Session/Factory/SessionFactory.php rename to src/Core/Session/Factory/Session.php index 510ff08c7..5062c33c5 100644 --- a/src/Core/Session/Factory/SessionFactory.php +++ b/src/Core/Session/Factory/Session.php @@ -22,10 +22,12 @@ namespace Friendica\Core\Session\Factory; use Friendica\App; -use Friendica\Core\Cache\ICache; -use Friendica\Core\Cache\Enum\Type; -use Friendica\Core\Config\IConfig; -use Friendica\Core\Session; +use Friendica\Core\Cache\Capability\ICanCache; +use Friendica\Core\Cache\Enum; +use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\Session\Capability\IHandleSessions; +use Friendica\Core\Session\Type; +use Friendica\Core\Session\Handler; use Friendica\Database\Database; use Friendica\Util\Profiler; use Psr\Log\LoggerInterface; @@ -33,7 +35,7 @@ use Psr\Log\LoggerInterface; /** * Factory for creating a valid Session for this run */ -class SessionFactory +class Session { /** @var string The plain, PHP internal session management */ const HANDLER_NATIVE = 'native'; @@ -45,43 +47,44 @@ class SessionFactory const HANDLER_DEFAULT = self::HANDLER_DATABASE; /** - * @param App\Mode $mode - * @param App\BaseURL $baseURL - * @param IConfig $config - * @param Database $dba - * @param ICache $cache - * @param LoggerInterface $logger - * @param array $server + * @param App\Mode $mode + * @param App\BaseURL $baseURL + * @param IManageConfigValues $config + * @param Database $dba + * @param ICanCache $cache + * @param LoggerInterface $logger + * @param Profiler $profiler + * @param array $server * - * @return Session\ISession + * @return IHandleSessions */ - public function createSession(App\Mode $mode, App\BaseURL $baseURL, IConfig $config, Database $dba, ICache $cache, LoggerInterface $logger, Profiler $profiler, array $server = []) + public function createSession(App\Mode $mode, App\BaseURL $baseURL, IManageConfigValues $config, Database $dba, ICanCache $cache, LoggerInterface $logger, Profiler $profiler, array $server = []) { $profiler->startRecording('session'); $session = null; try { if ($mode->isInstall() || $mode->isBackend()) { - $session = new Session\Type\Memory(); + $session = new Type\Memory(); } else { $session_handler = $config->get('system', 'session_handler', self::HANDLER_DEFAULT); - $handler = null; + $handler = null; switch ($session_handler) { case self::HANDLER_DATABASE: - $handler = new Session\Handler\Database($dba, $logger, $server); + $handler = new Handler\Database($dba, $logger, $server); break; case self::HANDLER_CACHE: // In case we're using the db as cache driver, use the native db session, not the cache - if ($config->get('system', 'cache_driver') === Type::DATABASE) { - $handler = new Session\Handler\Database($dba, $logger, $server); + if ($config->get('system', 'cache_driver') === Enum\Type::DATABASE) { + $handler = new Handler\Database($dba, $logger, $server); } else { - $handler = new Session\Handler\Cache($cache); + $handler = new Handler\Cache($cache, $logger); } break; } - $session = new Session\Type\Native($baseURL, $handler); + $session = new Type\Native($baseURL, $handler); } } finally { $profiler->stopRecording(); diff --git a/src/Core/Session/Handler/Cache.php b/src/Core/Session/Handler/Cache.php index dc1bfa6b7..ab888e81d 100644 --- a/src/Core/Session/Handler/Cache.php +++ b/src/Core/Session/Handler/Cache.php @@ -21,8 +21,10 @@ namespace Friendica\Core\Session\Handler; -use Friendica\Core\Cache\ICache; +use Friendica\Core\Cache\Capability\ICanCache; +use Friendica\Core\Cache\Exception\CachePersistenceException; use Friendica\Core\Session; +use Psr\Log\LoggerInterface; use SessionHandlerInterface; /** @@ -30,29 +32,37 @@ use SessionHandlerInterface; */ class Cache implements SessionHandlerInterface { - /** @var ICache */ + /** @var ICanCache */ private $cache; + /** @var LoggerInterface */ + private $logger; - public function __construct(ICache $cache) + public function __construct(ICanCache $cache, LoggerInterface $logger) { - $this->cache = $cache; + $this->cache = $cache; + $this->logger = $logger; } - public function open($save_path, $session_name) + public function open($path, $name): bool { return true; } - public function read($session_id) + public function read($id) { - if (empty($session_id)) { + if (empty($id)) { return ''; } - $data = $this->cache->get('session:' . $session_id); - if (!empty($data)) { - Session::$exists = true; - return $data; + try { + $data = $this->cache->get('session:' . $id); + if (!empty($data)) { + Session::$exists = true; + return $data; + } + } catch (CachePersistenceException $exception) { + $this->logger->warning('Cannot read session.'. ['id' => $id, 'exception' => $exception]); + return ''; } return ''; @@ -65,36 +75,45 @@ class Cache implements SessionHandlerInterface * on the case. Uses the Session::expire for existing session, 5 minutes * for newly created session. * - * @param string $session_id Session ID with format: [a-z0-9]{26} - * @param string $session_data Serialized session data + * @param string $id Session ID with format: [a-z0-9]{26} + * @param string $data Serialized session data * - * @return boolean Returns false if parameters are missing, true otherwise - * @throws \Exception + * @return bool Returns false if parameters are missing, true otherwise */ - public function write($session_id, $session_data) + public function write($id, $data): bool { - if (!$session_id) { + if (!$id) { return false; } - if (!$session_data) { - return $this->destroy($session_id); + if (!$data) { + return $this->destroy($id); } - return $this->cache->set('session:' . $session_id, $session_data, Session::$expire); + try { + return $this->cache->set('session:' . $id, $data, Session::$expire); + } catch (CachePersistenceException $exception) { + $this->logger->warning('Cannot write session', ['id' => $id, 'exception' => $exception]); + return false; + } } - public function close() + public function close(): bool { return true; } - public function destroy($id) + public function destroy($id): bool { - return $this->cache->delete('session:' . $id); + try { + return $this->cache->delete('session:' . $id); + } catch (CachePersistenceException $exception) { + $this->logger->warning('Cannot destroy session', ['id' => $id, 'exception' => $exception]); + return false; + } } - public function gc($maxlifetime) + public function gc($max_lifetime): bool { return true; } diff --git a/src/Core/Session/Handler/Database.php b/src/Core/Session/Handler/Database.php index c0467818c..b18d55db7 100644 --- a/src/Core/Session/Handler/Database.php +++ b/src/Core/Session/Handler/Database.php @@ -52,24 +52,29 @@ class Database implements SessionHandlerInterface $this->server = $server; } - public function open($save_path, $session_name) + public function open($path, $name): bool { return true; } - public function read($session_id) + public function read($id) { - if (empty($session_id)) { + if (empty($id)) { return ''; } - $session = $this->dba->selectFirst('session', ['data'], ['sid' => $session_id]); - if ($this->dba->isResult($session)) { - Session::$exists = true; - return $session['data']; + try { + $session = $this->dba->selectFirst('session', ['data'], ['sid' => $id]); + if ($this->dba->isResult($session)) { + Session::$exists = true; + return $session['data']; + } + } catch (\Exception $exception) { + $this->logger->warning('Cannot read session.'. ['id' => $id, 'exception' => $exception]); + return ''; } - $this->logger->notice('no data for session', ['session_id' => $session_id, 'uri' => $this->server['REQUEST_URI'] ?? '']); + $this->logger->notice('no data for session', ['session_id' => $id, 'uri' => $this->server['REQUEST_URI'] ?? '']); return ''; } @@ -81,49 +86,63 @@ class Database implements SessionHandlerInterface * on the case. Uses the Session::expire global for existing session, 5 minutes * for newly created session. * - * @param string $session_id Session ID with format: [a-z0-9]{26} - * @param string $session_data Serialized session data + * @param string $id Session ID with format: [a-z0-9]{26} + * @param string $data Serialized session data * - * @return boolean Returns false if parameters are missing, true otherwise - * @throws \Exception + * @return bool Returns false if parameters are missing, true otherwise */ - public function write($session_id, $session_data) + public function write($id, $data): bool { - if (!$session_id) { + if (!$id) { return false; } - if (!$session_data) { - return $this->destroy($session_id); + if (!$data) { + return $this->destroy($id); } $expire = time() + Session::$expire; $default_expire = time() + 300; - if (Session::$exists) { - $fields = ['data' => $session_data, 'expire' => $expire]; - $condition = ["`sid` = ? AND (`data` != ? OR `expire` != ?)", $session_id, $session_data, $expire]; - $this->dba->update('session', $fields, $condition); - } else { - $fields = ['sid' => $session_id, 'expire' => $default_expire, 'data' => $session_data]; - $this->dba->insert('session', $fields); + try { + if (Session::$exists) { + $fields = ['data' => $data, 'expire' => $expire]; + $condition = ["`sid` = ? AND (`data` != ? OR `expire` != ?)", $id, $data, $expire]; + $this->dba->update('session', $fields, $condition); + } else { + $fields = ['sid' => $id, 'expire' => $default_expire, 'data' => $data]; + $this->dba->insert('session', $fields); + } + } catch (\Exception $exception) { + $this->logger->warning('Cannot write session.'. ['id' => $id, 'exception' => $exception]); + return false; } return true; } - public function close() + public function close(): bool { return true; } - public function destroy($id) + public function destroy($id): bool { - return $this->dba->delete('session', ['sid' => $id]); + try { + return $this->dba->delete('session', ['sid' => $id]); + } catch (\Exception $exception) { + $this->logger->warning('Cannot destroy session.'. ['id' => $id, 'exception' => $exception]); + return false; + } } - public function gc($maxlifetime) + public function gc($max_lifetime): bool { - return $this->dba->delete('session', ["`expire` < ?", time()]); + try { + return $this->dba->delete('session', ["`expire` < ?", time()]); + } catch (\Exception $exception) { + $this->logger->warning('Cannot use garbage collector.'. ['exception' => $exception]); + return false; + } } } diff --git a/src/Core/Session/Type/AbstractSession.php b/src/Core/Session/Type/AbstractSession.php index 8126804db..832155741 100644 --- a/src/Core/Session/Type/AbstractSession.php +++ b/src/Core/Session/Type/AbstractSession.php @@ -21,15 +21,17 @@ namespace Friendica\Core\Session\Type; +use Friendica\Core\Session\Capability\IHandleSessions; + /** * Contains the base methods for $_SESSION interaction */ -class AbstractSession +class AbstractSession implements IHandleSessions { /** * {@inheritDoc} */ - public function start() + public function start(): IHandleSessions { return $this; } @@ -37,7 +39,7 @@ class AbstractSession /** * {@inheritDoc}} */ - public function exists(string $name) + public function exists(string $name): bool { return isset($_SESSION[$name]); } diff --git a/src/Core/Session/Type/Memory.php b/src/Core/Session/Type/Memory.php index 635d880e7..4d4020144 100644 --- a/src/Core/Session/Type/Memory.php +++ b/src/Core/Session/Type/Memory.php @@ -21,14 +21,14 @@ namespace Friendica\Core\Session\Type; -use Friendica\Core\Session\ISession; +use Friendica\Core\Session\Capability\IHandleSessions; /** * Usable for backend processes (daemon/worker) and testing * * @todo after replacing the last direct $_SESSION call, use a internal array instead of the global variable */ -class Memory extends AbstractSession implements ISession +class Memory extends AbstractSession implements IHandleSessions { public function __construct() { diff --git a/src/Core/Session/Type/Native.php b/src/Core/Session/Type/Native.php index 4edd9a962..8dfbc57c8 100644 --- a/src/Core/Session/Type/Native.php +++ b/src/Core/Session/Type/Native.php @@ -22,14 +22,14 @@ namespace Friendica\Core\Session\Type; use Friendica\App; -use Friendica\Core\Session\ISession; +use Friendica\Core\Session\Capability\IHandleSessions; use Friendica\Model\User\Cookie; use SessionHandlerInterface; /** * The native Session class which uses the PHP internal Session functions */ -class Native extends AbstractSession implements ISession +class Native extends AbstractSession implements IHandleSessions { public function __construct(App\BaseURL $baseURL, SessionHandlerInterface $handler = null) { @@ -49,7 +49,7 @@ class Native extends AbstractSession implements ISession /** * {@inheritDoc} */ - public function start() + public function start(): IHandleSessions { session_start(); return $this; diff --git a/src/Core/StorageManager.php b/src/Core/StorageManager.php index 61dd8d375..ee6b959ff 100644 --- a/src/Core/StorageManager.php +++ b/src/Core/StorageManager.php @@ -22,7 +22,7 @@ namespace Friendica\Core; use Exception; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Database\Database; use Friendica\Model\Storage; use Friendica\Network\HTTPException\InternalServerErrorException; @@ -56,7 +56,7 @@ class StorageManager /** @var Database */ private $dba; - /** @var IConfig */ + /** @var \Friendica\Core\Config\Capability\IManageConfigValues */ private $config; /** @var LoggerInterface */ private $logger; @@ -67,15 +67,15 @@ class StorageManager private $currentBackend; /** - * @param Database $dba - * @param IConfig $config - * @param LoggerInterface $logger - * @param L10n $l10n + * @param Database $dba + * @param IManageConfigValues $config + * @param LoggerInterface $logger + * @param L10n $l10n * * @throws Storage\InvalidClassStorageException in case the active backend class is invalid * @throws Storage\StorageException in case of unexpected errors during the active backend class loading */ - public function __construct(Database $dba, IConfig $config, LoggerInterface $logger, L10n $l10n) + public function __construct(Database $dba, IManageConfigValues $config, LoggerInterface $logger, L10n $l10n) { $this->dba = $dba; $this->config = $config; diff --git a/src/DI.php b/src/DI.php index 7e5f309b3..570d680df 100644 --- a/src/DI.php +++ b/src/DI.php @@ -155,35 +155,35 @@ abstract class DI // /** - * @return Core\Cache\ICache + * @return \Friendica\Core\Cache\Capability\ICanCache */ public static function cache() { - return self::$dice->create(Core\Cache\ICache::class); + return self::$dice->create(Core\Cache\Capability\ICanCache::class); } /** - * @return Core\Config\IConfig + * @return \Friendica\Core\Config\Capability\IManageConfigValues */ public static function config() { - return self::$dice->create(Core\Config\IConfig::class); + return self::$dice->create(Core\Config\Capability\IManageConfigValues::class); } /** - * @return Core\PConfig\IPConfig + * @return \Friendica\Core\PConfig\Capability\IManagePersonalConfigValues */ public static function pConfig() { - return self::$dice->create(Core\PConfig\IPConfig::class); + return self::$dice->create(Core\PConfig\Capability\IManagePersonalConfigValues::class); } /** - * @return Core\Lock\ILock + * @return \Friendica\Core\Lock\Capability\ICanLock */ public static function lock() { - return self::$dice->create(Core\Lock\ILock::class); + return self::$dice->create(Core\Lock\Capability\ICanLock::class); } /** @@ -203,11 +203,11 @@ abstract class DI } /** - * @return Core\Session\ISession + * @return \Friendica\Core\Session\Capability\IHandleSessions */ public static function session() { - return self::$dice->create(Core\Session\ISession::class); + return self::$dice->create(Core\Session\Capability\IHandleSessions::class); } /** diff --git a/src/Database/Database.php b/src/Database/Database.php index 4a8d5d36e..a6cc3f875 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -21,7 +21,7 @@ namespace Friendica\Database; -use Friendica\Core\Config\Cache\Cache; +use Friendica\Core\Config\ValueObject\Cache; use Friendica\Core\System; use Friendica\Network\HTTPException\InternalServerErrorException; use Friendica\Util\DateTimeFormat; @@ -49,7 +49,7 @@ class Database protected $connected = false; /** - * @var Cache + * @var \Friendica\Core\Config\ValueObject\Cache */ protected $configCache; /** diff --git a/src/Factory/HTTPClientFactory.php b/src/Factory/HTTPClientFactory.php index 12d9fd45f..18e2b0f55 100644 --- a/src/Factory/HTTPClientFactory.php +++ b/src/Factory/HTTPClientFactory.php @@ -4,7 +4,7 @@ namespace Friendica\Factory; use Friendica\App; use Friendica\BaseFactory; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Network\HTTPClient; use Friendica\Network\IHTTPClient; use Friendica\Util\Profiler; @@ -22,14 +22,14 @@ require_once __DIR__ . '/../../static/dbstructure.config.php'; class HTTPClientFactory extends BaseFactory { - /** @var IConfig */ + /** @var IManageConfigValues */ private $config; /** @var Profiler */ private $profiler; /** @var App\BaseURL */ private $baseUrl; - public function __construct(LoggerInterface $logger, IConfig $config, Profiler $profiler, App\BaseURL $baseUrl) + public function __construct(LoggerInterface $logger, IManageConfigValues $config, Profiler $profiler, App\BaseURL $baseUrl) { parent::__construct($logger); $this->config = $config; diff --git a/src/Factory/LoggerFactory.php b/src/Factory/LoggerFactory.php index ad6658b56..6467bf38d 100644 --- a/src/Factory/LoggerFactory.php +++ b/src/Factory/LoggerFactory.php @@ -21,7 +21,7 @@ namespace Friendica\Factory; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Logger; use Friendica\Database\Database; use Friendica\Network\HTTPException\InternalServerErrorException; @@ -68,14 +68,14 @@ class LoggerFactory /** * Creates a new PSR-3 compliant logger instances * - * @param Database $database The Friendica Database instance - * @param IConfig $config The config - * @param Profiler $profiler The profiler of the app - * @param FileSystem $fileSystem FileSystem utils + * @param Database $database The Friendica Database instance + * @param \Friendica\Core\Config\Capability\IManageConfigValues $config The config + * @param Profiler $profiler The profiler of the app + * @param FileSystem $fileSystem FileSystem utils * * @return LoggerInterface The PSR-3 compliant logger instance */ - public function create(Database $database, IConfig $config, Profiler $profiler, FileSystem $fileSystem) + public function create(Database $database, IManageConfigValues $config, Profiler $profiler, FileSystem $fileSystem) { if (empty($config->get('system', 'debugging', false))) { $logger = new VoidLogger(); @@ -156,16 +156,16 @@ class LoggerFactory * * It should never get filled during normal usage of Friendica * - * @param IConfig $config The config - * @param Profiler $profiler The profiler of the app - * @param FileSystem $fileSystem FileSystem utils + * @param \Friendica\Core\Config\Capability\IManageConfigValues $config The config + * @param Profiler $profiler The profiler of the app + * @param FileSystem $fileSystem FileSystem utils * * @return LoggerInterface The PSR-3 compliant logger instance * * @throws InternalServerErrorException * @throws \Exception */ - public static function createDev(IConfig $config, Profiler $profiler, FileSystem $fileSystem) + public static function createDev(IManageConfigValues $config, Profiler $profiler, FileSystem $fileSystem) { $debugging = $config->get('system', 'debugging'); $stream = $config->get('system', 'dlogfile'); diff --git a/src/Model/Storage/FilesystemConfig.php b/src/Model/Storage/FilesystemConfig.php index 735808e82..4c71d6cfd 100644 --- a/src/Model/Storage/FilesystemConfig.php +++ b/src/Model/Storage/FilesystemConfig.php @@ -21,7 +21,7 @@ namespace Friendica\Model\Storage; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\L10n; /** @@ -32,7 +32,7 @@ class FilesystemConfig implements IStorageConfiguration // Default base folder const DEFAULT_BASE_FOLDER = 'storage'; - /** @var IConfig */ + /** @var IManageConfigValues */ private $config; /** @var string */ @@ -54,10 +54,10 @@ class FilesystemConfig implements IStorageConfiguration /** * Filesystem constructor. * - * @param IConfig $config - * @param L10n $l10n + * @param \Friendica\Core\Config\Capability\IManageConfigValues $config + * @param L10n $l10n */ - public function __construct(IConfig $config, L10n $l10n) + public function __construct(IManageConfigValues $config, L10n $l10n) { $this->config = $config; $this->l10n = $l10n; diff --git a/src/Model/User/Cookie.php b/src/Model/User/Cookie.php index ca17ae09d..d0db091cb 100644 --- a/src/Model/User/Cookie.php +++ b/src/Model/User/Cookie.php @@ -22,7 +22,7 @@ namespace Friendica\Model\User; use Friendica\App; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; /** * Interacting with the Friendica Cookie of a user @@ -52,12 +52,12 @@ class Cookie private $data; /** - * @param IConfig $config - * @param App\BaseURL $baseURL - * @param array $SERVER The $_SERVER array - * @param array $COOKIE The $_COOKIE array + * @param \Friendica\Core\Config\Capability\IManageConfigValues $config + * @param App\BaseURL $baseURL + * @param array $SERVER The $_SERVER array + * @param array $COOKIE The $_COOKIE array */ - public function __construct(IConfig $config, App\BaseURL $baseURL, array $SERVER = [], array $COOKIE = []) + public function __construct(IManageConfigValues $config, App\BaseURL $baseURL, array $SERVER = [], array $COOKIE = []) { $this->sslEnabled = $baseURL->getSSLPolicy() === App\BaseURL::SSL_POLICY_FULL; $this->sitePrivateKey = $config->get('system', 'site_prvkey'); diff --git a/src/Module/Admin/Summary.php b/src/Module/Admin/Summary.php index 5077d3b5d..078f08721 100644 --- a/src/Module/Admin/Summary.php +++ b/src/Module/Admin/Summary.php @@ -22,18 +22,18 @@ namespace Friendica\Module\Admin; use Friendica\Core\Addon; -use Friendica\Core\Config\Cache\Cache; +use Friendica\Core\Config\ValueObject\Cache; use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\Core\Update; use Friendica\Database\DBA; use Friendica\Database\DBStructure; use Friendica\DI; -use Friendica\Core\Config\Factory\ConfigFactory; +use Friendica\Core\Config\Factory\Config; use Friendica\Model\Register; use Friendica\Module\BaseAdmin; use Friendica\Network\HTTPException\InternalServerErrorException; -use Friendica\Core\Config\Cache\ConfigFileLoader; +use Friendica\Core\Config\Util\ConfigFileLoader; use Friendica\Util\DateTimeFormat; class Summary extends BaseAdmin @@ -152,7 +152,7 @@ class Summary extends BaseAdmin } // check legacy basepath settings - $configLoader = (new ConfigFactory())->createConfigFileLoader($a->getBasePath(), $_SERVER); + $configLoader = (new Config())->createConfigFileLoader($a->getBasePath(), $_SERVER); $configCache = new Cache(); $configLoader->setupCache($configCache); $confBasepath = $configCache->get('system', 'basepath'); diff --git a/src/Module/Install.php b/src/Module/Install.php index b9ae763b7..bcd029246 100644 --- a/src/Module/Install.php +++ b/src/Module/Install.php @@ -24,7 +24,7 @@ namespace Friendica\Module; use Friendica\App; use Friendica\BaseModule; use Friendica\Core; -use Friendica\Core\Config\Cache\Cache; +use Friendica\Core\Config\ValueObject\Cache; use Friendica\Core\Renderer; use Friendica\Core\Theme; use Friendica\DI; @@ -371,11 +371,11 @@ class Install extends BaseModule /** * Checks the $_POST settings and updates the config Cache for it * - * @param Cache $configCache The current config cache - * @param array $post The $_POST data - * @param string $cat The category of the setting - * @param string $key The key of the setting - * @param null|string $default The default value + * @param \Friendica\Core\Config\ValueObject\Cache $configCache The current config cache + * @param array $post The $_POST data + * @param string $cat The category of the setting + * @param string $key The key of the setting + * @param null|string $default The default value */ private static function checkSetting(Cache $configCache, array $post, $cat, $key, $default = null) { diff --git a/src/Navigation/Notifications/Factory/Introduction.php b/src/Navigation/Notifications/Factory/Introduction.php index 916ddff67..c3a3cd46d 100644 --- a/src/Navigation/Notifications/Factory/Introduction.php +++ b/src/Navigation/Notifications/Factory/Introduction.php @@ -27,9 +27,9 @@ use Friendica\App\BaseURL; use Friendica\BaseFactory; use Friendica\Content\Text\BBCode; use Friendica\Core\L10n; -use Friendica\Core\PConfig\IPConfig; +use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; use Friendica\Core\Protocol; -use Friendica\Core\Session\ISession; +use Friendica\Core\Session\Capability\IHandleSessions; use Friendica\Database\Database; use Friendica\Model\Contact; use Friendica\Module\BaseNotifications; @@ -51,14 +51,14 @@ class Introduction extends BaseFactory private $baseUrl; /** @var L10n */ private $l10n; - /** @var IPConfig */ + /** @var \Friendica\Core\PConfig\Capability\IManagePersonalConfigValues */ private $pConfig; - /** @var ISession */ + /** @var \Friendica\Core\Session\Capability\IHandleSessions */ private $session; /** @var string */ private $nick; - public function __construct(LoggerInterface $logger, Database $dba, BaseURL $baseUrl, L10n $l10n, App $app, IPConfig $pConfig, ISession $session) + public function __construct(LoggerInterface $logger, Database $dba, BaseURL $baseUrl, L10n $l10n, App $app, IManagePersonalConfigValues $pConfig, IHandleSessions $session) { parent::__construct($logger); diff --git a/src/Navigation/Notifications/Repository/Notify.php b/src/Navigation/Notifications/Repository/Notify.php index 3a6a4133c..a259150cf 100644 --- a/src/Navigation/Notifications/Repository/Notify.php +++ b/src/Navigation/Notifications/Repository/Notify.php @@ -5,7 +5,7 @@ namespace Friendica\Navigation\Notifications\Repository; use Friendica\App\BaseURL; use Friendica\BaseRepository; use Friendica\Content\Text\Plaintext; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Hook; use Friendica\Core\L10n; use Friendica\Core\System; @@ -33,7 +33,7 @@ class Notify extends BaseRepository /** @var BaseURL */ protected $baseUrl; - /** @var IConfig */ + /** @var \Friendica\Core\Config\Capability\IManageConfigValues */ protected $config; /** @var Emailer */ @@ -44,7 +44,7 @@ class Notify extends BaseRepository protected static $table_name = 'notify'; - public function __construct(Database $database, LoggerInterface $logger, L10n $l10n, BaseURL $baseUrl, IConfig $config, Emailer $emailer, Factory\Notification $notification, Factory\Notify $factory = null) + public function __construct(Database $database, LoggerInterface $logger, L10n $l10n, BaseURL $baseUrl, IManageConfigValues $config, Emailer $emailer, Factory\Notification $notification, Factory\Notify $factory = null) { $this->l10n = $l10n; $this->baseUrl = $baseUrl; diff --git a/src/Security/Authentication.php b/src/Security/Authentication.php index c0dc1e9aa..ce8bc3e32 100644 --- a/src/Security/Authentication.php +++ b/src/Security/Authentication.php @@ -23,8 +23,8 @@ namespace Friendica\Security; use Exception; use Friendica\App; -use Friendica\Core\Config\IConfig; -use Friendica\Core\PConfig\IPConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; use Friendica\Core\Hook; use Friendica\Core\Session; use Friendica\Core\System; @@ -46,7 +46,7 @@ use Psr\Log\LoggerInterface; */ class Authentication { - /** @var IConfig */ + /** @var IManageConfigValues */ private $config; /** @var App\Mode */ private $mode; @@ -60,25 +60,25 @@ class Authentication private $logger; /** @var User\Cookie */ private $cookie; - /** @var Session\ISession */ + /** @var \Friendica\Core\Session\Capability\IHandleSessions */ private $session; - /** @var IPConfig */ + /** @var IManagePersonalConfigValues */ private $pConfig; /** * Authentication constructor. * - * @param IConfig $config - * @param App\Mode $mode - * @param App\BaseURL $baseUrl - * @param L10n $l10n - * @param Database $dba - * @param LoggerInterface $logger - * @param User\Cookie $cookie - * @param Session\ISession $session - * @param IPConfig $pConfig + * @param IManageConfigValues $config + * @param App\Mode $mode + * @param App\BaseURL $baseUrl + * @param L10n $l10n + * @param Database $dba + * @param LoggerInterface $logger + * @param User\Cookie $cookie + * @param \Friendica\Core\Session\Capability\IHandleSessions $session + * @param IManagePersonalConfigValues $pConfig */ - public function __construct(IConfig $config, App\Mode $mode, App\BaseURL $baseUrl, L10n $l10n, Database $dba, LoggerInterface $logger, User\Cookie $cookie, Session\ISession $session, IPConfig $pConfig) + public function __construct(IManageConfigValues $config, App\Mode $mode, App\BaseURL $baseUrl, L10n $l10n, Database $dba, LoggerInterface $logger, User\Cookie $cookie, Session\Capability\IHandleSessions $session, IManagePersonalConfigValues $pConfig) { $this->config = $config; $this->mode = $mode; diff --git a/src/Security/ExAuth.php b/src/Security/ExAuth.php index fd71dea71..0e1f42384 100644 --- a/src/Security/ExAuth.php +++ b/src/Security/ExAuth.php @@ -36,8 +36,8 @@ namespace Friendica\Security; use Exception; use Friendica\App; -use Friendica\Core\Config\IConfig; -use Friendica\Core\PConfig\IPConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; use Friendica\Database\Database; use Friendica\DI; use Friendica\Model\User; @@ -54,11 +54,11 @@ class ExAuth */ private $appMode; /** - * @var IConfig + * @var \Friendica\Core\Config\Capability\IManageConfigValues */ private $config; /** - * @var IPConfig + * @var IManagePersonalConfigValues */ private $pConfig; /** @@ -71,14 +71,15 @@ class ExAuth private $baseURL; /** - * @param App\Mode $appMode - * @param IConfig $config - * @param IPConfig $pConfig - * @param Database $dba - * @param App\BaseURL $baseURL + * @param App\Mode $appMode + * @param IManageConfigValues $config + * @param \Friendica\Core\PConfig\Capability\IManagePersonalConfigValues $pConfig + * @param Database $dba + * @param App\BaseURL $baseURL + * * @throws Exception */ - public function __construct(App\Mode $appMode, IConfig $config, IPConfig $pConfig, Database $dba, App\BaseURL $baseURL) + public function __construct(App\Mode $appMode, IManageConfigValues $config, IManagePersonalConfigValues $pConfig, Database $dba, App\BaseURL $baseURL) { $this->appMode = $appMode; $this->config = $config; diff --git a/src/Util/EMailer/MailBuilder.php b/src/Util/EMailer/MailBuilder.php index 56034a696..1e623535d 100644 --- a/src/Util/EMailer/MailBuilder.php +++ b/src/Util/EMailer/MailBuilder.php @@ -23,7 +23,7 @@ namespace Friendica\Util\EMailer; use Exception; use Friendica\App\BaseURL; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\L10n; use Friendica\Core\Renderer; use Friendica\Model\User; @@ -42,7 +42,7 @@ abstract class MailBuilder /** @var L10n */ protected $l10n; - /** @var IConfig */ + /** @var IManageConfigValues */ protected $config; /** @var BaseURL */ protected $baseUrl; @@ -64,7 +64,7 @@ abstract class MailBuilder /** @var int */ protected $recipientUid = null; - public function __construct(L10n $l10n, BaseURL $baseUrl, IConfig $config, LoggerInterface $logger) + public function __construct(L10n $l10n, BaseURL $baseUrl, IManageConfigValues $config, LoggerInterface $logger) { $this->l10n = $l10n; $this->baseUrl = $baseUrl; diff --git a/src/Util/EMailer/NotifyMailBuilder.php b/src/Util/EMailer/NotifyMailBuilder.php index c6323436d..0f25704c5 100644 --- a/src/Util/EMailer/NotifyMailBuilder.php +++ b/src/Util/EMailer/NotifyMailBuilder.php @@ -24,7 +24,7 @@ namespace Friendica\Util\EMailer; use Exception; use Friendica\App\BaseURL; use Friendica\Content\Text\BBCode; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\L10n; use Friendica\Core\Renderer; use Friendica\Network\HTTPException\InternalServerErrorException; @@ -70,7 +70,7 @@ class NotifyMailBuilder extends MailBuilder /** @var string The item link */ private $itemLink = ''; - public function __construct(L10n $l10n, BaseURL $baseUrl, IConfig $config, LoggerInterface $logger, string $siteEmailAddress, string $siteName) + public function __construct(L10n $l10n, BaseURL $baseUrl, IManageConfigValues $config, LoggerInterface $logger, string $siteEmailAddress, string $siteName) { parent::__construct($l10n, $baseUrl, $config, $logger); diff --git a/src/Util/EMailer/SystemMailBuilder.php b/src/Util/EMailer/SystemMailBuilder.php index b03fa4251..fef051a39 100644 --- a/src/Util/EMailer/SystemMailBuilder.php +++ b/src/Util/EMailer/SystemMailBuilder.php @@ -24,7 +24,7 @@ namespace Friendica\Util\EMailer; use Exception; use Friendica\App\BaseURL; use Friendica\Content\Text\BBCode; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\L10n; use Friendica\Core\Renderer; use Friendica\Network\HTTPException\InternalServerErrorException; @@ -45,7 +45,7 @@ class SystemMailBuilder extends MailBuilder /** @var string */ protected $siteAdmin; - public function __construct(L10n $l10n, BaseURL $baseUrl, IConfig $config, LoggerInterface $logger, + public function __construct(L10n $l10n, BaseURL $baseUrl, IManageConfigValues $config, LoggerInterface $logger, string $siteEmailAddress, string $siteName) { parent::__construct($l10n, $baseUrl, $config, $logger); diff --git a/src/Util/Emailer.php b/src/Util/Emailer.php index 8116fbf85..8e63b638f 100644 --- a/src/Util/Emailer.php +++ b/src/Util/Emailer.php @@ -22,10 +22,10 @@ namespace Friendica\Util; use Friendica\App; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Hook; use Friendica\Core\L10n; -use Friendica\Core\PConfig\IPConfig; +use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; use Friendica\Network\HTTPException\InternalServerErrorException; use Friendica\Object\EMail\IEmail; use Friendica\Protocol\Email; @@ -38,9 +38,9 @@ use Psr\Log\LoggerInterface; */ class Emailer { - /** @var IConfig */ + /** @var \Friendica\Core\Config\Capability\IManageConfigValues */ private $config; - /** @var IPConfig */ + /** @var \Friendica\Core\PConfig\Capability\IManagePersonalConfigValues */ private $pConfig; /** @var LoggerInterface */ private $logger; @@ -54,7 +54,7 @@ class Emailer /** @var string */ private $siteEmailName; - public function __construct(IConfig $config, IPConfig $pConfig, App\BaseURL $baseURL, LoggerInterface $logger, + public function __construct(IManageConfigValues $config, IManagePersonalConfigValues $pConfig, App\BaseURL $baseURL, LoggerInterface $logger, L10n $defaultLang) { $this->config = $config; diff --git a/src/Util/Profiler.php b/src/Util/Profiler.php index 0ff338353..7e04ee563 100644 --- a/src/Util/Profiler.php +++ b/src/Util/Profiler.php @@ -21,8 +21,8 @@ namespace Friendica\Util; -use Friendica\Core\Config\Cache\Cache; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\ValueObject\Cache; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\System; use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerInterface; @@ -69,16 +69,16 @@ class Profiler implements ContainerInterface /** * Updates the enabling of the current profiler * - * @param IConfig $config + * @param IManageConfigValues $config */ - public function update(IConfig $config) + public function update(IManageConfigValues $config) { $this->enabled = $config->get('system', 'profiler'); $this->rendertime = $config->get('rendertime', 'callstack'); } /** - * @param \Friendica\Core\Config\Cache\Cache $configCache The configuration cache + * @param \Friendica\Core\Config\ValueObject\Cache $configCache The configuration cache */ public function __construct(Cache $configCache) { diff --git a/static/dependencies.config.php b/static/dependencies.config.php index 4591f4761..f4aacb340 100644 --- a/static/dependencies.config.php +++ b/static/dependencies.config.php @@ -41,7 +41,7 @@ use Friendica\Core\PConfig; use Friendica\Core\L10n; use Friendica\Core\Lock; use Friendica\Core\Process; -use Friendica\Core\Session\ISession; +use Friendica\Core\Session\Capability\IHandleSessions; use Friendica\Core\StorageManager; use Friendica\Database\Database; use Friendica\Factory; @@ -74,8 +74,8 @@ return [ $_SERVER ] ], - Config\Cache\ConfigFileLoader::class => [ - 'instanceOf' => Config\Factory\ConfigFactory::class, + Config\Util\ConfigFileLoader::class => [ + 'instanceOf' => Config\Factory\Config::class, 'call' => [ ['createConfigFileLoader', [ [Dice::INSTANCE => '$basepath'], @@ -83,8 +83,8 @@ return [ ], Dice::CHAIN_CALL], ], ], - Config\Cache\Cache::class => [ - 'instanceOf' => Config\Factory\ConfigFactory::class, + Config\ValueObject\Cache::class => [ + 'instanceOf' => Config\Factory\Config::class, 'call' => [ ['createCache', [$_SERVER], Dice::CHAIN_CALL], ], @@ -95,14 +95,14 @@ return [ ['determine', [], Dice::CHAIN_CALL], ], ], - Config\IConfig::class => [ - 'instanceOf' => Config\Factory\ConfigFactory::class, + Config\Capability\IManageConfigValues::class => [ + 'instanceOf' => Config\Factory\Config::class, 'call' => [ ['create', [], Dice::CHAIN_CALL], ], ], - PConfig\IPConfig::class => [ - 'instanceOf' => PConfig\Factory\PConfigFactory::class, + PConfig\Capability\IManagePersonalConfigValues::class => [ + 'instanceOf' => PConfig\Factory\PConfig::class, 'call' => [ ['create', [], Dice::CHAIN_CALL], ] @@ -158,20 +158,20 @@ return [ ['createDev', [], Dice::CHAIN_CALL], ] ], - Cache\ICache::class => [ - 'instanceOf' => Cache\Factory\CacheFactory::class, + Cache\Capability\ICanCache::class => [ + 'instanceOf' => Cache\Factory\Cache::class, 'call' => [ ['create', [], Dice::CHAIN_CALL], ], ], - Cache\IMemoryCache::class => [ - 'instanceOf' => Cache\Factory\CacheFactory::class, + Cache\Capability\ICanCacheInMemory::class => [ + 'instanceOf' => Cache\Factory\Cache::class, 'call' => [ ['create', [], Dice::CHAIN_CALL], ], ], - Lock\ILock::class => [ - 'instanceOf' => Lock\Factory\LockFactory::class, + Lock\Capability\ICanLock::class => [ + 'instanceOf' => Lock\Factory\Lock::class, 'call' => [ ['create', [], Dice::CHAIN_CALL], ], @@ -206,8 +206,8 @@ return [ $_SERVER, $_GET ], ], - ISession::class => [ - 'instanceOf' => \Friendica\Core\Session\Factory\SessionFactory::class, + IHandleSessions::class => [ + 'instanceOf' => \Friendica\Core\Session\Factory\Session::class, 'call' => [ ['createSession', [$_SERVER], Dice::CHAIN_CALL], ['start', [], Dice::CHAIN_CALL], diff --git a/tests/FixtureTest.php b/tests/FixtureTest.php index c09f874fa..17e606a9e 100644 --- a/tests/FixtureTest.php +++ b/tests/FixtureTest.php @@ -6,10 +6,10 @@ namespace Friendica\Test; use Dice\Dice; -use Friendica\Core\Config\Cache\Cache; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\ValueObject\Cache; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Session; -use Friendica\Core\Session\ISession; +use Friendica\Core\Session\Capability\IHandleSessions; use Friendica\Database\Database; use Friendica\Database\DBStructure; use Friendica\DI; @@ -33,10 +33,10 @@ abstract class FixtureTest extends DatabaseTest $this->dice = (new Dice()) ->addRules(include __DIR__ . '/../static/dependencies.config.php') ->addRule(Database::class, ['instanceOf' => StaticDatabase::class, 'shared' => true]) - ->addRule(ISession::class, ['instanceOf' => Session\Type\Memory::class, 'shared' => true, 'call' => null]); + ->addRule(IHandleSessions::class, ['instanceOf' => Session\Type\Memory::class, 'shared' => true, 'call' => null]); DI::init($this->dice); - /** @var IConfig $config */ + /** @var IManageConfigValues $config */ $configCache = $this->dice->create(Cache::class); $configCache->set('database', 'disable_pdo', true); diff --git a/tests/Util/AppMockTrait.php b/tests/Util/AppMockTrait.php index cca9bd37e..4e6e8640d 100644 --- a/tests/Util/AppMockTrait.php +++ b/tests/Util/AppMockTrait.php @@ -42,7 +42,7 @@ trait AppMockTrait protected $app; /** - * @var MockInterface|Config\IConfig The mocked Config Cache + * @var MockInterface|\Friendica\Core\Config\Capability\IManageConfigValues The mocked Config Cache */ protected $configMock; @@ -74,21 +74,21 @@ trait AppMockTrait $this->dice = \Mockery::mock(Dice::class)->makePartial(); $this->dice = $this->dice->addRules(include __DIR__ . '/../../static/dependencies.config.php'); - $this->configMock = \Mockery::mock(Config\Cache\Cache::class); + $this->configMock = \Mockery::mock(Config\ValueObject\Cache::class); $this->dice->shouldReceive('create') - ->with(Config\Cache\Cache::class) + ->with(Config\ValueObject\Cache::class) ->andReturn($this->configMock); $this->mode = \Mockery::mock(App\Mode::class); $this->dice->shouldReceive('create') ->with(App\Mode::class) ->andReturn($this->mode); - $configModel= \Mockery::mock(Config\Model\Config::class); + $configModel= \Mockery::mock(Config\Repository\Config::class); // Disable the adapter $configModel->shouldReceive('isConnected')->andReturn(false); $config = new Config\Type\JitConfig($this->configMock, $configModel); $this->dice->shouldReceive('create') - ->with(Config\IConfig::class) + ->with(Config\Capability\IManageConfigValues::class) ->andReturn($config); // Mocking App and most used functions diff --git a/tests/functional/DependencyCheckTest.php b/tests/functional/DependencyCheckTest.php index 3d207d07d..9065ca168 100644 --- a/tests/functional/DependencyCheckTest.php +++ b/tests/functional/DependencyCheckTest.php @@ -23,15 +23,15 @@ namespace Friendica\Test\functional; use Dice\Dice; use Friendica\App; -use Friendica\Core\Cache\ICache; -use Friendica\Core\Cache\IMemoryCache; -use Friendica\Core\Config\Cache\Cache; -use Friendica\Core\Config\IConfig; -use Friendica\Core\Lock\ILock; +use Friendica\Core\Cache\Capability\ICanCache; +use Friendica\Core\Cache\Capability\ICanCacheInMemory; +use Friendica\Core\Config\ValueObject\Cache; +use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\Lock\Capability\ICanLock; use Friendica\Database\Database; use Friendica\Test\Util\VFSTrait; use Friendica\Util\BasePath; -use Friendica\Core\Config\Cache\ConfigFileLoader; +use Friendica\Core\Config\Util\ConfigFileLoader; use Friendica\Util\Profiler; use PHPUnit\Framework\TestCase; use Psr\Log\LoggerInterface; @@ -158,10 +158,10 @@ class DependencyCheckTest extends TestCase public function testConfiguration() { - /** @var IConfig $config */ - $config = $this->dice->create(IConfig::class); + /** @var IManageConfigValues $config */ + $config = $this->dice->create(IManageConfigValues::class); - self::assertInstanceOf(IConfig::class, $config); + self::assertInstanceOf(IManageConfigValues::class, $config); self::assertNotEmpty($config->get('database', 'username')); } @@ -176,8 +176,8 @@ class DependencyCheckTest extends TestCase public function testDevLogger() { - /** @var IConfig $config */ - $config = $this->dice->create(IConfig::class); + /** @var IManageConfigValues $config */ + $config = $this->dice->create(IManageConfigValues::class); $config->set('system', 'dlogfile', $this->root->url() . '/friendica.log'); /** @var LoggerInterface $logger */ @@ -188,26 +188,26 @@ class DependencyCheckTest extends TestCase public function testCache() { - /** @var ICache $cache */ - $cache = $this->dice->create(ICache::class); + /** @var ICanCache $cache */ + $cache = $this->dice->create(ICanCache::class); - self::assertInstanceOf(ICache::class, $cache); + self::assertInstanceOf(ICanCache::class, $cache); } public function testMemoryCache() { - /** @var IMemoryCache $cache */ - $cache = $this->dice->create(IMemoryCache::class); + /** @var ICanCacheInMemory $cache */ + $cache = $this->dice->create(ICanCacheInMemory::class); // We need to check "just" ICache, because the default Cache is DB-Cache, which isn't a memorycache - self::assertInstanceOf(ICache::class, $cache); + self::assertInstanceOf(ICanCache::class, $cache); } public function testLock() { - /** @var ILock $cache */ - $lock = $this->dice->create(ILock::class); + /** @var ICanLock $cache */ + $lock = $this->dice->create(ICanLock::class); - self::assertInstanceOf(ILock::class, $lock); + self::assertInstanceOf(ICanLock::class, $lock); } } diff --git a/tests/legacy/ApiTest.php b/tests/legacy/ApiTest.php index 553eef2a0..90de2d647 100644 --- a/tests/legacy/ApiTest.php +++ b/tests/legacy/ApiTest.php @@ -6,8 +6,8 @@ namespace Friendica\Test\legacy; use Friendica\App; -use Friendica\Core\Config\IConfig; -use Friendica\Core\PConfig\IPConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; use Friendica\Core\Protocol; use Friendica\DI; use Friendica\Network\HTTPException; @@ -45,7 +45,7 @@ class ApiTest extends FixtureTest /** @var App */ protected $app; - /** @var IConfig */ + /** @var IManageConfigValues */ protected $config; /** @@ -59,8 +59,8 @@ class ApiTest extends FixtureTest parent::setUp(); - /** @var IConfig $config */ - $this->config = $this->dice->create(IConfig::class); + /** @var \Friendica\Core\Config\Capability\IManageConfigValues $config */ + $this->config = $this->dice->create(IManageConfigValues::class); $this->config->set('system', 'url', 'http://localhost'); $this->config->set('system', 'hostname', 'localhost'); @@ -813,7 +813,7 @@ class ApiTest extends FixtureTest */ public function testApiGetUserWithFrioSchema() { - $pConfig = $this->dice->create(IPConfig::class); + $pConfig = $this->dice->create(IManagePersonalConfigValues::class); $pConfig->set($this->selfUser['id'], 'frio', 'schema', 'red'); $user = api_get_user($this->app); self::assertSelfUser($user); @@ -829,7 +829,7 @@ class ApiTest extends FixtureTest */ public function testApiGetUserWithEmptyFrioSchema() { - $pConfig = $this->dice->create(IPConfig::class); + $pConfig = $this->dice->create(IManagePersonalConfigValues::class); $pConfig->set($this->selfUser['id'], 'frio', 'schema', '---'); $user = api_get_user($this->app); self::assertSelfUser($user); @@ -845,7 +845,7 @@ class ApiTest extends FixtureTest */ public function testApiGetUserWithCustomFrioSchema() { - $pConfig = $this->dice->create(IPConfig::class); + $pConfig = $this->dice->create(IManagePersonalConfigValues::class); $pConfig->set($this->selfUser['id'], 'frio', 'schema', '---'); $pConfig->set($this->selfUser['id'], 'frio', 'nav_bg', '#123456'); $pConfig->set($this->selfUser['id'], 'frio', 'link_color', '#123456'); diff --git a/tests/src/App/ModeTest.php b/tests/src/App/ModeTest.php index c3a5c5e72..9f38a2546 100644 --- a/tests/src/App/ModeTest.php +++ b/tests/src/App/ModeTest.php @@ -24,7 +24,7 @@ namespace Friendica\Test\src\App; use Detection\MobileDetect; use Friendica\App\Mode; use Friendica\App\Module; -use Friendica\Core\Config\Cache\Cache; +use Friendica\Core\Config\ValueObject\Cache; use Friendica\Database\Database; use Friendica\Test\MockedTest; use Friendica\Test\Util\VFSTrait; diff --git a/tests/src/App/ModuleTest.php b/tests/src/App/ModuleTest.php index 730d1d886..a928a96bf 100644 --- a/tests/src/App/ModuleTest.php +++ b/tests/src/App/ModuleTest.php @@ -22,10 +22,10 @@ namespace Friendica\Test\src\App; use Friendica\App; -use Friendica\Core\Cache\ICache; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Cache\Capability\ICanCache; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\L10n; -use Friendica\Core\Lock\ILock; +use Friendica\Core\Lock\Capability\ICanLock; use Friendica\LegacyModule; use Friendica\Module\HTTPException\PageNotFound; use Friendica\Module\WellKnown\HostMeta; @@ -172,18 +172,18 @@ class ModuleTest extends DatabaseTest */ public function testModuleClass($assert, string $name, string $command, bool $privAdd) { - $config = Mockery::mock(IConfig::class); + $config = Mockery::mock(IManageConfigValues::class); $config->shouldReceive('get')->with('config', 'private_addons', false)->andReturn($privAdd)->atMost()->once(); $l10n = Mockery::mock(L10n::class); $l10n->shouldReceive('t')->andReturnUsing(function ($args) { return $args; }); - $cache = Mockery::mock(ICache::class); + $cache = Mockery::mock(ICanCache::class); $cache->shouldReceive('get')->with('routerDispatchData')->andReturn('')->atMost()->once(); $cache->shouldReceive('get')->with('lastRoutesFileModifiedTime')->andReturn('')->atMost()->once(); $cache->shouldReceive('set')->withAnyArgs()->andReturn(false)->atMost()->twice(); - $lock = Mockery::mock(ILock::class); + $lock = Mockery::mock(ICanLock::class); $lock->shouldReceive('acquire')->andReturn(true); $lock->shouldReceive('isLocked')->andReturn(false); diff --git a/tests/src/App/RouterTest.php b/tests/src/App/RouterTest.php index 3a3c0469b..1e9e5d5ee 100644 --- a/tests/src/App/RouterTest.php +++ b/tests/src/App/RouterTest.php @@ -22,9 +22,9 @@ namespace Friendica\Test\src\App; use Friendica\App\Router; -use Friendica\Core\Cache\ICache; +use Friendica\Core\Cache\Capability\ICanCache; use Friendica\Core\L10n; -use Friendica\Core\Lock\ILock; +use Friendica\Core\Lock\Capability\ICanLock; use Friendica\Module; use Friendica\Network\HTTPException\MethodNotAllowedException; use Friendica\Network\HTTPException\NotFoundException; @@ -37,11 +37,11 @@ class RouterTest extends TestCase /** @var L10n|MockInterface */ private $l10n; /** - * @var ICache + * @var ICanCache */ private $cache; /** - * @var ILock + * @var \Friendica\Core\Lock\Capability\ICanLock */ private $lock; @@ -52,11 +52,11 @@ class RouterTest extends TestCase $this->l10n = Mockery::mock(L10n::class); $this->l10n->shouldReceive('t')->andReturnUsing(function ($args) { return $args; }); - $this->cache = Mockery::mock(ICache::class); + $this->cache = Mockery::mock(ICanCache::class); $this->cache->shouldReceive('get')->andReturn(null); $this->cache->shouldReceive('set')->andReturn(false); - $this->lock = Mockery::mock(ILock::class); + $this->lock = Mockery::mock(ICanLock::class); $this->lock->shouldReceive('acquire')->andReturn(true); $this->lock->shouldReceive('isLocked')->andReturn(false); } diff --git a/tests/src/Console/AutomaticInstallationConsoleTest.php b/tests/src/Console/AutomaticInstallationConsoleTest.php index f11d38365..760a732d6 100644 --- a/tests/src/Console/AutomaticInstallationConsoleTest.php +++ b/tests/src/Console/AutomaticInstallationConsoleTest.php @@ -24,7 +24,7 @@ namespace Friendica\Test\src\Console; use Dice\Dice; use Friendica\App; use Friendica\Console\AutomaticInstallation; -use Friendica\Core\Config\Cache\Cache; +use Friendica\Core\Config\ValueObject\Cache; use Friendica\Core\Installer; use Friendica\Core\L10n; use Friendica\Core\Logger; @@ -53,7 +53,7 @@ class AutomaticInstallationConsoleTest extends ConsoleTest private $assertFileDb; /** - * @var \Friendica\Core\Config\Cache\Cache The configuration cache to check after each test + * @var \Friendica\Core\Config\ValueObject\Cache The configuration cache to check after each test */ private $configCache; diff --git a/tests/src/Console/ConfigConsoleTest.php b/tests/src/Console/ConfigConsoleTest.php index bea4399b3..36d8e8846 100644 --- a/tests/src/Console/ConfigConsoleTest.php +++ b/tests/src/Console/ConfigConsoleTest.php @@ -24,7 +24,7 @@ namespace Friendica\Test\src\Console; use Friendica\App; use Friendica\App\Mode; use Friendica\Console\Config; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Mockery; use Mockery\LegacyMockInterface; use Mockery\MockInterface; @@ -35,7 +35,7 @@ class ConfigConsoleTest extends ConsoleTest * @var App\Mode|MockInterface $appMode */ private $appMode; - /** @var IConfig|LegacyMockInterface|MockInterface */ + /** @var IManageConfigValues|LegacyMockInterface|MockInterface */ private $configMock; protected function setUp() : void @@ -52,7 +52,7 @@ class ConfigConsoleTest extends ConsoleTest $this->appMode->shouldReceive('has') ->andReturn(true); - $this->configMock = Mockery::mock(IConfig::class); + $this->configMock = Mockery::mock(IManageConfigValues::class); } public function testSetGetKeyValue() diff --git a/tests/src/Console/LockConsoleTest.php b/tests/src/Console/LockConsoleTest.php index 1f33be100..b8bbfc0b0 100644 --- a/tests/src/Console/LockConsoleTest.php +++ b/tests/src/Console/LockConsoleTest.php @@ -24,7 +24,7 @@ namespace Friendica\Test\src\Console; use Friendica\App; use Friendica\App\Mode; use Friendica\Console\Lock; -use Friendica\Core\Lock\ILock; +use Friendica\Core\Lock\Capability\ICanLock; use Mockery; use Mockery\MockInterface; @@ -36,7 +36,7 @@ class LockConsoleTest extends ConsoleTest private $appMode; /** - * @var ILock|MockInterface + * @var ICanLock|MockInterface */ private $lockMock; @@ -54,7 +54,7 @@ class LockConsoleTest extends ConsoleTest $this->appMode->shouldReceive('has') ->andReturn(true); - $this->lockMock = Mockery::mock(ILock::class); + $this->lockMock = Mockery::mock(ICanLock::class); } public function testList() diff --git a/tests/src/Console/ServerBlockConsoleTest.php b/tests/src/Console/ServerBlockConsoleTest.php index e19ebf9cb..c060a889e 100644 --- a/tests/src/Console/ServerBlockConsoleTest.php +++ b/tests/src/Console/ServerBlockConsoleTest.php @@ -22,7 +22,7 @@ namespace Friendica\Test\src\Console; use Friendica\Console\ServerBlock; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Mockery; class ServerBlockConsoleTest extends ConsoleTest @@ -38,7 +38,7 @@ class ServerBlockConsoleTest extends ConsoleTest ] ]; /** - * @var IConfig|Mockery\LegacyMockInterface|Mockery\MockInterface + * @var IManageConfigValues|Mockery\LegacyMockInterface|Mockery\MockInterface */ private $configMock; @@ -46,7 +46,7 @@ class ServerBlockConsoleTest extends ConsoleTest { parent::setUp(); - $this->configMock = Mockery::mock(IConfig::class); + $this->configMock = Mockery::mock(IManageConfigValues::class); } /** diff --git a/tests/src/Core/Cache/CacheTest.php b/tests/src/Core/Cache/CacheTest.php index 5e5d1c17d..b57aab391 100644 --- a/tests/src/Core/Cache/CacheTest.php +++ b/tests/src/Core/Cache/CacheTest.php @@ -21,8 +21,8 @@ namespace Friendica\Test\src\Core\Cache; -use Friendica\Core\Cache\ICache; -use Friendica\Core\Cache\IMemoryCache; +use Friendica\Core\Cache\Capability\ICanCache; +use Friendica\Core\Cache\Capability\ICanCacheInMemory; use Friendica\Test\MockedTest; use Friendica\Util\PidFile; @@ -34,12 +34,12 @@ abstract class CacheTest extends MockedTest protected $startTime = 1417011228; /** - * @var ICache + * @var ICanCache */ protected $instance; /** - * @var IMemoryCache + * @var \Friendica\Core\Cache\Capability\ICanCacheInMemory */ protected $cache; diff --git a/tests/src/Core/Cache/DatabaseCacheTest.php b/tests/src/Core/Cache/DatabaseCacheTest.php index 55011f87c..a1cc42840 100644 --- a/tests/src/Core/Cache/DatabaseCacheTest.php +++ b/tests/src/Core/Cache/DatabaseCacheTest.php @@ -22,7 +22,7 @@ namespace Friendica\Test\src\Core\Cache; use Friendica\Core\Cache; -use Friendica\Core\Config\Factory\ConfigFactory; +use Friendica\Core\Config\Factory\Config; use Friendica\Test\DatabaseTestTrait; use Friendica\Test\Util\Database\StaticDatabase; use Friendica\Test\Util\VFSTrait; @@ -53,8 +53,8 @@ class DatabaseCacheTest extends CacheTest $profiler->shouldReceive('saveTimestamp')->withAnyArgs()->andReturn(true); // load real config to avoid mocking every config-entry which is related to the Database class - $configFactory = new ConfigFactory(); - $loader = (new ConfigFactory())->createConfigFileLoader($this->root->url(), []); + $configFactory = new Config(); + $loader = (new Config())->createConfigFileLoader($this->root->url(), []); $configCache = $configFactory->createCache($loader); $dba = new StaticDatabase($configCache, $profiler, $logger); diff --git a/tests/src/Core/Cache/MemcacheCacheTest.php b/tests/src/Core/Cache/MemcacheCacheTest.php index 6916f5169..8b50a999d 100644 --- a/tests/src/Core/Cache/MemcacheCacheTest.php +++ b/tests/src/Core/Cache/MemcacheCacheTest.php @@ -23,7 +23,7 @@ namespace Friendica\Test\src\Core\Cache; use Exception; use Friendica\Core\Cache\Type\MemcacheCache; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Mockery; /** @@ -34,7 +34,7 @@ class MemcacheCacheTest extends MemoryCacheTest { protected function getInstance() { - $configMock = Mockery::mock(IConfig::class); + $configMock = Mockery::mock(IManageConfigValues::class); $host = $_SERVER['MEMCACHE_HOST'] ?? 'localhost'; $port = $_SERVER['MEMCACHE_PORT'] ?? '11211'; diff --git a/tests/src/Core/Cache/MemcachedCacheTest.php b/tests/src/Core/Cache/MemcachedCacheTest.php index cc912e364..831458c33 100644 --- a/tests/src/Core/Cache/MemcachedCacheTest.php +++ b/tests/src/Core/Cache/MemcachedCacheTest.php @@ -23,7 +23,7 @@ namespace Friendica\Test\src\Core\Cache; use Exception; use Friendica\Core\Cache\Type\MemcachedCache; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Mockery; use Psr\Log\NullLogger; @@ -35,7 +35,7 @@ class MemcachedCacheTest extends MemoryCacheTest { protected function getInstance() { - $configMock = Mockery::mock(IConfig::class); + $configMock = Mockery::mock(IManageConfigValues::class); $host = $_SERVER['MEMCACHED_HOST'] ?? 'localhost'; $port = $_SERVER['MEMCACHED_PORT'] ?? '11211'; diff --git a/tests/src/Core/Cache/MemoryCacheTest.php b/tests/src/Core/Cache/MemoryCacheTest.php index eca25fa69..5159cb458 100644 --- a/tests/src/Core/Cache/MemoryCacheTest.php +++ b/tests/src/Core/Cache/MemoryCacheTest.php @@ -22,12 +22,12 @@ namespace Friendica\Test\src\Core\Cache; use Exception; -use Friendica\Core\Cache\IMemoryCache; +use Friendica\Core\Cache\Capability\ICanCacheInMemory; abstract class MemoryCacheTest extends CacheTest { /** - * @var IMemoryCache + * @var \Friendica\Core\Cache\Capability\ICanCacheInMemory */ protected $instance; @@ -35,7 +35,7 @@ abstract class MemoryCacheTest extends CacheTest { parent::setUp(); - if (!($this->instance instanceof IMemoryCache)) { + if (!($this->instance instanceof ICanCacheInMemory)) { throw new Exception('MemoryCacheTest unsupported'); } } diff --git a/tests/src/Core/Cache/RedisCacheTest.php b/tests/src/Core/Cache/RedisCacheTest.php index f5c540d32..9a859cd10 100644 --- a/tests/src/Core/Cache/RedisCacheTest.php +++ b/tests/src/Core/Cache/RedisCacheTest.php @@ -23,7 +23,7 @@ namespace Friendica\Test\src\Core\Cache; use Exception; use Friendica\Core\Cache\Type\RedisCache; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Mockery; /** @@ -34,7 +34,7 @@ class RedisCacheTest extends MemoryCacheTest { protected function getInstance() { - $configMock = Mockery::mock(IConfig::class); + $configMock = Mockery::mock(IManageConfigValues::class); $host = $_SERVER['REDIS_HOST'] ?? 'localhost'; $port = $_SERVER['REDIS_PORT'] ?? 6379; diff --git a/tests/src/Core/Config/Cache/CacheTest.php b/tests/src/Core/Config/Cache/CacheTest.php index 530b5b482..b369127c0 100644 --- a/tests/src/Core/Config/Cache/CacheTest.php +++ b/tests/src/Core/Config/Cache/CacheTest.php @@ -49,7 +49,7 @@ class CacheTest extends MockedTest ]; } - private function assertConfigValues($data, Cache\Cache $configCache) + private function assertConfigValues($data, \Friendica\Core\Config\ValueObject\Cache $configCache) { foreach ($data as $cat => $values) { foreach ($values as $key => $value) { @@ -64,7 +64,7 @@ class CacheTest extends MockedTest */ public function testLoadConfigArray($data) { - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\Config\ValueObject\Cache(); $configCache->load($data); self::assertConfigValues($data, $configCache); @@ -83,27 +83,27 @@ class CacheTest extends MockedTest ] ]; - $configCache = new Cache\Cache(); - $configCache->load($data, Cache\Cache::SOURCE_DB); + $configCache = new \Friendica\Core\Config\ValueObject\Cache(); + $configCache->load($data, \Friendica\Core\Config\ValueObject\Cache::SOURCE_DB); // doesn't override - Low Priority due Config file - $configCache->load($override, Cache\Cache::SOURCE_FILE); + $configCache->load($override, \Friendica\Core\Config\ValueObject\Cache::SOURCE_FILE); self::assertConfigValues($data, $configCache); // override the value - High Prio due Server Env - $configCache->load($override, Cache\Cache::SOURCE_ENV); + $configCache->load($override, \Friendica\Core\Config\ValueObject\Cache::SOURCE_ENV); self::assertEquals($override['system']['test'], $configCache->get('system', 'test')); self::assertEquals($override['system']['boolTrue'], $configCache->get('system', 'boolTrue')); // Don't overwrite server ENV variables - even in load mode - $configCache->load($data, Cache\Cache::SOURCE_DB); + $configCache->load($data, \Friendica\Core\Config\ValueObject\Cache::SOURCE_DB); self::assertEquals($override['system']['test'], $configCache->get('system', 'test')); self::assertEquals($override['system']['boolTrue'], $configCache->get('system', 'boolTrue')); // Overwrite ENV variables with ENV variables - $configCache->load($data, Cache\Cache::SOURCE_ENV); + $configCache->load($data, \Friendica\Core\Config\ValueObject\Cache::SOURCE_ENV); self::assertConfigValues($data, $configCache); self::assertNotEquals($override['system']['test'], $configCache->get('system', 'test')); @@ -115,7 +115,7 @@ class CacheTest extends MockedTest */ public function testLoadConfigArrayWrong() { - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\Config\ValueObject\Cache(); // empty dataset $configCache->load([]); @@ -136,7 +136,7 @@ class CacheTest extends MockedTest */ public function testGetAll($data) { - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\Config\ValueObject\Cache(); $configCache->load($data); $all = $configCache->getAll(); @@ -151,7 +151,7 @@ class CacheTest extends MockedTest */ public function testSetGet($data) { - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\Config\ValueObject\Cache(); foreach ($data as $cat => $values) { foreach ($values as $key => $value) { @@ -167,7 +167,7 @@ class CacheTest extends MockedTest */ public function testGetEmpty() { - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\Config\ValueObject\Cache(); self::assertNull($configCache->get('something', 'value')); } @@ -177,7 +177,7 @@ class CacheTest extends MockedTest */ public function testGetCat() { - $configCache = new Cache\Cache([ + $configCache = new \Friendica\Core\Config\ValueObject\Cache([ 'system' => [ 'key1' => 'value1', 'key2' => 'value2', @@ -205,7 +205,7 @@ class CacheTest extends MockedTest */ public function testDelete($data) { - $configCache = new Cache\Cache($data); + $configCache = new \Friendica\Core\Config\ValueObject\Cache($data); foreach ($data as $cat => $values) { foreach ($values as $key => $value) { @@ -222,7 +222,7 @@ class CacheTest extends MockedTest */ public function testKeyDiffWithResult($data) { - $configCache = new Cache\Cache($data); + $configCache = new \Friendica\Core\Config\ValueObject\Cache($data); $diffConfig = [ 'fakeCat' => [ @@ -239,7 +239,7 @@ class CacheTest extends MockedTest */ public function testKeyDiffWithoutResult($data) { - $configCache = new Cache\Cache($data); + $configCache = new \Friendica\Core\Config\ValueObject\Cache($data); $diffConfig = $configCache->getAll(); @@ -251,7 +251,7 @@ class CacheTest extends MockedTest */ public function testPasswordHide() { - $configCache = new Cache\Cache([ + $configCache = new \Friendica\Core\Config\ValueObject\Cache([ 'database' => [ 'password' => 'supersecure', 'username' => 'notsecured', @@ -268,7 +268,7 @@ class CacheTest extends MockedTest */ public function testPasswordShow() { - $configCache = new Cache\Cache([ + $configCache = new \Friendica\Core\Config\ValueObject\Cache([ 'database' => [ 'password' => 'supersecure', 'username' => 'notsecured', @@ -285,7 +285,7 @@ class CacheTest extends MockedTest */ public function testEmptyPassword() { - $configCache = new Cache\Cache([ + $configCache = new \Friendica\Core\Config\ValueObject\Cache([ 'database' => [ 'password' => '', 'username' => '', @@ -299,7 +299,7 @@ class CacheTest extends MockedTest public function testWrongTypePassword() { - $configCache = new Cache\Cache([ + $configCache = new \Friendica\Core\Config\ValueObject\Cache([ 'database' => [ 'password' => new stdClass(), 'username' => '', @@ -309,7 +309,7 @@ class CacheTest extends MockedTest self::assertNotEmpty($configCache->get('database', 'password')); self::assertEmpty($configCache->get('database', 'username')); - $configCache = new Cache\Cache([ + $configCache = new \Friendica\Core\Config\ValueObject\Cache([ 'database' => [ 'password' => 23, 'username' => '', @@ -327,19 +327,19 @@ class CacheTest extends MockedTest public function testSetOverrides($data) { - $configCache = new Cache\Cache(); - $configCache->load($data, Cache\Cache::SOURCE_DB); + $configCache = new \Friendica\Core\Config\ValueObject\Cache(); + $configCache->load($data, \Friendica\Core\Config\ValueObject\Cache::SOURCE_DB); // test with wrong override - self::assertFalse($configCache->set('system', 'test', '1234567', Cache\Cache::SOURCE_FILE)); + self::assertFalse($configCache->set('system', 'test', '1234567', \Friendica\Core\Config\ValueObject\Cache::SOURCE_FILE)); self::assertEquals($data['system']['test'], $configCache->get('system', 'test')); // test with override (equal) - self::assertTrue($configCache->set('system', 'test', '8910', Cache\Cache::SOURCE_DB)); + self::assertTrue($configCache->set('system', 'test', '8910', \Friendica\Core\Config\ValueObject\Cache::SOURCE_DB)); self::assertEquals('8910', $configCache->get('system', 'test')); // test with override (over) - self::assertTrue($configCache->set('system', 'test', '111213', Cache\Cache::SOURCE_ENV)); + self::assertTrue($configCache->set('system', 'test', '111213', \Friendica\Core\Config\ValueObject\Cache::SOURCE_ENV)); self::assertEquals('111213', $configCache->get('system', 'test')); } } diff --git a/tests/src/Core/Config/Cache/ConfigFileLoaderTest.php b/tests/src/Core/Config/Cache/ConfigFileLoaderTest.php index ed5cfa1ef..dcb5b88de 100644 --- a/tests/src/Core/Config/Cache/ConfigFileLoaderTest.php +++ b/tests/src/Core/Config/Cache/ConfigFileLoaderTest.php @@ -22,10 +22,10 @@ namespace Friendica\Test\src\Core\Config\Cache; use Friendica\Core\Config\Cache; -use Friendica\Core\Config\Factory\ConfigFactory; +use Friendica\Core\Config\Factory\Config; use Friendica\Test\MockedTest; use Friendica\Test\Util\VFSTrait; -use Friendica\Core\Config\Cache\ConfigFileLoader; +use Friendica\Core\Config\Util\ConfigFileLoader; use org\bovigo\vfs\vfsStream; class ConfigFileLoaderTest extends MockedTest @@ -48,10 +48,10 @@ class ConfigFileLoaderTest extends MockedTest $configFileLoader = new ConfigFileLoader( $this->root->url(), - $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, - $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR + $this->root->url() . DIRECTORY_SEPARATOR . Config::CONFIG_DIR, + $this->root->url() . DIRECTORY_SEPARATOR . Config::STATIC_DIR ); - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\Config\ValueObject\Cache(); $configFileLoader->setupCache($configCache); @@ -74,10 +74,10 @@ class ConfigFileLoaderTest extends MockedTest $configFileLoader = new ConfigFileLoader( $this->root->url(), - $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, - $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR + $this->root->url() . DIRECTORY_SEPARATOR . Config::CONFIG_DIR, + $this->root->url() . DIRECTORY_SEPARATOR . Config::STATIC_DIR ); - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\Config\ValueObject\Cache(); $configFileLoader->setupCache($configCache); } @@ -103,10 +103,10 @@ class ConfigFileLoaderTest extends MockedTest $configFileLoader = new ConfigFileLoader( $this->root->url(), - $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, - $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR + $this->root->url() . DIRECTORY_SEPARATOR . Config::CONFIG_DIR, + $this->root->url() . DIRECTORY_SEPARATOR . Config::STATIC_DIR ); - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\Config\ValueObject\Cache(); $configFileLoader->setupCache($configCache); @@ -140,10 +140,10 @@ class ConfigFileLoaderTest extends MockedTest $configFileLoader = new ConfigFileLoader( $this->root->url(), - $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, - $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR + $this->root->url() . DIRECTORY_SEPARATOR . Config::CONFIG_DIR, + $this->root->url() . DIRECTORY_SEPARATOR . Config::STATIC_DIR ); - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\Config\ValueObject\Cache(); $configFileLoader->setupCache($configCache); @@ -174,12 +174,12 @@ class ConfigFileLoaderTest extends MockedTest ->at($this->root) ->setContent(file_get_contents($file)); - $configFileLoader = new ConfigFileLoader( + $configFileLoader = new \Friendica\Core\Config\Util\ConfigFileLoader( $this->root->url(), - $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, - $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR + $this->root->url() . DIRECTORY_SEPARATOR . Config::CONFIG_DIR, + $this->root->url() . DIRECTORY_SEPARATOR . Config::STATIC_DIR ); - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\Config\ValueObject\Cache(); $configFileLoader->setupCache($configCache); @@ -228,10 +228,10 @@ class ConfigFileLoaderTest extends MockedTest ->at($this->root->getChild('addon')->getChild('test')->getChild('config')) ->setContent(file_get_contents($file)); - $configFileLoader = new ConfigFileLoader( + $configFileLoader = new \Friendica\Core\Config\Util\ConfigFileLoader( $this->root->url(), - $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, - $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR + $this->root->url() . DIRECTORY_SEPARATOR . Config::CONFIG_DIR, + $this->root->url() . DIRECTORY_SEPARATOR . Config::STATIC_DIR ); $conf = $configFileLoader->loadAddonConfig('test'); @@ -265,12 +265,12 @@ class ConfigFileLoaderTest extends MockedTest ->at($this->root->getChild('config')) ->setContent(file_get_contents($fileDir . 'B.config.php')); - $configFileLoader = new ConfigFileLoader( + $configFileLoader = new \Friendica\Core\Config\Util\ConfigFileLoader( $this->root->url(), - $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, - $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR + $this->root->url() . DIRECTORY_SEPARATOR . Config::CONFIG_DIR, + $this->root->url() . DIRECTORY_SEPARATOR . Config::STATIC_DIR ); - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\Config\ValueObject\Cache(); $configFileLoader->setupCache($configCache); @@ -299,12 +299,12 @@ class ConfigFileLoaderTest extends MockedTest ->at($this->root->getChild('config')) ->setContent(file_get_contents($fileDir . 'B.ini.php')); - $configFileLoader = new ConfigFileLoader( + $configFileLoader = new \Friendica\Core\Config\Util\ConfigFileLoader( $this->root->url(), - $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, - $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR + $this->root->url() . DIRECTORY_SEPARATOR . Config::CONFIG_DIR, + $this->root->url() . DIRECTORY_SEPARATOR . Config::STATIC_DIR ); - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\Config\ValueObject\Cache(); $configFileLoader->setupCache($configCache); @@ -333,12 +333,12 @@ class ConfigFileLoaderTest extends MockedTest ->at($this->root->getChild('config')) ->setContent(file_get_contents($fileDir . 'B.ini.php')); - $configFileLoader = new ConfigFileLoader( + $configFileLoader = new \Friendica\Core\Config\Util\ConfigFileLoader( $this->root->url(), - $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, - $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR + $this->root->url() . DIRECTORY_SEPARATOR . Config::CONFIG_DIR, + $this->root->url() . DIRECTORY_SEPARATOR . Config::STATIC_DIR ); - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\Config\ValueObject\Cache(); $configFileLoader->setupCache($configCache); @@ -353,8 +353,8 @@ class ConfigFileLoaderTest extends MockedTest { $this->delConfigFile('local.config.php'); - $configFileLoader = (new ConfigFactory())->createConfigFileLoader($this->root->url(), ['FRIENDICA_CONFIG_DIR' => '/a/wrong/dir/']); - $configCache = new Cache\Cache(); + $configFileLoader = (new Config())->createConfigFileLoader($this->root->url(), ['FRIENDICA_CONFIG_DIR' => '/a/wrong/dir/']); + $configCache = new \Friendica\Core\Config\ValueObject\Cache(); $configFileLoader->setupCache($configCache); @@ -379,8 +379,8 @@ class ConfigFileLoaderTest extends MockedTest ->at($this->root->getChild('config2')) ->setContent(file_get_contents($fileDir . 'B.config.php')); - $configFileLoader = (new ConfigFactory())->createConfigFileLoader($this->root->url(), ['FRIENDICA_CONFIG_DIR' => $this->root->getChild('config2')->url()]); - $configCache = new Cache\Cache(); + $configFileLoader = (new Config())->createConfigFileLoader($this->root->url(), ['FRIENDICA_CONFIG_DIR' => $this->root->getChild('config2')->url()]); + $configCache = new \Friendica\Core\Config\ValueObject\Cache(); $configFileLoader->setupCache($configCache); diff --git a/tests/src/Core/Config/ConfigTest.php b/tests/src/Core/Config/ConfigTest.php index e77085987..0c9788c9c 100644 --- a/tests/src/Core/Config/ConfigTest.php +++ b/tests/src/Core/Config/ConfigTest.php @@ -22,8 +22,8 @@ namespace Friendica\Test\src\Core\Config; use Friendica\Core\Config\Cache; -use Friendica\Core\Config\IConfig; -use Friendica\Core\Config\Model\Config as ConfigModel; +use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\Config\Repository\Config as ConfigModel; use Friendica\Test\MockedTest; use Mockery\MockInterface; use Mockery; @@ -33,10 +33,10 @@ abstract class ConfigTest extends MockedTest /** @var ConfigModel|MockInterface */ protected $configModel; - /** @var Cache\Cache */ + /** @var \Friendica\Core\Config\ValueObject\Cache */ protected $configCache; - /** @var IConfig */ + /** @var \Friendica\Core\Config\Capability\IManageConfigValues */ protected $testedConfig; /** @@ -61,11 +61,11 @@ abstract class ConfigTest extends MockedTest // Create the config model $this->configModel = Mockery::mock(ConfigModel::class); - $this->configCache = new Cache\Cache(); + $this->configCache = new \Friendica\Core\Config\ValueObject\Cache(); } /** - * @return IConfig + * @return \Friendica\Core\Config\Capability\IManageConfigValues */ abstract public function getInstance(); @@ -161,7 +161,7 @@ abstract class ConfigTest extends MockedTest ->once(); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(\Friendica\Core\Config\ValueObject\Cache::class, $this->testedConfig->getCache()); // assert config is loaded everytime self::assertConfig('config', $data['config']); @@ -176,7 +176,7 @@ abstract class ConfigTest extends MockedTest public function testLoad(array $data, array $load) { $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(\Friendica\Core\Config\ValueObject\Cache::class, $this->testedConfig->getCache()); foreach ($load as $loadedCats) { $this->testedConfig->load($loadedCats); @@ -257,7 +257,7 @@ abstract class ConfigTest extends MockedTest public function testCacheLoadDouble(array $data1, array $data2, array $expect = []) { $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(\Friendica\Core\Config\ValueObject\Cache::class, $this->testedConfig->getCache()); foreach ($data1 as $cat => $data) { $this->testedConfig->load($cat); @@ -282,7 +282,7 @@ abstract class ConfigTest extends MockedTest $this->configModel->shouldReceive('load')->withAnyArgs()->andReturn([])->once(); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(\Friendica\Core\Config\ValueObject\Cache::class, $this->testedConfig->getCache()); self::assertEmpty($this->testedConfig->getCache()->getAll()); } @@ -299,7 +299,7 @@ abstract class ConfigTest extends MockedTest ->times(3); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(\Friendica\Core\Config\ValueObject\Cache::class, $this->testedConfig->getCache()); self::assertTrue($this->testedConfig->set('test', 'it', $data)); @@ -317,7 +317,7 @@ abstract class ConfigTest extends MockedTest $this->configModel->shouldReceive('set')->with('test', 'it', $data)->andReturn(true)->once(); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(\Friendica\Core\Config\ValueObject\Cache::class, $this->testedConfig->getCache()); self::assertTrue($this->testedConfig->set('test', 'it', $data)); @@ -331,7 +331,7 @@ abstract class ConfigTest extends MockedTest public function testGetWrongWithoutDB() { $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(\Friendica\Core\Config\ValueObject\Cache::class, $this->testedConfig->getCache()); // without refresh self::assertNull($this->testedConfig->get('test', 'it')); @@ -353,10 +353,10 @@ abstract class ConfigTest extends MockedTest */ public function testGetWithRefresh($data) { - $this->configCache->load(['test' => ['it' => 'now']], Cache\Cache::SOURCE_FILE); + $this->configCache->load(['test' => ['it' => 'now']], \Friendica\Core\Config\ValueObject\Cache::SOURCE_FILE); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(\Friendica\Core\Config\ValueObject\Cache::class, $this->testedConfig->getCache()); // without refresh self::assertEquals('now', $this->testedConfig->get('test', 'it')); @@ -378,10 +378,10 @@ abstract class ConfigTest extends MockedTest */ public function testDeleteWithoutDB($data) { - $this->configCache->load(['test' => ['it' => $data]], Cache\Cache::SOURCE_FILE); + $this->configCache->load(['test' => ['it' => $data]], \Friendica\Core\Config\ValueObject\Cache::SOURCE_FILE); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(\Friendica\Core\Config\ValueObject\Cache::class, $this->testedConfig->getCache()); self::assertEquals($data, $this->testedConfig->get('test', 'it')); self::assertEquals($data, $this->testedConfig->getCache()->get('test', 'it')); @@ -398,7 +398,7 @@ abstract class ConfigTest extends MockedTest */ public function testDeleteWithDB() { - $this->configCache->load(['test' => ['it' => 'now', 'quarter' => 'true']], Cache\Cache::SOURCE_FILE); + $this->configCache->load(['test' => ['it' => 'now', 'quarter' => 'true']], \Friendica\Core\Config\ValueObject\Cache::SOURCE_FILE); $this->configModel->shouldReceive('delete') ->with('test', 'it') @@ -418,7 +418,7 @@ abstract class ConfigTest extends MockedTest ->once(); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(\Friendica\Core\Config\ValueObject\Cache::class, $this->testedConfig->getCache()); // directly set the value to the cache $this->testedConfig->getCache()->set('test', 'it', 'now'); @@ -444,9 +444,9 @@ abstract class ConfigTest extends MockedTest public function testSetGetHighPrio() { $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(\Friendica\Core\Config\ValueObject\Cache::class, $this->testedConfig->getCache()); - $this->testedConfig->getCache()->set('config', 'test', 'prio', Cache\Cache::SOURCE_FILE); + $this->testedConfig->getCache()->set('config', 'test', 'prio', \Friendica\Core\Config\ValueObject\Cache::SOURCE_FILE); self::assertEquals('prio', $this->testedConfig->get('config', 'test')); // now you have to get the new variable entry because of the new set the get refresh succeed as well @@ -460,10 +460,10 @@ abstract class ConfigTest extends MockedTest public function testSetGetLowPrio() { $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(\Friendica\Core\Config\ValueObject\Cache::class, $this->testedConfig->getCache()); self::assertEquals('it', $this->testedConfig->get('config', 'test')); - $this->testedConfig->getCache()->set('config', 'test', 'prio', Cache\Cache::SOURCE_ENV); + $this->testedConfig->getCache()->set('config', 'test', 'prio', \Friendica\Core\Config\ValueObject\Cache::SOURCE_ENV); // now you have to get the env variable entry as output, even with a new set (which failed) and a get refresh self::assertFalse($this->testedConfig->set('config', 'test', '123')); self::assertEquals('prio', $this->testedConfig->get('config', 'test', '', true)); diff --git a/tests/src/Core/InstallerTest.php b/tests/src/Core/InstallerTest.php index bdb1d53c0..4742d41d8 100644 --- a/tests/src/Core/InstallerTest.php +++ b/tests/src/Core/InstallerTest.php @@ -23,7 +23,7 @@ namespace Friendica\Core; use Dice\Dice; -use Friendica\Core\Config\Cache\Cache; +use Friendica\Core\Config\ValueObject\Cache; use Friendica\DI; use Friendica\Network\IHTTPResult; use Friendica\Network\IHTTPClient; diff --git a/tests/src/Core/Lock/DatabaseLockDriverTest.php b/tests/src/Core/Lock/DatabaseLockDriverTest.php index e08a0d7ca..3bf0a96ef 100644 --- a/tests/src/Core/Lock/DatabaseLockDriverTest.php +++ b/tests/src/Core/Lock/DatabaseLockDriverTest.php @@ -22,7 +22,7 @@ namespace Friendica\Test\src\Core\Lock; use Friendica\Core\Lock\Type\DatabaseLock; -use Friendica\Core\Config\Factory\ConfigFactory; +use Friendica\Core\Config\Factory\Config; use Friendica\Test\DatabaseTestTrait; use Friendica\Test\Util\Database\StaticDatabase; use Friendica\Test\Util\VFSTrait; @@ -55,8 +55,8 @@ class DatabaseLockDriverTest extends LockTest $profiler->shouldReceive('saveTimestamp')->withAnyArgs()->andReturn(true); // load real config to avoid mocking every config-entry which is related to the Database class - $configFactory = new ConfigFactory(); - $loader = (new ConfigFactory())->createConfigFileLoader($this->root->url(), []); + $configFactory = new Config(); + $loader = (new Config())->createConfigFileLoader($this->root->url(), []); $configCache = $configFactory->createCache($loader); $dba = new StaticDatabase($configCache, $profiler, $logger); diff --git a/tests/src/Core/Lock/LockTest.php b/tests/src/Core/Lock/LockTest.php index 8fc4926b0..d1cca4c36 100644 --- a/tests/src/Core/Lock/LockTest.php +++ b/tests/src/Core/Lock/LockTest.php @@ -21,7 +21,7 @@ namespace Friendica\Test\src\Core\Lock; -use Friendica\Core\Lock\ILock; +use Friendica\Core\Lock\Capability\ICanLock; use Friendica\Test\MockedTest; abstract class LockTest extends MockedTest @@ -32,7 +32,7 @@ abstract class LockTest extends MockedTest protected $startTime = 1417011228; /** - * @var ILock + * @var ICanLock */ protected $instance; diff --git a/tests/src/Core/Lock/MemcacheCacheLockTest.php b/tests/src/Core/Lock/MemcacheCacheLockTest.php index a3068b6a5..14d18cfe2 100644 --- a/tests/src/Core/Lock/MemcacheCacheLockTest.php +++ b/tests/src/Core/Lock/MemcacheCacheLockTest.php @@ -23,7 +23,7 @@ namespace Friendica\Test\src\Core\Lock; use Exception; use Friendica\Core\Cache\Type\MemcacheCache; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Lock\Type\CacheLock; use Mockery; @@ -35,7 +35,7 @@ class MemcacheCacheLockTest extends LockTest { protected function getInstance() { - $configMock = Mockery::mock(IConfig::class); + $configMock = Mockery::mock(IManageConfigValues::class); $host = $_SERVER['MEMCACHE_HOST'] ?? 'localhost'; $port = $_SERVER['MEMCACHE_PORT'] ?? '11211'; diff --git a/tests/src/Core/Lock/MemcachedCacheLockTest.php b/tests/src/Core/Lock/MemcachedCacheLockTest.php index 26cc16f22..e623a12fa 100644 --- a/tests/src/Core/Lock/MemcachedCacheLockTest.php +++ b/tests/src/Core/Lock/MemcachedCacheLockTest.php @@ -23,7 +23,7 @@ namespace Friendica\Test\src\Core\Lock; use Exception; use Friendica\Core\Cache\Type\MemcachedCache; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Lock\Type\CacheLock; use Mockery; use Psr\Log\NullLogger; @@ -36,7 +36,7 @@ class MemcachedCacheLockTest extends LockTest { protected function getInstance() { - $configMock = Mockery::mock(IConfig::class); + $configMock = Mockery::mock(IManageConfigValues::class); $host = $_SERVER['MEMCACHED_HOST'] ?? 'localhost'; $port = $_SERVER['MEMCACHED_PORT'] ?? '11211'; diff --git a/tests/src/Core/Lock/RedisCacheLockTest.php b/tests/src/Core/Lock/RedisCacheLockTest.php index fba68b197..179de63a8 100644 --- a/tests/src/Core/Lock/RedisCacheLockTest.php +++ b/tests/src/Core/Lock/RedisCacheLockTest.php @@ -23,7 +23,7 @@ namespace Friendica\Test\src\Core\Lock; use Exception; use Friendica\Core\Cache\Type\RedisCache; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Lock\Type\CacheLock; use Mockery; @@ -35,7 +35,7 @@ class RedisCacheLockTest extends LockTest { protected function getInstance() { - $configMock = Mockery::mock(IConfig::class); + $configMock = Mockery::mock(IManageConfigValues::class); $host = $_SERVER['REDIS_HOST'] ?? 'localhost'; $port = $_SERVER['REDIS_PORT'] ?? 6379; diff --git a/tests/src/Core/Lock/SemaphoreLockTest.php b/tests/src/Core/Lock/SemaphoreLockTest.php index 59b110a33..17e83a37d 100644 --- a/tests/src/Core/Lock/SemaphoreLockTest.php +++ b/tests/src/Core/Lock/SemaphoreLockTest.php @@ -23,7 +23,7 @@ namespace Friendica\Test\src\Core\Lock; use Dice\Dice; use Friendica\App; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Config\Type\JitConfig; use Friendica\Core\Lock\Type\SemaphoreLock; use Friendica\DI; @@ -46,7 +46,7 @@ class SemaphoreLockTest extends LockTest ->shouldReceive('get') ->with('system', 'temppath') ->andReturn('/tmp/'); - $dice->shouldReceive('create')->with(IConfig::class)->andReturn($configMock); + $dice->shouldReceive('create')->with(IManageConfigValues::class)->andReturn($configMock); // @todo Because "get_temppath()" is using static methods, we have to initialize the BaseObject DI::init($dice); diff --git a/tests/src/Core/PConfig/Cache/CacheTest.php b/tests/src/Core/PConfig/Cache/CacheTest.php index 99e0e914d..53a46895d 100644 --- a/tests/src/Core/PConfig/Cache/CacheTest.php +++ b/tests/src/Core/PConfig/Cache/CacheTest.php @@ -47,7 +47,7 @@ class CacheTest extends MockedTest ]; } - private function assertConfigValues($data, Cache\Cache $configCache, $uid) + private function assertConfigValues($data, \Friendica\Core\PConfig\ValueObject\Cache $configCache, $uid) { foreach ($data as $cat => $values) { foreach ($values as $key => $value) { @@ -63,7 +63,7 @@ class CacheTest extends MockedTest */ public function testSetGet($data) { - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\PConfig\ValueObject\Cache(); $uid = 345; foreach ($data as $cat => $values) { @@ -81,7 +81,7 @@ class CacheTest extends MockedTest */ public function testGetCat() { - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\PConfig\ValueObject\Cache(); $uid = 345; $configCache->load($uid, [ @@ -113,7 +113,7 @@ class CacheTest extends MockedTest */ public function testDelete($data) { - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\PConfig\ValueObject\Cache(); $uid = 345; foreach ($data as $cat => $values) { @@ -136,7 +136,7 @@ class CacheTest extends MockedTest */ public function testKeyDiffWithResult() { - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\PConfig\ValueObject\Cache(); $diffConfig = [ 'fakeCat' => [ @@ -154,7 +154,7 @@ class CacheTest extends MockedTest */ public function testKeyDiffWithoutResult($data) { - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\PConfig\ValueObject\Cache(); $configCache->load(1, $data); @@ -168,7 +168,7 @@ class CacheTest extends MockedTest */ public function testPasswordHide() { - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\PConfig\ValueObject\Cache(); $configCache->load(1, [ 'database' => [ @@ -187,7 +187,7 @@ class CacheTest extends MockedTest */ public function testPasswordShow() { - $configCache = new Cache\Cache(false); + $configCache = new \Friendica\Core\PConfig\ValueObject\Cache(false); $configCache->load(1, [ 'database' => [ @@ -206,7 +206,7 @@ class CacheTest extends MockedTest */ public function testEmptyPassword() { - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\PConfig\ValueObject\Cache(); $configCache->load(1, [ 'database' => [ @@ -221,7 +221,7 @@ class CacheTest extends MockedTest public function testWrongTypePassword() { - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\PConfig\ValueObject\Cache(); $configCache->load(1, [ 'database' => [ @@ -233,7 +233,7 @@ class CacheTest extends MockedTest self::assertNotEmpty($configCache->get(1, 'database', 'password')); self::assertEmpty($configCache->get(1, 'database', 'username')); - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\PConfig\ValueObject\Cache(); $configCache->load(1, [ 'database' => [ @@ -251,7 +251,7 @@ class CacheTest extends MockedTest */ public function testTwoUid() { - $configCache = new Cache\Cache(); + $configCache = new \Friendica\Core\PConfig\ValueObject\Cache(); $configCache->load(1, [ 'cat1' => [ @@ -272,21 +272,4 @@ class CacheTest extends MockedTest self::assertNull($configCache->get(1, 'cat2', 'key2')); self::assertNull($configCache->get(2, 'cat1', 'key1')); } - - /** - * Test when using an invalid UID - * @todo check it the clean way before using the config class - */ - public function testInvalidUid() - { - // bad UID! - $uid = null; - - $configCache = new Cache\Cache(); - - self::assertNull($configCache->get($uid, 'cat1', 'cat2')); - - self::assertFalse($configCache->set($uid, 'cat1', 'key1', 'doesn\'t matter!')); - self::assertFalse($configCache->delete($uid, 'cat1', 'key1')); - } } diff --git a/tests/src/Core/PConfig/PConfigTest.php b/tests/src/Core/PConfig/PConfigTest.php index 9288b1058..1f0e89364 100644 --- a/tests/src/Core/PConfig/PConfigTest.php +++ b/tests/src/Core/PConfig/PConfigTest.php @@ -22,8 +22,8 @@ namespace Friendica\Test\src\Core\PConfig; use Friendica\Core\PConfig\Cache; -use Friendica\Core\PConfig\Type\BasePConfig; -use Friendica\Core\PConfig\Model\PConfig as PConfigModel; +use Friendica\Core\PConfig\Type\AbstractPConfigValues; +use Friendica\Core\PConfig\Repository\PConfig as PConfigModel; use Friendica\Test\MockedTest; use Mockery; use Mockery\MockInterface; @@ -33,10 +33,10 @@ abstract class PConfigTest extends MockedTest /** @var PConfigModel|MockInterface */ protected $configModel; - /** @var Cache\Cache */ + /** @var \Friendica\Core\PConfig\ValueObject\Cache */ protected $configCache; - /** @var BasePConfig */ + /** @var AbstractPConfigValues */ protected $testedConfig; /** @@ -63,11 +63,11 @@ abstract class PConfigTest extends MockedTest // Create the config model $this->configModel = Mockery::mock(PConfigModel::class); - $this->configCache = new Cache\Cache(); + $this->configCache = new \Friendica\Core\PConfig\ValueObject\Cache(); } /** - * @return \Friendica\Core\PConfig\Type\BasePConfig + * @return \Friendica\Core\PConfig\Type\AbstractPConfigValues */ abstract public function getInstance(); @@ -163,7 +163,7 @@ abstract class PConfigTest extends MockedTest public function testSetUp() { $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(\Friendica\Core\PConfig\ValueObject\Cache::class, $this->testedConfig->getCache()); self::assertEmpty($this->testedConfig->getCache()->getAll()); } @@ -174,7 +174,7 @@ abstract class PConfigTest extends MockedTest public function testLoad(int $uid, array $data, array $possibleCats, array $load) { $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(\Friendica\Core\PConfig\ValueObject\Cache::class, $this->testedConfig->getCache()); foreach ($load as $loadedCats) { $this->testedConfig->load($uid, $loadedCats); @@ -257,7 +257,7 @@ abstract class PConfigTest extends MockedTest public function testCacheLoadDouble(int $uid, array $data1, array $data2, array $expect) { $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(\Friendica\Core\PConfig\ValueObject\Cache::class, $this->testedConfig->getCache()); foreach ($data1 as $cat => $data) { $this->testedConfig->load($uid, $cat); @@ -281,7 +281,7 @@ abstract class PConfigTest extends MockedTest public function testSetGetWithoutDB(int $uid, $data) { $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(\Friendica\Core\PConfig\ValueObject\Cache::class, $this->testedConfig->getCache()); self::assertTrue($this->testedConfig->set($uid, 'test', 'it', $data)); @@ -302,7 +302,7 @@ abstract class PConfigTest extends MockedTest ->once(); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(\Friendica\Core\PConfig\ValueObject\Cache::class, $this->testedConfig->getCache()); self::assertTrue($this->testedConfig->set($uid, 'test', 'it', $data)); @@ -316,7 +316,7 @@ abstract class PConfigTest extends MockedTest public function testGetWrongWithoutDB() { $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(\Friendica\Core\PConfig\ValueObject\Cache::class, $this->testedConfig->getCache()); // without refresh self::assertNull($this->testedConfig->get(0, 'test', 'it')); @@ -341,7 +341,7 @@ abstract class PConfigTest extends MockedTest $this->configCache->load($uid, ['test' => ['it' => 'now']]); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(\Friendica\Core\PConfig\ValueObject\Cache::class, $this->testedConfig->getCache()); // without refresh self::assertEquals('now', $this->testedConfig->get($uid, 'test', 'it')); @@ -366,7 +366,7 @@ abstract class PConfigTest extends MockedTest $this->configCache->load($uid, ['test' => ['it' => $data]]); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(\Friendica\Core\PConfig\ValueObject\Cache::class, $this->testedConfig->getCache()); self::assertEquals($data, $this->testedConfig->get($uid, 'test', 'it')); self::assertEquals($data, $this->testedConfig->getCache()->get($uid, 'test', 'it')); @@ -405,7 +405,7 @@ abstract class PConfigTest extends MockedTest ->once(); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(\Friendica\Core\PConfig\ValueObject\Cache::class, $this->testedConfig->getCache()); // directly set the value to the cache $this->testedConfig->getCache()->set($uid, 'test', 'it', 'now'); @@ -465,7 +465,7 @@ abstract class PConfigTest extends MockedTest $this->configCache->load($data2['uid'], $data2['data']); $this->testedConfig = $this->getInstance(); - self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache()); + self::assertInstanceOf(\Friendica\Core\PConfig\ValueObject\Cache::class, $this->testedConfig->getCache()); self::assertConfig($data1['uid'], 'cat1', $data1['data']['cat1']); self::assertConfig($data1['uid'], 'cat2', $data1['data']['cat2']); diff --git a/tests/src/Core/StorageManagerTest.php b/tests/src/Core/StorageManagerTest.php index b7e5715ed..f9d05e637 100644 --- a/tests/src/Core/StorageManagerTest.php +++ b/tests/src/Core/StorageManagerTest.php @@ -22,23 +22,22 @@ namespace Friendica\Test\src\Core; use Dice\Dice; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Config\Type\PreloadConfig; use Friendica\Core\Hook; use Friendica\Core\L10n; -use Friendica\Core\Session\ISession; +use Friendica\Core\Session\Capability\IHandleSessions; +use Friendica\Core\Session\Type\Memory; use Friendica\Core\StorageManager; use Friendica\Database\Database; use Friendica\DI; -use Friendica\Core\Config\Factory\ConfigFactory; -use Friendica\Core\Config\Model\Config; +use Friendica\Core\Config\Factory\Config; +use Friendica\Core\Config\Repository; use Friendica\Model\Storage; -use Friendica\Core\Session; use Friendica\Network\HTTPClient; use Friendica\Test\DatabaseTest; use Friendica\Test\Util\Database\StaticDatabase; use Friendica\Test\Util\VFSTrait; -use Friendica\Core\Config\Cache\ConfigFileLoader; use Friendica\Util\Profiler; use org\bovigo\vfs\vfsStream; use Psr\Log\LoggerInterface; @@ -50,7 +49,7 @@ class StorageManagerTest extends DatabaseTest use VFSTrait; /** @var Database */ private $dba; - /** @var IConfig */ + /** @var IManageConfigValues */ private $config; /** @var LoggerInterface */ private $logger; @@ -75,13 +74,13 @@ class StorageManagerTest extends DatabaseTest $profiler->shouldReceive('saveTimestamp')->withAnyArgs()->andReturn(true); // load real config to avoid mocking every config-entry which is related to the Database class - $configFactory = new ConfigFactory(); + $configFactory = new Config(); $loader = $configFactory->createConfigFileLoader($this->root->url(), []); $configCache = $configFactory->createCache($loader); $this->dba = new StaticDatabase($configCache, $profiler, $this->logger); - $configModel = new Config($this->dba); + $configModel = new Repository\Config($this->dba); $this->config = new PreloadConfig($configCache, $configModel); $this->config->set('storage', 'name', 'Database'); $this->config->set('storage', 'filesystem_path', $this->root->getChild(Storage\FilesystemConfig::DEFAULT_BASE_FOLDER)->url()); @@ -253,7 +252,7 @@ class StorageManagerTest extends DatabaseTest $dice = (new Dice()) ->addRules(include __DIR__ . '/../../../static/dependencies.config.php') ->addRule(Database::class, ['instanceOf' => StaticDatabase::class, 'shared' => true]) - ->addRule(ISession::class, ['instanceOf' => Session\Type\Memory::class, 'shared' => true, 'call' => null]); + ->addRule(IHandleSessions::class, ['instanceOf' => Session\Type\Memory::class, 'shared' => true, 'call' => null]); DI::init($dice); $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); @@ -281,7 +280,7 @@ class StorageManagerTest extends DatabaseTest $dice = (new Dice()) ->addRules(include __DIR__ . '/../../../static/dependencies.config.php') ->addRule(Database::class, ['instanceOf' => StaticDatabase::class, 'shared' => true]) - ->addRule(ISession::class, ['instanceOf' => Session\Type\Memory::class, 'shared' => true, 'call' => null]); + ->addRule(IHandleSessions::class, ['instanceOf' => Memory::class, 'shared' => true, 'call' => null]); DI::init($dice); $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); diff --git a/tests/src/Model/ProcessTest.php b/tests/src/Model/ProcessTest.php index ecb4d52d4..d3ef38df9 100644 --- a/tests/src/Model/ProcessTest.php +++ b/tests/src/Model/ProcessTest.php @@ -2,7 +2,7 @@ namespace Friendica\Test\src\Model; -use Friendica\Core\Config\Factory\ConfigFactory; +use Friendica\Core\Config\Factory\Config; use Friendica\Model\Process; use Friendica\Test\DatabaseTest; use Friendica\Test\Util\Database\StaticDatabase; @@ -31,8 +31,8 @@ class ProcessTest extends DatabaseTest $profiler->shouldReceive('saveTimestamp')->withAnyArgs()->andReturn(true); // load real config to avoid mocking every config-entry which is related to the Database class - $configFactory = new ConfigFactory(); - $loader = (new ConfigFactory())->createConfigFileLoader($this->root->url(), []); + $configFactory = new Config(); + $loader = (new Config())->createConfigFileLoader($this->root->url(), []); $configCache = $configFactory->createCache($loader); $this->dba = new StaticDatabase($configCache, $profiler, $logger); diff --git a/tests/src/Model/Storage/DatabaseStorageTest.php b/tests/src/Model/Storage/DatabaseStorageTest.php index e92dd2135..796b8937c 100644 --- a/tests/src/Model/Storage/DatabaseStorageTest.php +++ b/tests/src/Model/Storage/DatabaseStorageTest.php @@ -21,7 +21,7 @@ namespace Friendica\Test\src\Model\Storage; -use Friendica\Core\Config\Factory\ConfigFactory; +use Friendica\Core\Config\Factory\Config; use Friendica\Model\Storage\Database; use Friendica\Test\DatabaseTestTrait; use Friendica\Test\Util\Database\StaticDatabase; @@ -52,8 +52,8 @@ class DatabaseStorageTest extends StorageTest $profiler->shouldReceive('saveTimestamp')->withAnyArgs()->andReturn(true); // load real config to avoid mocking every config-entry which is related to the Database class - $configFactory = new ConfigFactory(); - $loader = (new ConfigFactory())->createConfigFileLoader($this->root->url(), []); + $configFactory = new Config(); + $loader = (new Config())->createConfigFileLoader($this->root->url(), []); $configCache = $configFactory->createCache($loader); $dba = new StaticDatabase($configCache, $profiler, $logger); diff --git a/tests/src/Model/Storage/FilesystemStorageConfigTest.php b/tests/src/Model/Storage/FilesystemStorageConfigTest.php index 582130938..a5989b1cd 100644 --- a/tests/src/Model/Storage/FilesystemStorageConfigTest.php +++ b/tests/src/Model/Storage/FilesystemStorageConfigTest.php @@ -21,7 +21,7 @@ namespace Friendica\Test\src\Model\Storage; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\L10n; use Friendica\Model\Storage\FilesystemConfig; use Friendica\Model\Storage\IStorageConfiguration; @@ -46,7 +46,7 @@ class FilesystemStorageConfigTest extends StorageConfigTest { /** @var MockInterface|L10n $l10n */ $l10n = \Mockery::mock(L10n::class)->makePartial(); - $config = \Mockery::mock(IConfig::class); + $config = \Mockery::mock(IManageConfigValues::class); $config->shouldReceive('get') ->with('storage', 'filesystem_path', FilesystemConfig::DEFAULT_BASE_FOLDER) ->andReturn($this->root->getChild('storage')->url()); diff --git a/tests/src/Model/User/CookieTest.php b/tests/src/Model/User/CookieTest.php index c9656b84f..b833ef558 100644 --- a/tests/src/Model/User/CookieTest.php +++ b/tests/src/Model/User/CookieTest.php @@ -22,7 +22,7 @@ namespace Friendica\Test\src\Model\User; use Friendica\App\BaseURL; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Model\User\Cookie; use Friendica\Test\MockedTest; use Friendica\Test\Util\StaticCookie; @@ -30,7 +30,7 @@ use Mockery\MockInterface; class CookieTest extends MockedTest { - /** @var MockInterface|IConfig */ + /** @var MockInterface|\Friendica\Core\Config\Capability\IManageConfigValues */ private $config; /** @var MockInterface|BaseURL */ private $baseUrl; @@ -41,7 +41,7 @@ class CookieTest extends MockedTest parent::setUp(); - $this->config = \Mockery::mock(IConfig::class); + $this->config = \Mockery::mock(IManageConfigValues::class); $this->baseUrl = \Mockery::mock(BaseURL::class); } diff --git a/tests/src/Util/BaseURLTest.php b/tests/src/Util/BaseURLTest.php index 79f0637e3..4c15f440d 100644 --- a/tests/src/Util/BaseURLTest.php +++ b/tests/src/Util/BaseURLTest.php @@ -2,7 +2,7 @@ namespace Friendica\Test\src\Util; use Friendica\App\BaseURL; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Test\MockedTest; class BaseURLTest extends MockedTest @@ -173,7 +173,7 @@ class BaseURLTest extends MockedTest */ public function testCheck($server, $input, $assert) { - $configMock = \Mockery::mock(IConfig::class); + $configMock = \Mockery::mock(IManageConfigValues::class); $configMock->shouldReceive('get')->with('config', 'hostname')->andReturn($input['hostname']); $configMock->shouldReceive('get')->with('system', 'urlpath')->andReturn($input['urlPath']); $configMock->shouldReceive('get')->with('system', 'ssl_policy')->andReturn($input['sslPolicy']); @@ -295,7 +295,7 @@ class BaseURLTest extends MockedTest */ public function testSave($input, $save, $url) { - $configMock = \Mockery::mock(IConfig::class); + $configMock = \Mockery::mock(IManageConfigValues::class); $configMock->shouldReceive('get')->with('config', 'hostname')->andReturn($input['hostname']); $configMock->shouldReceive('get')->with('system', 'urlpath')->andReturn($input['urlPath']); $configMock->shouldReceive('get')->with('system', 'ssl_policy')->andReturn($input['sslPolicy']); @@ -333,7 +333,7 @@ class BaseURLTest extends MockedTest */ public function testSaveByUrl($input, $save, $url) { - $configMock = \Mockery::mock(IConfig::class); + $configMock = \Mockery::mock(IManageConfigValues::class); $configMock->shouldReceive('get')->with('config', 'hostname')->andReturn($input['hostname']); $configMock->shouldReceive('get')->with('system', 'urlpath')->andReturn($input['urlPath']); $configMock->shouldReceive('get')->with('system', 'ssl_policy')->andReturn($input['sslPolicy']); @@ -409,7 +409,7 @@ class BaseURLTest extends MockedTest */ public function testGetURL($sslPolicy, $ssl, $url, $assert) { - $configMock = \Mockery::mock(IConfig::class); + $configMock = \Mockery::mock(IManageConfigValues::class); $configMock->shouldReceive('get')->with('config', 'hostname')->andReturn('friendica.local'); $configMock->shouldReceive('get')->with('system', 'urlpath')->andReturn('new/test'); $configMock->shouldReceive('get')->with('system', 'ssl_policy')->andReturn($sslPolicy); @@ -467,7 +467,7 @@ class BaseURLTest extends MockedTest */ public function testCheckRedirectHTTPS($server, $forceSSL, $sslPolicy, $url, $redirect) { - $configMock = \Mockery::mock(IConfig::class); + $configMock = \Mockery::mock(IManageConfigValues::class); $configMock->shouldReceive('get')->with('config', 'hostname')->andReturn('friendica.local'); $configMock->shouldReceive('get')->with('system', 'urlpath')->andReturn('new/test'); $configMock->shouldReceive('get')->with('system', 'ssl_policy')->andReturn($sslPolicy); @@ -503,7 +503,7 @@ class BaseURLTest extends MockedTest */ public function testWrongSave($fail) { - $configMock = \Mockery::mock(IConfig::class); + $configMock = \Mockery::mock(IManageConfigValues::class); $configMock->shouldReceive('get')->with('config', 'hostname')->andReturn('friendica.local'); $configMock->shouldReceive('get')->with('system', 'urlpath')->andReturn('new/test'); $configMock->shouldReceive('get')->with('system', 'ssl_policy')->andReturn(BaseURL::DEFAULT_SSL_SCHEME); diff --git a/tests/src/Util/EMailerTest.php b/tests/src/Util/EMailerTest.php index 7f96e010a..21a0ffa2d 100644 --- a/tests/src/Util/EMailerTest.php +++ b/tests/src/Util/EMailerTest.php @@ -3,9 +3,9 @@ namespace Friendica\Test\src\Util; use Friendica\App\BaseURL; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\L10n; -use Friendica\Core\PConfig\IPConfig; +use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; use Friendica\Object\EMail\IEmail; use Friendica\Test\MockedTest; use Friendica\Test\Util\EmailerSpy; @@ -26,9 +26,9 @@ class EMailerTest extends MockedTest use VFSTrait; use HookMockTrait; - /** @var IConfig|MockInterface */ + /** @var \Friendica\Core\Config\Capability\IManageConfigValues|MockInterface */ private $config; - /** @var IPConfig|MockInterface */ + /** @var \Friendica\Core\PConfig\Capability\IManagePersonalConfigValues|MockInterface */ private $pConfig; /** @var L10n|MockInterface */ private $l10n; @@ -41,12 +41,12 @@ class EMailerTest extends MockedTest $this->setUpVfsDir(); - $this->config = \Mockery::mock(IConfig::class); + $this->config = \Mockery::mock(IManageConfigValues::class); $this->config->shouldReceive('get')->withArgs(['config', 'sender_email'])->andReturn('test@friendica.local')->once(); $this->config->shouldReceive('get')->withArgs(['config', 'sitename', 'Friendica Social Network'])->andReturn('Friendica Social Network')->once(); $this->config->shouldReceive('get')->withArgs(['system', 'sendmail_params', true])->andReturn(true); - $this->pConfig = \Mockery::mock(IPConfig::class); + $this->pConfig = \Mockery::mock(IManagePersonalConfigValues::class); $this->l10n = \Mockery::mock(L10n::class); $this->baseUrl = \Mockery::mock(BaseURL::class); $this->baseUrl->shouldReceive('getHostname')->andReturn('friendica.local'); diff --git a/tests/src/Util/Emailer/MailBuilderTest.php b/tests/src/Util/Emailer/MailBuilderTest.php index 88452a9da..83c22d7ec 100644 --- a/tests/src/Util/Emailer/MailBuilderTest.php +++ b/tests/src/Util/Emailer/MailBuilderTest.php @@ -22,7 +22,7 @@ namespace Friendica\Test\src\Util\Emailer; use Friendica\App\BaseURL; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\L10n; use Friendica\Network\HTTPException\InternalServerErrorException; use Friendica\Object\EMail\IEmail; @@ -41,7 +41,7 @@ class MailBuilderTest extends MockedTest { use VFSTrait; - /** @var IConfig|MockInterface */ + /** @var IManageConfigValues|MockInterface */ private $config; /** @var L10n|MockInterface */ private $l10n; @@ -57,7 +57,7 @@ class MailBuilderTest extends MockedTest $this->setUpVfsDir(); - $this->config = \Mockery::mock(IConfig::class); + $this->config = \Mockery::mock(IManageConfigValues::class); $this->l10n = \Mockery::mock(L10n::class); $this->baseUrl = \Mockery::mock(BaseURL::class); $this->baseUrl->shouldReceive('getHostname')->andReturn('friendica.local'); diff --git a/tests/src/Util/Emailer/SystemMailBuilderTest.php b/tests/src/Util/Emailer/SystemMailBuilderTest.php index 87b51030f..6cb0708ed 100644 --- a/tests/src/Util/Emailer/SystemMailBuilderTest.php +++ b/tests/src/Util/Emailer/SystemMailBuilderTest.php @@ -22,7 +22,7 @@ namespace Friendica\Test\src\Util\Emailer; use Friendica\App\BaseURL; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\L10n; use Friendica\Test\MockedTest; use Friendica\Test\Util\VFSTrait; @@ -34,7 +34,7 @@ class SystemMailBuilderTest extends MockedTest { use VFSTrait; - /** @var IConfig */ + /** @var \Friendica\Core\Config\Capability\IManageConfigValues */ private $config; /** @var L10n */ private $l10n; @@ -47,7 +47,7 @@ class SystemMailBuilderTest extends MockedTest $this->setUpVfsDir(); - $this->config = \Mockery::mock(IConfig::class); + $this->config = \Mockery::mock(IManageConfigValues::class); $this->config->shouldReceive('get')->with('config', 'admin_name')->andReturn('Admin'); $this->l10n = \Mockery::mock(L10n::class); $this->l10n->shouldReceive('t')->andReturnUsing(function ($msg) { diff --git a/tests/src/Util/ProfilerTest.php b/tests/src/Util/ProfilerTest.php index 4c55c419b..9a9492d17 100644 --- a/tests/src/Util/ProfilerTest.php +++ b/tests/src/Util/ProfilerTest.php @@ -21,8 +21,8 @@ namespace Friendica\Test\src\Util; -use Friendica\Core\Config\Cache\Cache; -use Friendica\Core\Config\IConfig; +use Friendica\Core\Config\ValueObject\Cache; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Test\MockedTest; use Friendica\Util\Profiler; use Mockery\MockInterface; @@ -256,7 +256,7 @@ class ProfilerTest extends MockedTest $profiler->saveTimestamp(time(), 'network', 'test1'); - $config = \Mockery::mock(IConfig::class); + $config = \Mockery::mock(IManageConfigValues::class); $config->shouldReceive('get') ->with('system', 'profiler') ->andReturn(false) From 58eea1adaa185acdfdd420783ded92f908813209 Mon Sep 17 00:00:00 2001 From: Philipp Date: Tue, 26 Oct 2021 22:09:11 +0200 Subject: [PATCH 06/19] Cleanup namespaces --- src/App.php | 20 +++++++++---------- src/App/BaseURL.php | 4 ++-- src/App/Module.php | 5 +++-- src/App/Page.php | 10 +++++----- src/Console/Lock.php | 2 +- src/Console/PostUpdate.php | 2 +- src/Core/StorageManager.php | 2 +- src/DI.php | 10 +++++----- src/Factory/LoggerFactory.php | 14 ++++++------- src/Model/Storage/FilesystemConfig.php | 4 ++-- src/Model/User/Cookie.php | 8 ++++---- .../Notifications/Factory/Introduction.php | 4 ++-- .../Notifications/Repository/Notify.php | 2 +- src/Security/Authentication.php | 7 ++++--- src/Security/ExAuth.php | 12 +++++------ src/Util/Emailer.php | 4 ++-- tests/Util/AppMockTrait.php | 2 +- tests/legacy/ApiTest.php | 2 +- tests/src/App/RouterTest.php | 2 +- tests/src/Core/Config/ConfigTest.php | 4 ++-- tests/src/Model/User/CookieTest.php | 2 +- tests/src/Util/EMailerTest.php | 4 ++-- .../Util/Emailer/SystemMailBuilderTest.php | 2 +- 23 files changed, 65 insertions(+), 63 deletions(-) diff --git a/src/App.php b/src/App.php index 9c0699a18..44a5eb40d 100644 --- a/src/App.php +++ b/src/App.php @@ -305,16 +305,16 @@ class App } /** - * @param Database $database The Friendica Database - * @param IManageConfigValues $config The Configuration - * @param App\Mode $mode The mode of this Friendica app - * @param BaseURL $baseURL The full base URL of this Friendica app - * @param LoggerInterface $logger The current app logger - * @param Profiler $profiler The profiler of this application - * @param L10n $l10n The translator instance - * @param App\Arguments $args The Friendica Arguments of the call - * @param Core\Process $process The process methods - * @param \Friendica\Core\PConfig\Capability\IManagePersonalConfigValues $pConfig Personal configuration + * @param Database $database The Friendica Database + * @param IManageConfigValues $config The Configuration + * @param App\Mode $mode The mode of this Friendica app + * @param BaseURL $baseURL The full base URL of this Friendica app + * @param LoggerInterface $logger The current app logger + * @param Profiler $profiler The profiler of this application + * @param L10n $l10n The translator instance + * @param App\Arguments $args The Friendica Arguments of the call + * @param Core\Process $process The process methods + * @param IManagePersonalConfigValues $pConfig Personal configuration */ public function __construct(Database $database, IManageConfigValues $config, App\Mode $mode, BaseURL $baseURL, LoggerInterface $logger, Profiler $profiler, L10n $l10n, Arguments $args, Core\Process $process, IManagePersonalConfigValues $pConfig) { diff --git a/src/App/BaseURL.php b/src/App/BaseURL.php index 40ed79416..71f51fe2e 100644 --- a/src/App/BaseURL.php +++ b/src/App/BaseURL.php @@ -272,8 +272,8 @@ class BaseURL } /** - * @param \Friendica\Core\Config\Capability\IManageConfigValues $config The Friendica IConfiguration - * @param array $server The $_SERVER array + * @param IManageConfigValues $config The Friendica IConfiguration + * @param array $server The $_SERVER array */ public function __construct(IManageConfigValues $config, array $server) { diff --git a/src/App/Module.php b/src/App/Module.php index ce7cc98f0..cea2788ed 100644 --- a/src/App/Module.php +++ b/src/App/Module.php @@ -24,6 +24,7 @@ namespace Friendica\App; use Friendica\App; use Friendica\BaseModule; use Friendica\Core; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\LegacyModule; use Friendica\Module\Home; use Friendica\Module\HTTPException\MethodNotAllowed; @@ -170,13 +171,13 @@ class Module * * @param Arguments $args The Friendica execution arguments * @param Router $router The Friendica routing instance - * @param \Friendica\Core\Config\Capability\IManageConfigValues $config The Friendica Configuration + * @param IManageConfigValues $config The Friendica Configuration * * @return Module The determined module of this call * * @throws \Exception */ - public function determineClass(Arguments $args, Router $router, Core\Config\Capability\IManageConfigValues $config) + public function determineClass(Arguments $args, Router $router, IManageConfigValues $config) { $printNotAllowedAddon = false; diff --git a/src/App/Page.php b/src/App/Page.php index abc84b0e9..578f9ab3e 100644 --- a/src/App/Page.php +++ b/src/App/Page.php @@ -190,11 +190,11 @@ class Page implements ArrayAccess * - Infinite scroll data * - head.tpl template * - * @param App $app The Friendica App instance - * @param Module $module The loaded Friendica module - * @param L10n $l10n The l10n language instance - * @param \Friendica\Core\Config\Capability\IManageConfigValues $config The Friendica configuration - * @param \Friendica\Core\PConfig\Capability\IManagePersonalConfigValues $pConfig The Friendica personal configuration (for user) + * @param App $app The Friendica App instance + * @param Module $module The loaded Friendica module + * @param L10n $l10n The l10n language instance + * @param IManageConfigValues $config The Friendica configuration + * @param IManagePersonalConfigValues $pConfig The Friendica personal configuration (for user) * * @throws HTTPException\InternalServerErrorException */ diff --git a/src/Console/Lock.php b/src/Console/Lock.php index 3b73837b6..c43213fba 100644 --- a/src/Console/Lock.php +++ b/src/Console/Lock.php @@ -42,7 +42,7 @@ class Lock extends \Asika\SimpleConsole\Console private $appMode; /** - * @var \Friendica\Core\Lock\Capability\ICanLock + * @var ICanLock */ private $lock; diff --git a/src/Console/PostUpdate.php b/src/Console/PostUpdate.php index 4c047e502..d0f1da08e 100644 --- a/src/Console/PostUpdate.php +++ b/src/Console/PostUpdate.php @@ -38,7 +38,7 @@ class PostUpdate extends \Asika\SimpleConsole\Console */ private $appMode; /** - * @var \Friendica\Core\Config\Capability\IManageConfigValues + * @var IManageConfigValues */ private $config; /** diff --git a/src/Core/StorageManager.php b/src/Core/StorageManager.php index ee6b959ff..e27b59edb 100644 --- a/src/Core/StorageManager.php +++ b/src/Core/StorageManager.php @@ -56,7 +56,7 @@ class StorageManager /** @var Database */ private $dba; - /** @var \Friendica\Core\Config\Capability\IManageConfigValues */ + /** @var IManageConfigValues */ private $config; /** @var LoggerInterface */ private $logger; diff --git a/src/DI.php b/src/DI.php index 570d680df..d45801a9f 100644 --- a/src/DI.php +++ b/src/DI.php @@ -155,7 +155,7 @@ abstract class DI // /** - * @return \Friendica\Core\Cache\Capability\ICanCache + * @return Core\Cache\Capability\ICanCache */ public static function cache() { @@ -163,7 +163,7 @@ abstract class DI } /** - * @return \Friendica\Core\Config\Capability\IManageConfigValues + * @return Core\Config\Capability\IManageConfigValues */ public static function config() { @@ -171,7 +171,7 @@ abstract class DI } /** - * @return \Friendica\Core\PConfig\Capability\IManagePersonalConfigValues + * @return Core\PConfig\Capability\IManagePersonalConfigValues */ public static function pConfig() { @@ -179,7 +179,7 @@ abstract class DI } /** - * @return \Friendica\Core\Lock\Capability\ICanLock + * @return Core\Lock\Capability\ICanLock */ public static function lock() { @@ -203,7 +203,7 @@ abstract class DI } /** - * @return \Friendica\Core\Session\Capability\IHandleSessions + * @return Core\Session\Capability\IHandleSessions */ public static function session() { diff --git a/src/Factory/LoggerFactory.php b/src/Factory/LoggerFactory.php index 6467bf38d..d01b477e1 100644 --- a/src/Factory/LoggerFactory.php +++ b/src/Factory/LoggerFactory.php @@ -68,10 +68,10 @@ class LoggerFactory /** * Creates a new PSR-3 compliant logger instances * - * @param Database $database The Friendica Database instance - * @param \Friendica\Core\Config\Capability\IManageConfigValues $config The config - * @param Profiler $profiler The profiler of the app - * @param FileSystem $fileSystem FileSystem utils + * @param Database $database The Friendica Database instance + * @param IManageConfigValues $config The config + * @param Profiler $profiler The profiler of the app + * @param FileSystem $fileSystem FileSystem utils * * @return LoggerInterface The PSR-3 compliant logger instance */ @@ -156,9 +156,9 @@ class LoggerFactory * * It should never get filled during normal usage of Friendica * - * @param \Friendica\Core\Config\Capability\IManageConfigValues $config The config - * @param Profiler $profiler The profiler of the app - * @param FileSystem $fileSystem FileSystem utils + * @param IManageConfigValues $config The config + * @param Profiler $profiler The profiler of the app + * @param FileSystem $fileSystem FileSystem utils * * @return LoggerInterface The PSR-3 compliant logger instance * diff --git a/src/Model/Storage/FilesystemConfig.php b/src/Model/Storage/FilesystemConfig.php index 4c71d6cfd..1aa1c3817 100644 --- a/src/Model/Storage/FilesystemConfig.php +++ b/src/Model/Storage/FilesystemConfig.php @@ -54,8 +54,8 @@ class FilesystemConfig implements IStorageConfiguration /** * Filesystem constructor. * - * @param \Friendica\Core\Config\Capability\IManageConfigValues $config - * @param L10n $l10n + * @param IManageConfigValues $config + * @param L10n $l10n */ public function __construct(IManageConfigValues $config, L10n $l10n) { diff --git a/src/Model/User/Cookie.php b/src/Model/User/Cookie.php index d0db091cb..164a527a3 100644 --- a/src/Model/User/Cookie.php +++ b/src/Model/User/Cookie.php @@ -52,10 +52,10 @@ class Cookie private $data; /** - * @param \Friendica\Core\Config\Capability\IManageConfigValues $config - * @param App\BaseURL $baseURL - * @param array $SERVER The $_SERVER array - * @param array $COOKIE The $_COOKIE array + * @param IManageConfigValues $config + * @param App\BaseURL $baseURL + * @param array $SERVER The $_SERVER array + * @param array $COOKIE The $_COOKIE array */ public function __construct(IManageConfigValues $config, App\BaseURL $baseURL, array $SERVER = [], array $COOKIE = []) { diff --git a/src/Navigation/Notifications/Factory/Introduction.php b/src/Navigation/Notifications/Factory/Introduction.php index c3a3cd46d..9f5198b18 100644 --- a/src/Navigation/Notifications/Factory/Introduction.php +++ b/src/Navigation/Notifications/Factory/Introduction.php @@ -51,9 +51,9 @@ class Introduction extends BaseFactory private $baseUrl; /** @var L10n */ private $l10n; - /** @var \Friendica\Core\PConfig\Capability\IManagePersonalConfigValues */ + /** @var IManagePersonalConfigValues */ private $pConfig; - /** @var \Friendica\Core\Session\Capability\IHandleSessions */ + /** @var IHandleSessions */ private $session; /** @var string */ private $nick; diff --git a/src/Navigation/Notifications/Repository/Notify.php b/src/Navigation/Notifications/Repository/Notify.php index a259150cf..bfef9bd20 100644 --- a/src/Navigation/Notifications/Repository/Notify.php +++ b/src/Navigation/Notifications/Repository/Notify.php @@ -33,7 +33,7 @@ class Notify extends BaseRepository /** @var BaseURL */ protected $baseUrl; - /** @var \Friendica\Core\Config\Capability\IManageConfigValues */ + /** @var IManageConfigValues */ protected $config; /** @var Emailer */ diff --git a/src/Security/Authentication.php b/src/Security/Authentication.php index ce8bc3e32..d8d8ba4b4 100644 --- a/src/Security/Authentication.php +++ b/src/Security/Authentication.php @@ -27,6 +27,7 @@ use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; use Friendica\Core\Hook; use Friendica\Core\Session; +use Friendica\Core\Session\Capability\IHandleSessions; use Friendica\Core\System; use Friendica\Database\Database; use Friendica\Database\DBA; @@ -60,7 +61,7 @@ class Authentication private $logger; /** @var User\Cookie */ private $cookie; - /** @var \Friendica\Core\Session\Capability\IHandleSessions */ + /** @var IHandleSessions */ private $session; /** @var IManagePersonalConfigValues */ private $pConfig; @@ -75,10 +76,10 @@ class Authentication * @param Database $dba * @param LoggerInterface $logger * @param User\Cookie $cookie - * @param \Friendica\Core\Session\Capability\IHandleSessions $session + * @param IHandleSessions $session * @param IManagePersonalConfigValues $pConfig */ - public function __construct(IManageConfigValues $config, App\Mode $mode, App\BaseURL $baseUrl, L10n $l10n, Database $dba, LoggerInterface $logger, User\Cookie $cookie, Session\Capability\IHandleSessions $session, IManagePersonalConfigValues $pConfig) + public function __construct(IManageConfigValues $config, App\Mode $mode, App\BaseURL $baseUrl, L10n $l10n, Database $dba, LoggerInterface $logger, User\Cookie $cookie, IHandleSessions $session, IManagePersonalConfigValues $pConfig) { $this->config = $config; $this->mode = $mode; diff --git a/src/Security/ExAuth.php b/src/Security/ExAuth.php index 0e1f42384..3b4e8c5b1 100644 --- a/src/Security/ExAuth.php +++ b/src/Security/ExAuth.php @@ -54,7 +54,7 @@ class ExAuth */ private $appMode; /** - * @var \Friendica\Core\Config\Capability\IManageConfigValues + * @var IManageConfigValues */ private $config; /** @@ -71,11 +71,11 @@ class ExAuth private $baseURL; /** - * @param App\Mode $appMode - * @param IManageConfigValues $config - * @param \Friendica\Core\PConfig\Capability\IManagePersonalConfigValues $pConfig - * @param Database $dba - * @param App\BaseURL $baseURL + * @param App\Mode $appMode + * @param IManageConfigValues $config + * @param IManagePersonalConfigValues $pConfig + * @param Database $dba + * @param App\BaseURL $baseURL * * @throws Exception */ diff --git a/src/Util/Emailer.php b/src/Util/Emailer.php index 8e63b638f..626401b15 100644 --- a/src/Util/Emailer.php +++ b/src/Util/Emailer.php @@ -38,9 +38,9 @@ use Psr\Log\LoggerInterface; */ class Emailer { - /** @var \Friendica\Core\Config\Capability\IManageConfigValues */ + /** @var IManageConfigValues */ private $config; - /** @var \Friendica\Core\PConfig\Capability\IManagePersonalConfigValues */ + /** @var IManagePersonalConfigValues */ private $pConfig; /** @var LoggerInterface */ private $logger; diff --git a/tests/Util/AppMockTrait.php b/tests/Util/AppMockTrait.php index 4e6e8640d..ed3a42b26 100644 --- a/tests/Util/AppMockTrait.php +++ b/tests/Util/AppMockTrait.php @@ -42,7 +42,7 @@ trait AppMockTrait protected $app; /** - * @var MockInterface|\Friendica\Core\Config\Capability\IManageConfigValues The mocked Config Cache + * @var MockInterface|Config\Capability\IManageConfigValues The mocked Config Cache */ protected $configMock; diff --git a/tests/legacy/ApiTest.php b/tests/legacy/ApiTest.php index 90de2d647..e800f68c8 100644 --- a/tests/legacy/ApiTest.php +++ b/tests/legacy/ApiTest.php @@ -59,7 +59,7 @@ class ApiTest extends FixtureTest parent::setUp(); - /** @var \Friendica\Core\Config\Capability\IManageConfigValues $config */ + /** @var IManageConfigValues $config */ $this->config = $this->dice->create(IManageConfigValues::class); $this->config->set('system', 'url', 'http://localhost'); diff --git a/tests/src/App/RouterTest.php b/tests/src/App/RouterTest.php index 1e9e5d5ee..f74ea423f 100644 --- a/tests/src/App/RouterTest.php +++ b/tests/src/App/RouterTest.php @@ -41,7 +41,7 @@ class RouterTest extends TestCase */ private $cache; /** - * @var \Friendica\Core\Lock\Capability\ICanLock + * @var ICanLock */ private $lock; diff --git a/tests/src/Core/Config/ConfigTest.php b/tests/src/Core/Config/ConfigTest.php index 0c9788c9c..46dd400ad 100644 --- a/tests/src/Core/Config/ConfigTest.php +++ b/tests/src/Core/Config/ConfigTest.php @@ -36,7 +36,7 @@ abstract class ConfigTest extends MockedTest /** @var \Friendica\Core\Config\ValueObject\Cache */ protected $configCache; - /** @var \Friendica\Core\Config\Capability\IManageConfigValues */ + /** @var IManageConfigValues */ protected $testedConfig; /** @@ -65,7 +65,7 @@ abstract class ConfigTest extends MockedTest } /** - * @return \Friendica\Core\Config\Capability\IManageConfigValues + * @return IManageConfigValues */ abstract public function getInstance(); diff --git a/tests/src/Model/User/CookieTest.php b/tests/src/Model/User/CookieTest.php index b833ef558..eaf79f99e 100644 --- a/tests/src/Model/User/CookieTest.php +++ b/tests/src/Model/User/CookieTest.php @@ -30,7 +30,7 @@ use Mockery\MockInterface; class CookieTest extends MockedTest { - /** @var MockInterface|\Friendica\Core\Config\Capability\IManageConfigValues */ + /** @var MockInterface|IManageConfigValues */ private $config; /** @var MockInterface|BaseURL */ private $baseUrl; diff --git a/tests/src/Util/EMailerTest.php b/tests/src/Util/EMailerTest.php index 21a0ffa2d..ec10ee089 100644 --- a/tests/src/Util/EMailerTest.php +++ b/tests/src/Util/EMailerTest.php @@ -26,9 +26,9 @@ class EMailerTest extends MockedTest use VFSTrait; use HookMockTrait; - /** @var \Friendica\Core\Config\Capability\IManageConfigValues|MockInterface */ + /** @var IManageConfigValues|MockInterface */ private $config; - /** @var \Friendica\Core\PConfig\Capability\IManagePersonalConfigValues|MockInterface */ + /** @var IManagePersonalConfigValues|MockInterface */ private $pConfig; /** @var L10n|MockInterface */ private $l10n; diff --git a/tests/src/Util/Emailer/SystemMailBuilderTest.php b/tests/src/Util/Emailer/SystemMailBuilderTest.php index 6cb0708ed..ce3702f96 100644 --- a/tests/src/Util/Emailer/SystemMailBuilderTest.php +++ b/tests/src/Util/Emailer/SystemMailBuilderTest.php @@ -34,7 +34,7 @@ class SystemMailBuilderTest extends MockedTest { use VFSTrait; - /** @var \Friendica\Core\Config\Capability\IManageConfigValues */ + /** @var IManageConfigValues */ private $config; /** @var L10n */ private $l10n; From ab44fb580498fd9e960fc95f0aec39234754f47c Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Wed, 27 Oct 2021 13:54:09 +0200 Subject: [PATCH 07/19] AR translation updates THX abidin toumi --- view/lang/ar/messages.po | 103 ++++++++++++++++++++------------------- view/lang/ar/strings.php | 46 +++++++++++++++-- 2 files changed, 94 insertions(+), 55 deletions(-) diff --git a/view/lang/ar/messages.po b/view/lang/ar/messages.po index fb819076a..b59ad2891 100644 --- a/view/lang/ar/messages.po +++ b/view/lang/ar/messages.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-10-23 21:51-0400\n" -"PO-Revision-Date: 2021-10-24 17:56+0000\n" +"POT-Creation-Date: 2021-10-24 23:21-0400\n" +"PO-Revision-Date: 2021-10-26 18:49+0000\n" "Last-Translator: abidin toumi \n" "Language-Team: Arabic (http://www.transifex.com/Friendica/friendica/language/ar/)\n" "MIME-Version: 1.0\n" @@ -2998,7 +2998,7 @@ msgstr "الشبكة" #: src/Content/Nav.php:271 view/theme/frio/theme.php:232 msgid "Conversations from your friends" -msgstr "محادثات مع أصدقائك" +msgstr "محادثات أصدقائك" #: src/Content/Nav.php:277 msgid "Introductions" @@ -4170,10 +4170,9 @@ msgstr "" msgid "Unable to retrieve contact information." msgstr "تعذر جلب معلومات المتراسل." -#: src/Model/Event.php:52 src/Model/Event.php:853 -#: src/Module/Debug/Localtime.php:38 -msgid "l F d, Y \\@ g:i A" -msgstr "l F d, Y \\@ g:i A" +#: src/Model/Event.php:52 +msgid "l F d, Y \\@ g:i A \\G\\M\\TP (e)" +msgstr "" #: src/Model/Event.php:73 src/Model/Event.php:90 src/Model/Event.php:464 #: src/Model/Event.php:897 @@ -4213,6 +4212,10 @@ msgstr "ضاعف الحدث" msgid "Delete event" msgstr "احذف الحدث" +#: src/Model/Event.php:853 src/Module/Debug/Localtime.php:38 +msgid "l F d, Y \\@ g:i A" +msgstr "l F d, Y \\@ g:i A" + #: src/Model/Event.php:854 msgid "D g:i A" msgstr "" @@ -5606,7 +5609,7 @@ msgstr "سمة النظام" msgid "" "Default system theme - may be over-ridden by user profiles - Change default theme settings" -msgstr "" +msgstr "مظهر الموقع الافتراضي يختلف بناءً على الملف الشخصي الذي تمت زيارته - غيّر إعدادات السمة الافتراضية" #: src/Module/Admin/Site.php:531 msgid "Mobile system theme" @@ -5632,7 +5635,7 @@ msgstr "فرض SSL" msgid "" "Force all Non-SSL requests to SSL - Attention: on some systems it could lead" " to endless loops." -msgstr "" +msgstr "أعد توجيه جميع الطلبات غير المشفرة إلى طلبات SSL. تحذير: في بعض الأنظمة يمكن أن يؤدي هذا إلى حلقات إعادة توجيه لا نهائية." #: src/Module/Admin/Site.php:534 msgid "Show help entry from navigation menu" @@ -5670,46 +5673,46 @@ msgstr "الطول الأقصى للصورة" msgid "" "Maximum length in pixels of the longest side of uploaded images. Default is " "-1, which means no limits." -msgstr "" +msgstr "حد حجم الصورة المرفوعة بالبيكسل. الافتراضي هو 1- والذي يعني حجمًا غير محدود." #: src/Module/Admin/Site.php:539 msgid "JPEG image quality" -msgstr "" +msgstr "جودة صور JPEG" #: src/Module/Admin/Site.php:539 msgid "" "Uploaded JPEGS will be saved at this quality setting [0-100]. Default is " "100, which is full quality." -msgstr "" +msgstr "سيتم حفظ ملفات JPEG المرفوعة بنسبة جودة [0-100]. القيمة الافتراضية هي 100 وهي أقصى جودة." #: src/Module/Admin/Site.php:541 msgid "Register policy" -msgstr "" +msgstr "سياسات التسجيل" #: src/Module/Admin/Site.php:542 msgid "Maximum Daily Registrations" -msgstr "" +msgstr "الحد اليومي للتسجيل" #: src/Module/Admin/Site.php:542 msgid "" "If registration is permitted above, this sets the maximum number of new user" " registrations to accept per day. If register is set to closed, this " "setting has no effect." -msgstr "" +msgstr "إذا كان التسجيل مسموحا، فإن ذلك يحدد الحد الأقصى لعدد التسجيلات الجديدة لليوم الواحد. إذا أُغلق التسجيل هذا الإعداد ليس له أي تأثير." #: src/Module/Admin/Site.php:543 msgid "Register text" -msgstr "" +msgstr "نص صفحة التسجيل" #: src/Module/Admin/Site.php:543 msgid "" "Will be displayed prominently on the registration page. You can use BBCode " "here." -msgstr "" +msgstr "ستعرض في صفحة التسجيل. يمكنك استخدام BBCode." #: src/Module/Admin/Site.php:544 msgid "Forbidden Nicknames" -msgstr "" +msgstr "الألقاب المحظورة" #: src/Module/Admin/Site.php:544 msgid "" @@ -5719,23 +5722,23 @@ msgstr "" #: src/Module/Admin/Site.php:545 msgid "Accounts abandoned after x days" -msgstr "" +msgstr "الحسابات المهجورة بعد x يوم" #: src/Module/Admin/Site.php:545 msgid "" "Will not waste system resources polling external sites for abandonded " "accounts. Enter 0 for no time limit." -msgstr "" +msgstr "من أجل صونِ موارد النظام سنوقف الاستطلاع عن الحسابات المهجورة من المواقع البعيدة. ضع 0 لإيقاف هذه الوظيفة." #: src/Module/Admin/Site.php:546 msgid "Allowed friend domains" -msgstr "" +msgstr "النطاقات المسموحة" #: src/Module/Admin/Site.php:546 msgid "" "Comma separated list of domains which are allowed to establish friendships " "with this site. Wildcards are accepted. Empty to allow any domains" -msgstr "" +msgstr "قائمة مفصولة بفواصل للنطاقات المصرح لها بالتفاعل مع مستخدمي هذا الموقع. علامة \"*\" مقبولة. اتركه فارغا للسماح لجميع النطاقات" #: src/Module/Admin/Site.php:547 msgid "Allowed email domains" @@ -5746,7 +5749,7 @@ msgid "" "Comma separated list of domains which are allowed in email addresses for " "registrations to this site. Wildcards are accepted. Empty to allow any " "domains" -msgstr "" +msgstr "قائمة مفصولة بفواصل للنطاقات البريد الإلكتروني المسموح بالتسجيل بها في هذا الموقع. علامة \"*\" مقبولة. اتركه فارغا للسماح لجميع النطاقات" #: src/Module/Admin/Site.php:548 msgid "No OEmbed rich content" @@ -5760,47 +5763,47 @@ msgstr "" #: src/Module/Admin/Site.php:549 msgid "Trusted third-party domains" -msgstr "" +msgstr "نطاقات الخارجية الموثوق بها" #: src/Module/Admin/Site.php:549 msgid "" "Comma separated list of domains from which content is allowed to be embedded" " in posts like with OEmbed. All sub-domains of the listed domains are " "allowed as well." -msgstr "" +msgstr "قائمة مفصولة بفواصل من النطاقات التي يُسمح بتضمين محتواها في المشاركات مثل OEmbed. يُسمح أيضًا بجميع النطاقات الفرعية التابعة لها." #: src/Module/Admin/Site.php:550 msgid "Block public" -msgstr "" +msgstr "احجب المشاركات العلنية" #: src/Module/Admin/Site.php:550 msgid "" "Check to block public access to all otherwise public personal pages on this " "site unless you are currently logged in." -msgstr "" +msgstr "أشر لمنع الزوار من الوصول إلى كل الصفحات باستثناء الصفحات الشخصية العلنية." #: src/Module/Admin/Site.php:551 msgid "Force publish" -msgstr "" +msgstr "افرض النشر" #: src/Module/Admin/Site.php:551 msgid "" "Check to force all profiles on this site to be listed in the site directory." -msgstr "" +msgstr "أشر لفرض إدراج جميع الملفات الشخصية في دليل الموقع." #: src/Module/Admin/Site.php:551 msgid "Enabling this may violate privacy laws like the GDPR" -msgstr "" +msgstr "تفعيله قد ينتهك قوانين حماية الخصوصية مثل GDPR" #: src/Module/Admin/Site.php:552 msgid "Global directory URL" -msgstr "" +msgstr "رابط الدليل العالمي" #: src/Module/Admin/Site.php:552 msgid "" "URL to the global directory. If this is not set, the global directory is " "completely unavailable to the application." -msgstr "" +msgstr "رابط الدليل العالمي. إذا لم يتم تعريف هذا الحقل ، فلن يكون الدليل العام متاحًا." #: src/Module/Admin/Site.php:553 msgid "Private posts by default for new users" @@ -5810,17 +5813,17 @@ msgstr "" msgid "" "Set default post permissions for all new members to the default privacy " "group rather than public." -msgstr "" +msgstr "تعيين أذونات النشر الافتراضية لجميع الأعضاء الجدد إلى خاصة بدل العلنية." #: src/Module/Admin/Site.php:554 msgid "Don't include post content in email notifications" -msgstr "" +msgstr "لا تضمن محتويات المشاركات في تنبيهات البريد الإلكتروني" #: src/Module/Admin/Site.php:554 msgid "" "Don't include the content of a post/comment/private message/etc. in the " "email notifications that are sent out from this site, as a privacy measure." -msgstr "" +msgstr "لا تضمن محتوى المشركات/التعليقات/الرسائل الخاصة/إلخ في تنبيهات البريد الإلكتروني المرسلة من هذا الموقع، كتدبير لحماية الخصوصية." #: src/Module/Admin/Site.php:555 msgid "Disallow public access to addons listed in the apps menu." @@ -5834,7 +5837,7 @@ msgstr "" #: src/Module/Admin/Site.php:556 msgid "Don't embed private images in posts" -msgstr "" +msgstr "لا تضمن الصور الخاصة في المشاركات" #: src/Module/Admin/Site.php:556 msgid "" @@ -6285,11 +6288,11 @@ msgstr "" #: src/Module/Admin/Site.php:614 msgid "Deny Server tags" -msgstr "" +msgstr "الوسوم المرفوضة" #: src/Module/Admin/Site.php:614 msgid "Comma separated list of tags that are rejected." -msgstr "" +msgstr "قائمة بالوسوم المرفوضة مفصول بفاصلة." #: src/Module/Admin/Site.php:615 msgid "Allow user tags" @@ -6325,11 +6328,11 @@ msgstr "" #: src/Module/Admin/Storage.php:141 msgid "Storage Configuration" -msgstr "" +msgstr "إعدادات التخزين" #: src/Module/Admin/Storage.php:142 src/Module/BaseAdmin.php:91 msgid "Storage" -msgstr "" +msgstr "مساحة التخزين" #: src/Module/Admin/Storage.php:144 msgid "Save & Use storage backend" @@ -7673,7 +7676,7 @@ msgstr "رتب حسب تاريخ استلام المشاركة" #: src/Module/Conversation/Network.php:250 #: src/Module/Settings/Profile/Index.php:228 msgid "Personal" -msgstr "شخصي" +msgstr "نشاطي" #: src/Module/Conversation/Network.php:253 msgid "Posts that mention or involve you" @@ -8612,21 +8615,21 @@ msgstr "" msgid "Visible to:" msgstr "مرئي لـ:" -#: src/Module/Photo.php:122 +#: src/Module/Photo.php:123 msgid "The Photo is not available." msgstr "الصورة غير متوفرة." -#: src/Module/Photo.php:135 +#: src/Module/Photo.php:136 #, php-format msgid "The Photo with id %s is not available." msgstr "الصورة ذات المعرف %s غير متوفّرة." -#: src/Module/Photo.php:168 +#: src/Module/Photo.php:169 #, php-format msgid "Invalid external resource with url %s." msgstr "" -#: src/Module/Photo.php:170 +#: src/Module/Photo.php:171 #, php-format msgid "Invalid photo with id %s." msgstr "الصورة ذات المعرف %s غير صالحة." @@ -8899,11 +8902,11 @@ msgstr "" #: src/Module/Search/Index.php:54 msgid "Only logged in users are permitted to perform a search." -msgstr "" +msgstr "يمكن فقط للمستخدمين المسجلين البحث في الموقع." #: src/Module/Search/Index.php:76 msgid "Only one search per minute is permitted for not logged in users." -msgstr "" +msgstr "يسمح ببحث واحد فقط في كل دقيقة للزوار." #: src/Module/Search/Index.php:192 #, php-format @@ -9473,7 +9476,7 @@ msgstr "" #: src/Module/Settings/TwoFactor/AppSpecific.php:77 msgid "New app-specific password generated." -msgstr "" +msgstr "أُنشئت كلمة مرور جديدة خاصة بالتطبيق بنجاح." #: src/Module/Settings/TwoFactor/AppSpecific.php:83 msgid "App-specific passwords successfully revoked." @@ -10152,12 +10155,12 @@ msgstr "علق %1$s على تعليقك %2$s" #: src/Navigation/Notifications/Factory/Notification.php:189 #, php-format msgid "%1$s commented in their thread %2$s" -msgstr "علق %1$s على نقاشهم %2$s" +msgstr "علق %1$s على نقاشه %2$s" #: src/Navigation/Notifications/Factory/Notification.php:191 #, php-format msgid "%1$s commented in their thread" -msgstr "علق %1$s على نقاشهم" +msgstr "علق %1$s على نقاشه" #: src/Navigation/Notifications/Factory/Notification.php:193 #, php-format diff --git a/view/lang/ar/strings.php b/view/lang/ar/strings.php index 895124eeb..74612d147 100644 --- a/view/lang/ar/strings.php +++ b/view/lang/ar/strings.php @@ -727,7 +727,7 @@ $a->strings['Information about this friendica instance'] = 'معلومات حو $a->strings['Terms of Service'] = 'شروط الخدمة'; $a->strings['Terms of Service of this Friendica instance'] = 'شروط الخدمة لهذا المثيل'; $a->strings['Network'] = 'الشبكة'; -$a->strings['Conversations from your friends'] = 'محادثات مع أصدقائك'; +$a->strings['Conversations from your friends'] = 'محادثات أصدقائك'; $a->strings['Introductions'] = 'المقدمات'; $a->strings['Friend Requests'] = 'طلبات الصداقة'; $a->strings['Notifications'] = 'التنبيهات'; @@ -976,7 +976,6 @@ $a->strings['Unable to match @-style Identity Address with a known protocol or e $a->strings['Use mailto: in front of address to force email check.'] = 'استخدم mailto: أمام العنوان للتعرّف عليه كبريد إلكتروني.'; $a->strings['The profile address specified belongs to a network which has been disabled on this site.'] = 'عنوان الملف الشخصي تابع لشبكة محجوبة في هذا الموقع.'; $a->strings['Unable to retrieve contact information.'] = 'تعذر جلب معلومات المتراسل.'; -$a->strings['l F d, Y \@ g:i A'] = 'l F d, Y \@ g:i A'; $a->strings['Starts:'] = 'يبدأ:'; $a->strings['Finishes:'] = 'ينتهي:'; $a->strings['all-day'] = 'كل اليوم'; @@ -985,6 +984,7 @@ $a->strings['No events to display'] = 'لا توجد أحداث لعرضها'; $a->strings['Edit event'] = 'حرّر الحدث'; $a->strings['Duplicate event'] = 'ضاعف الحدث'; $a->strings['Delete event'] = 'احذف الحدث'; +$a->strings['l F d, Y \@ g:i A'] = 'l F d, Y \@ g:i A'; $a->strings['Show map'] = 'أظهر الخريطة'; $a->strings['Hide map'] = 'اخف الخريطة'; $a->strings['%s\'s birthday'] = 'عيد ميلاد %s'; @@ -1389,17 +1389,46 @@ $a->strings['Additional Info'] = 'معلومات إضافية'; $a->strings['For public servers: you can add additional information here that will be listed at %s/servers.'] = 'للخوادم العامة: يمكنك إضافة معلومات إضافية لتدرج في %s/servers.'; $a->strings['System language'] = 'لغة النظام'; $a->strings['System theme'] = 'سمة النظام'; +$a->strings['Default system theme - may be over-ridden by user profiles - Change default theme settings'] = 'مظهر الموقع الافتراضي يختلف بناءً على الملف الشخصي الذي تمت زيارته - غيّر إعدادات السمة الافتراضية'; $a->strings['Mobile system theme'] = 'سمة الهاتف'; $a->strings['Theme for mobile devices'] = 'سمة للأجهزة المحمولة'; $a->strings['SSL link policy'] = 'سياسة روابط SSL'; $a->strings['Determines whether generated links should be forced to use SSL'] = 'يحدد ما إذا كان ينبغي إجبار الروابط المولدة على استخدام SSL'; $a->strings['Force SSL'] = 'فرض SSL'; +$a->strings['Force all Non-SSL requests to SSL - Attention: on some systems it could lead to endless loops.'] = 'أعد توجيه جميع الطلبات غير المشفرة إلى طلبات SSL. تحذير: في بعض الأنظمة يمكن أن يؤدي هذا إلى حلقات إعادة توجيه لا نهائية.'; $a->strings['Single user instance'] = 'مثيل لمستخدم وحيد'; $a->strings['Make this instance multi-user or single-user for the named user'] = 'اجعل هذا المثيل إما لمستخدم واحد أوعدة مستخدمين'; $a->strings['Maximum image size'] = 'الحجم الأقصى للصورة'; $a->strings['Maximum size in bytes of uploaded images. Default is 0, which means no limits.'] = 'حد حجم الصورة المرفوعة بالبايت. الافتراضي هو 0 والذي يعني حجمًا غير محدود.'; $a->strings['Maximum image length'] = 'الطول الأقصى للصورة'; +$a->strings['Maximum length in pixels of the longest side of uploaded images. Default is -1, which means no limits.'] = 'حد حجم الصورة المرفوعة بالبيكسل. الافتراضي هو 1- والذي يعني حجمًا غير محدود.'; +$a->strings['JPEG image quality'] = 'جودة صور JPEG'; +$a->strings['Uploaded JPEGS will be saved at this quality setting [0-100]. Default is 100, which is full quality.'] = 'سيتم حفظ ملفات JPEG المرفوعة بنسبة جودة [0-100]. القيمة الافتراضية هي 100 وهي أقصى جودة.'; +$a->strings['Register policy'] = 'سياسات التسجيل'; +$a->strings['Maximum Daily Registrations'] = 'الحد اليومي للتسجيل'; +$a->strings['If registration is permitted above, this sets the maximum number of new user registrations to accept per day. If register is set to closed, this setting has no effect.'] = 'إذا كان التسجيل مسموحا، فإن ذلك يحدد الحد الأقصى لعدد التسجيلات الجديدة لليوم الواحد. إذا أُغلق التسجيل هذا الإعداد ليس له أي تأثير.'; +$a->strings['Register text'] = 'نص صفحة التسجيل'; +$a->strings['Will be displayed prominently on the registration page. You can use BBCode here.'] = 'ستعرض في صفحة التسجيل. يمكنك استخدام BBCode.'; +$a->strings['Forbidden Nicknames'] = 'الألقاب المحظورة'; +$a->strings['Accounts abandoned after x days'] = 'الحسابات المهجورة بعد x يوم'; +$a->strings['Will not waste system resources polling external sites for abandonded accounts. Enter 0 for no time limit.'] = 'من أجل صونِ موارد النظام سنوقف الاستطلاع عن الحسابات المهجورة من المواقع البعيدة. ضع 0 لإيقاف هذه الوظيفة.'; +$a->strings['Allowed friend domains'] = 'النطاقات المسموحة'; +$a->strings['Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains'] = 'قائمة مفصولة بفواصل للنطاقات المصرح لها بالتفاعل مع مستخدمي هذا الموقع. علامة "*" مقبولة. اتركه فارغا للسماح لجميع النطاقات'; $a->strings['Allowed email domains'] = 'نطاقات البريد الإلكتروني المسموحة'; +$a->strings['Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains'] = 'قائمة مفصولة بفواصل للنطاقات البريد الإلكتروني المسموح بالتسجيل بها في هذا الموقع. علامة "*" مقبولة. اتركه فارغا للسماح لجميع النطاقات'; +$a->strings['Trusted third-party domains'] = 'نطاقات الخارجية الموثوق بها'; +$a->strings['Comma separated list of domains from which content is allowed to be embedded in posts like with OEmbed. All sub-domains of the listed domains are allowed as well.'] = 'قائمة مفصولة بفواصل من النطاقات التي يُسمح بتضمين محتواها في المشاركات مثل OEmbed. يُسمح أيضًا بجميع النطاقات الفرعية التابعة لها.'; +$a->strings['Block public'] = 'احجب المشاركات العلنية'; +$a->strings['Check to block public access to all otherwise public personal pages on this site unless you are currently logged in.'] = 'أشر لمنع الزوار من الوصول إلى كل الصفحات باستثناء الصفحات الشخصية العلنية.'; +$a->strings['Force publish'] = 'افرض النشر'; +$a->strings['Check to force all profiles on this site to be listed in the site directory.'] = 'أشر لفرض إدراج جميع الملفات الشخصية في دليل الموقع.'; +$a->strings['Enabling this may violate privacy laws like the GDPR'] = 'تفعيله قد ينتهك قوانين حماية الخصوصية مثل GDPR'; +$a->strings['Global directory URL'] = 'رابط الدليل العالمي'; +$a->strings['URL to the global directory. If this is not set, the global directory is completely unavailable to the application.'] = 'رابط الدليل العالمي. إذا لم يتم تعريف هذا الحقل ، فلن يكون الدليل العام متاحًا.'; +$a->strings['Set default post permissions for all new members to the default privacy group rather than public.'] = 'تعيين أذونات النشر الافتراضية لجميع الأعضاء الجدد إلى خاصة بدل العلنية.'; +$a->strings['Don\'t include post content in email notifications'] = 'لا تضمن محتويات المشاركات في تنبيهات البريد الإلكتروني'; +$a->strings['Don\'t include the content of a post/comment/private message/etc. in the email notifications that are sent out from this site, as a privacy measure.'] = 'لا تضمن محتوى المشركات/التعليقات/الرسائل الخاصة/إلخ في تنبيهات البريد الإلكتروني المرسلة من هذا الموقع، كتدبير لحماية الخصوصية.'; +$a->strings['Don\'t embed private images in posts'] = 'لا تضمن الصور الخاصة في المشاركات'; $a->strings['Set this to announce that your node is used mostly for explicit content that might not be suited for minors. This information will be published in the node information and might be used, e.g. by the global directory, to filter your node from listings of nodes to join. Additionally a note about this will be shown at the user registration page.'] = 'عيّن هذا الخيار للإعلان عن أن عقدتك تحتوي محتوى حساس قد لا يكون مناسباً للقصر. وسوف تنشر هذه المعلومات في معلومات العقدة وصفحة التسجيل، ويستخدم هذا الخيار في الدليل العالمي، فأثناء استعراض هذه العقدة في الدليل ستظهر لهم هذه المعلومة.'; $a->strings['Proxify external content'] = 'توجيه المحتوى الخارجي عبر الوكيل'; $a->strings['Route external content via the proxy functionality. This is used for example for some OEmbed accesses and in some other rare cases.'] = 'توجيه المحتوى الخارجي عن طريق وميل. يستخدم هذا على سبيل المثال وصول OEmbed وفي بعض الحالات النادرة الأخرى.'; @@ -1446,7 +1475,11 @@ $a->strings['Disabled'] = 'معطل'; $a->strings['all'] = 'الكل'; $a->strings['tags'] = 'الوسوم'; $a->strings['Server tags'] = 'وسوم الخادم'; +$a->strings['Deny Server tags'] = 'الوسوم المرفوضة'; +$a->strings['Comma separated list of tags that are rejected.'] = 'قائمة بالوسوم المرفوضة مفصول بفاصلة.'; $a->strings['Start Relocation'] = 'ابدأ النقل'; +$a->strings['Storage Configuration'] = 'إعدادات التخزين'; +$a->strings['Storage'] = 'مساحة التخزين'; $a->strings['The worker was never executed. Please check your database structure!'] = 'لم يتم تنفيذ المهمة أبداً. يرجى التحقق من بنية قاعدة البيانات!'; $a->strings['Normal Account'] = 'حساب عادي'; $a->strings['Public Forum Account'] = 'حساب منتدى عمومي'; @@ -1731,7 +1764,7 @@ $a->strings['Latest Activity'] = 'آخر نشاط'; $a->strings['Sort by latest activity'] = 'رتب حسب آخر نشاط'; $a->strings['Latest Posts'] = 'آخر المشاركات'; $a->strings['Sort by post received date'] = 'رتب حسب تاريخ استلام المشاركة'; -$a->strings['Personal'] = 'شخصي'; +$a->strings['Personal'] = 'نشاطي'; $a->strings['Posts that mention or involve you'] = 'المشاركات التي تذكرك أو تتعلق بك'; $a->strings['Starred'] = 'المفضلة'; $a->strings['Favourite Posts'] = 'المشاركات المفضلة'; @@ -1958,6 +1991,8 @@ $a->strings['Profile unavailable.'] = 'الملف الشخصي غير متوفر $a->strings['The provided profile link doesn\'t seem to be valid'] = 'يبدو أنّ رابط الملف الشخصي غير صالح'; $a->strings['Friend/Connection Request'] = 'طلب صداقة/اقتران'; $a->strings['If you are not yet a member of the free social web, follow this link to find a public Friendica node and join us today.'] = 'إن لم تكن عضواً في شبكة اجتماعية حرة، اتبع هذا الرابط للعثور على عقدة عمومية لفرَندِكا وانضم إلينا اليوم.'; +$a->strings['Only logged in users are permitted to perform a search.'] = 'يمكن فقط للمستخدمين المسجلين البحث في الموقع.'; +$a->strings['Only one search per minute is permitted for not logged in users.'] = 'يسمح ببحث واحد فقط في كل دقيقة للزوار.'; $a->strings['Items tagged with: %s'] = 'عناصر موسمة بـ: %s'; $a->strings['Search term was not saved.'] = 'لم يُحفظ مصطلح البحث.'; $a->strings['Search term already saved.'] = 'حُفظ مصطلح البحث سلفًا.'; @@ -2081,6 +2116,7 @@ $a->strings['or'] = 'أو'; $a->strings['skip this step'] = 'تخطى هذه الخطوة'; $a->strings['select a photo from your photo albums'] = 'اختر صورة من ألبومك'; $a->strings['Please enter your password to access this page.'] = 'يرجى إدخال كلمة المرور للوصول إلى هذه الصفحة.'; +$a->strings['New app-specific password generated.'] = 'أُنشئت كلمة مرور جديدة خاصة بالتطبيق بنجاح.'; $a->strings['Description'] = 'الوصف'; $a->strings['Last Used'] = 'آخر استخدام'; $a->strings['Revoke'] = 'أبطل'; @@ -2171,8 +2207,8 @@ $a->strings['%1$s tagged you on %2$s'] = 'ذكرك %1$s في %2$s'; $a->strings['%1$s replied to you on %2$s'] = 'رد %1$s عليك في %2$s'; $a->strings['%1$s commented in your thread %2$s'] = 'علق %1$s على نقاشك %2$s'; $a->strings['%1$s commented on your comment %2$s'] = 'علق %1$s على تعليقك %2$s'; -$a->strings['%1$s commented in their thread %2$s'] = 'علق %1$s على نقاشهم %2$s'; -$a->strings['%1$s commented in their thread'] = 'علق %1$s على نقاشهم'; +$a->strings['%1$s commented in their thread %2$s'] = 'علق %1$s على نقاشه %2$s'; +$a->strings['%1$s commented in their thread'] = 'علق %1$s على نقاشه'; $a->strings['%1$s commented in the thread %2$s from %3$s'] = 'علق %1$s على المحدثة %2$s من %3$s'; $a->strings['%1$s commented in the thread from %3$s'] = 'علق %1$s على نقاش %3$s'; $a->strings['%1$s commented on your thread %2$s'] = 'علق %1$s على نقاشك %2$s'; From 87e056d2cf7002f5f27e7098c881c936eb225b6c Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Wed, 27 Oct 2021 13:54:18 +0200 Subject: [PATCH 08/19] EN GB translation update THX AndyH3 --- view/lang/en-gb/messages.po | 7117 ++++++++++++++++++----------------- view/lang/en-gb/strings.php | 755 ++-- 2 files changed, 3928 insertions(+), 3944 deletions(-) diff --git a/view/lang/en-gb/messages.po b/view/lang/en-gb/messages.po index 4e6e7af91..ff63a0c67 100644 --- a/view/lang/en-gb/messages.po +++ b/view/lang/en-gb/messages.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-10 20:30+0200\n" -"PO-Revision-Date: 2021-04-26 17:01+0000\n" +"POT-Creation-Date: 2021-10-24 23:21-0400\n" +"PO-Revision-Date: 2021-10-27 06:35+0000\n" "Last-Translator: Andy H3 \n" "Language-Team: English (United Kingdom) (http://www.transifex.com/Friendica/friendica/language/en_GB/)\n" "MIME-Version: 1.0\n" @@ -20,14 +20,14 @@ msgstr "" "Language: en_GB\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: include/api.php:1127 +#: include/api.php:1113 src/Module/BaseApi.php:294 #, php-format msgid "Daily posting limit of %d post reached. The post was rejected." msgid_plural "Daily posting limit of %d posts reached. The post was rejected." msgstr[0] "Daily posting limit of %d post reached. The post was rejected." msgstr[1] "Daily posting limit of %d posts are reached. This post was rejected." -#: include/api.php:1141 +#: include/api.php:1127 src/Module/BaseApi.php:310 #, php-format msgid "Weekly posting limit of %d post reached. The post was rejected." msgid_plural "" @@ -35,1362 +35,408 @@ msgid_plural "" msgstr[0] "Weekly posting limit of %d post reached. The post was rejected." msgstr[1] "Weekly posting limit of %d posts are reached. This post was rejected." -#: include/api.php:1155 +#: include/api.php:1141 src/Module/BaseApi.php:326 #, php-format msgid "Monthly posting limit of %d post reached. The post was rejected." msgstr "Monthly posting limit of %d posts are reached. The post was rejected." -#: include/api.php:4452 mod/photos.php:107 mod/photos.php:211 -#: mod/photos.php:639 mod/photos.php:1043 mod/photos.php:1060 -#: mod/photos.php:1609 src/Model/User.php:1045 src/Model/User.php:1053 -#: src/Model/User.php:1061 src/Module/Settings/Profile/Photo/Crop.php:97 -#: src/Module/Settings/Profile/Photo/Crop.php:113 -#: src/Module/Settings/Profile/Photo/Crop.php:129 -#: src/Module/Settings/Profile/Photo/Crop.php:178 -#: src/Module/Settings/Profile/Photo/Index.php:96 -#: src/Module/Settings/Profile/Photo/Index.php:102 -msgid "Profile Photos" -msgstr "Profile photos" - -#: include/conversation.php:195 -#, php-format -msgid "%1$s poked %2$s" -msgstr "%1$s poked %2$s" - -#: include/conversation.php:227 src/Model/Item.php:2497 -msgid "event" -msgstr "event" - -#: include/conversation.php:230 include/conversation.php:239 mod/tagger.php:90 -msgid "status" -msgstr "status" - -#: include/conversation.php:235 mod/tagger.php:90 src/Model/Item.php:2499 -msgid "photo" -msgstr "photo" - -#: include/conversation.php:249 mod/tagger.php:123 -#, php-format -msgid "%1$s tagged %2$s's %3$s with %4$s" -msgstr "%1$s tagged %2$s's %3$s with %4$s" - -#: include/conversation.php:564 mod/photos.php:1470 src/Object/Post.php:226 -msgid "Select" -msgstr "Select" - -#: include/conversation.php:565 mod/photos.php:1471 mod/settings.php:569 -#: mod/settings.php:711 src/Module/Admin/Users/Active.php:139 -#: src/Module/Admin/Users/Blocked.php:140 src/Module/Admin/Users/Index.php:153 -#: src/Module/Contact.php:886 src/Module/Contact.php:1190 -msgid "Delete" -msgstr "Delete" - -#: include/conversation.php:600 src/Object/Post.php:444 -#: src/Object/Post.php:445 -#, php-format -msgid "View %s's profile @ %s" -msgstr "View %s's profile @ %s" - -#: include/conversation.php:613 src/Object/Post.php:432 -msgid "Categories:" -msgstr "Categories:" - -#: include/conversation.php:614 src/Object/Post.php:433 -msgid "Filed under:" -msgstr "Filed under:" - -#: include/conversation.php:621 src/Object/Post.php:458 -#, php-format -msgid "%s from %s" -msgstr "%s from %s" - -#: include/conversation.php:636 -msgid "View in context" -msgstr "View in context" - -#: include/conversation.php:638 include/conversation.php:1222 -#: mod/editpost.php:104 mod/message.php:204 mod/message.php:374 -#: mod/photos.php:1536 mod/wallmessage.php:155 src/Module/Item/Compose.php:159 -#: src/Object/Post.php:492 -msgid "Please wait" -msgstr "Please wait" - -#: include/conversation.php:702 -msgid "remove" -msgstr "Remove" - -#: include/conversation.php:707 -msgid "Delete Selected Items" -msgstr "Delete selected items" - -#: include/conversation.php:744 include/conversation.php:747 -#: include/conversation.php:750 include/conversation.php:753 -#, php-format -msgid "You had been addressed (%s)." -msgstr "" - -#: include/conversation.php:756 -#, php-format -msgid "You are following %s." -msgstr "You are following %s." - -#: include/conversation.php:759 -msgid "Tagged" -msgstr "Tagged" - -#: include/conversation.php:772 include/conversation.php:1115 -#: include/conversation.php:1153 -#, php-format -msgid "%s reshared this." -msgstr "%s reshared this." - -#: include/conversation.php:774 -msgid "Reshared" -msgstr "Reshared" - -#: include/conversation.php:774 -#, php-format -msgid "Reshared by %s" -msgstr "Reshared by %s" - -#: include/conversation.php:777 -#, php-format -msgid "%s is participating in this thread." -msgstr "" - -#: include/conversation.php:780 -msgid "Stored" -msgstr "Stored" - -#: include/conversation.php:783 -msgid "Global" -msgstr "Global" - -#: include/conversation.php:786 -msgid "Relayed" -msgstr "Relayed" - -#: include/conversation.php:786 -#, php-format -msgid "Relayed by %s." -msgstr "Relayed by %s." - -#: include/conversation.php:789 -msgid "Fetched" -msgstr "Fetched" - -#: include/conversation.php:789 -#, php-format -msgid "Fetched because of %s" -msgstr "Fetched because of %s" - -#: include/conversation.php:948 view/theme/frio/theme.php:322 -msgid "Follow Thread" -msgstr "Follow thread" - -#: include/conversation.php:949 src/Model/Contact.php:986 -msgid "View Status" -msgstr "View status" - -#: include/conversation.php:950 include/conversation.php:972 -#: src/Model/Contact.php:912 src/Model/Contact.php:978 -#: src/Model/Contact.php:987 src/Module/Directory.php:166 -#: src/Module/Settings/Profile/Index.php:240 -msgid "View Profile" -msgstr "View profile" - -#: include/conversation.php:951 src/Model/Contact.php:988 -msgid "View Photos" -msgstr "View photos" - -#: include/conversation.php:952 src/Model/Contact.php:979 -#: src/Model/Contact.php:989 -msgid "Network Posts" -msgstr "Network posts" - -#: include/conversation.php:953 src/Model/Contact.php:980 -#: src/Model/Contact.php:990 -msgid "View Contact" -msgstr "View contact" - -#: include/conversation.php:954 src/Model/Contact.php:992 -msgid "Send PM" -msgstr "Send PM" - -#: include/conversation.php:955 src/Module/Admin/Blocklist/Contact.php:84 -#: src/Module/Admin/Users/Active.php:140 src/Module/Admin/Users/Index.php:154 -#: src/Module/Contact.php:625 src/Module/Contact.php:883 -#: src/Module/Contact.php:1165 -msgid "Block" -msgstr "Block" - -#: include/conversation.php:956 src/Module/Contact.php:626 -#: src/Module/Contact.php:884 src/Module/Contact.php:1173 -#: src/Module/Notifications/Introductions.php:113 -#: src/Module/Notifications/Introductions.php:191 -#: src/Module/Notifications/Notification.php:59 -msgid "Ignore" -msgstr "Ignore" - -#: include/conversation.php:960 src/Object/Post.php:421 -msgid "Languages" -msgstr "Languages" - -#: include/conversation.php:964 src/Model/Contact.php:993 -msgid "Poke" -msgstr "Poke" - -#: include/conversation.php:969 mod/follow.php:146 src/Content/Widget.php:76 -#: src/Model/Contact.php:981 src/Model/Contact.php:994 -#: view/theme/vier/theme.php:172 -msgid "Connect/Follow" -msgstr "Connect/Follow" - -#: include/conversation.php:1100 -#, php-format -msgid "%s likes this." -msgstr "%s likes this." - -#: include/conversation.php:1103 -#, php-format -msgid "%s doesn't like this." -msgstr "%s doesn't like this." - -#: include/conversation.php:1106 -#, php-format -msgid "%s attends." -msgstr "%s attends." - -#: include/conversation.php:1109 -#, php-format -msgid "%s doesn't attend." -msgstr "%s doesn't attend." - -#: include/conversation.php:1112 -#, php-format -msgid "%s attends maybe." -msgstr "%s may attend." - -#: include/conversation.php:1121 -msgid "and" -msgstr "and" - -#: include/conversation.php:1124 -#, php-format -msgid "and %d other people" -msgstr "and %d other people" - -#: include/conversation.php:1132 -#, php-format -msgid "%2$d people like this" -msgstr "%2$d people like this" - -#: include/conversation.php:1133 -#, php-format -msgid "%s like this." -msgstr "%s like this." - -#: include/conversation.php:1136 -#, php-format -msgid "%2$d people don't like this" -msgstr "%2$d people don't like this" - -#: include/conversation.php:1137 -#, php-format -msgid "%s don't like this." -msgstr "%s don't like this." - -#: include/conversation.php:1140 -#, php-format -msgid "%2$d people attend" -msgstr "%2$d people attend" - -#: include/conversation.php:1141 -#, php-format -msgid "%s attend." -msgstr "%s attend." - -#: include/conversation.php:1144 -#, php-format -msgid "%2$d people don't attend" -msgstr "%2$d people don't attend" - -#: include/conversation.php:1145 -#, php-format -msgid "%s don't attend." -msgstr "%s don't attend." - -#: include/conversation.php:1148 -#, php-format -msgid "%2$d people attend maybe" -msgstr "%2$d people attend maybe" - -#: include/conversation.php:1149 -#, php-format -msgid "%s attend maybe." -msgstr "%s may be attending." - -#: include/conversation.php:1152 -#, php-format -msgid "%2$d people reshared this" -msgstr "%2$d people reshared this" - -#: include/conversation.php:1182 -msgid "Visible to everybody" -msgstr "Visible to everybody" - -#: include/conversation.php:1183 src/Module/Item/Compose.php:153 -#: src/Object/Post.php:959 -msgid "Please enter a image/video/audio/webpage URL:" -msgstr "Please enter an image/video/audio/webpage URL:" - -#: include/conversation.php:1184 -msgid "Tag term:" -msgstr "Tag term:" - -#: include/conversation.php:1185 src/Module/Filer/SaveTag.php:69 -msgid "Save to Folder:" -msgstr "Save to folder:" - -#: include/conversation.php:1186 -msgid "Where are you right now?" -msgstr "Where are you right now?" - -#: include/conversation.php:1187 -msgid "Delete item(s)?" -msgstr "Delete item(s)?" - -#: include/conversation.php:1197 -msgid "New Post" -msgstr "New post" - -#: include/conversation.php:1200 -msgid "Share" -msgstr "Share" - -#: include/conversation.php:1201 mod/editpost.php:89 mod/photos.php:1382 -#: src/Module/Contact/Poke.php:154 src/Object/Post.php:950 -msgid "Loading..." -msgstr "Loading..." - -#: include/conversation.php:1202 mod/editpost.php:90 mod/message.php:202 -#: mod/message.php:371 mod/wallmessage.php:153 -msgid "Upload photo" -msgstr "Upload photo" - -#: include/conversation.php:1203 mod/editpost.php:91 -msgid "upload photo" -msgstr "upload photo" - -#: include/conversation.php:1204 mod/editpost.php:92 -msgid "Attach file" -msgstr "Attach file" - -#: include/conversation.php:1205 mod/editpost.php:93 -msgid "attach file" -msgstr "attach file" - -#: include/conversation.php:1206 src/Module/Item/Compose.php:145 -#: src/Object/Post.php:951 -msgid "Bold" -msgstr "Bold" - -#: include/conversation.php:1207 src/Module/Item/Compose.php:146 -#: src/Object/Post.php:952 -msgid "Italic" -msgstr "Italic" - -#: include/conversation.php:1208 src/Module/Item/Compose.php:147 -#: src/Object/Post.php:953 -msgid "Underline" -msgstr "Underline" - -#: include/conversation.php:1209 src/Module/Item/Compose.php:148 -#: src/Object/Post.php:954 -msgid "Quote" -msgstr "Quote" - -#: include/conversation.php:1210 src/Module/Item/Compose.php:149 -#: src/Object/Post.php:955 -msgid "Code" -msgstr "Code" - -#: include/conversation.php:1211 src/Module/Item/Compose.php:150 -#: src/Object/Post.php:956 -msgid "Image" -msgstr "Image" - -#: include/conversation.php:1212 src/Module/Item/Compose.php:151 -#: src/Object/Post.php:957 -msgid "Link" -msgstr "Link" - -#: include/conversation.php:1213 src/Module/Item/Compose.php:152 -#: src/Object/Post.php:958 -msgid "Link or Media" -msgstr "Link or media" - -#: include/conversation.php:1214 mod/editpost.php:100 -#: src/Module/Item/Compose.php:155 -msgid "Set your location" -msgstr "Set your location" - -#: include/conversation.php:1215 mod/editpost.php:101 -msgid "set location" -msgstr "set location" - -#: include/conversation.php:1216 mod/editpost.php:102 -msgid "Clear browser location" -msgstr "Clear browser location" - -#: include/conversation.php:1217 mod/editpost.php:103 -msgid "clear location" -msgstr "clear location" - -#: include/conversation.php:1219 mod/editpost.php:117 -#: src/Module/Item/Compose.php:160 -msgid "Set title" -msgstr "Set title" - -#: include/conversation.php:1221 mod/editpost.php:119 -#: src/Module/Item/Compose.php:161 -msgid "Categories (comma-separated list)" -msgstr "Categories (comma-separated list)" - -#: include/conversation.php:1223 mod/editpost.php:105 -msgid "Permission settings" -msgstr "Permission settings" - -#: include/conversation.php:1224 mod/editpost.php:134 mod/events.php:578 -#: mod/photos.php:969 mod/photos.php:1335 -msgid "Permissions" -msgstr "Permissions" - -#: include/conversation.php:1233 mod/editpost.php:114 -msgid "Public post" -msgstr "Public post" - -#: include/conversation.php:1237 mod/editpost.php:125 mod/events.php:573 -#: mod/photos.php:1381 mod/photos.php:1438 mod/photos.php:1513 -#: src/Module/Item/Compose.php:154 src/Object/Post.php:960 -msgid "Preview" -msgstr "Preview" - -#: include/conversation.php:1241 mod/dfrn_request.php:642 mod/editpost.php:128 -#: mod/fbrowser.php:105 mod/fbrowser.php:134 mod/follow.php:152 -#: mod/photos.php:1037 mod/photos.php:1143 mod/settings.php:509 -#: mod/settings.php:535 mod/tagrm.php:37 mod/tagrm.php:127 -#: mod/unfollow.php:100 src/Module/Contact.php:459 -#: src/Module/RemoteFollow.php:110 -msgid "Cancel" -msgstr "Cancel" - -#: include/conversation.php:1248 mod/editpost.php:132 -#: src/Model/Profile.php:445 src/Module/Contact.php:344 -msgid "Message" -msgstr "Message" - -#: include/conversation.php:1249 mod/editpost.php:133 -#: src/Module/Settings/TwoFactor/Trusted.php:101 -msgid "Browser" -msgstr "Browser" - -#: include/conversation.php:1251 mod/editpost.php:136 -msgid "Open Compose page" -msgstr "Open Compose page" - -#: include/enotify.php:51 -msgid "[Friendica:Notify]" -msgstr "[Friendica:Notify]" - -#: include/enotify.php:137 -#, php-format -msgid "%s New mail received at %s" -msgstr "%s New mail received at %s" - -#: include/enotify.php:139 -#, php-format -msgid "%1$s sent you a new private message at %2$s." -msgstr "%1$s sent you a new private message at %2$s." - -#: include/enotify.php:140 -msgid "a private message" -msgstr "a private message" - -#: include/enotify.php:140 -#, php-format -msgid "%1$s sent you %2$s." -msgstr "%1$s sent you %2$s." - -#: include/enotify.php:142 -#, php-format -msgid "Please visit %s to view and/or reply to your private messages." -msgstr "Please visit %s to view or reply to your private messages." - -#: include/enotify.php:188 -#, php-format -msgid "%1$s replied to you on %2$s's %3$s %4$s" -msgstr "%1$s replied to you on %2$s's %3$s %4$s" - -#: include/enotify.php:190 -#, php-format -msgid "%1$s tagged you on %2$s's %3$s %4$s" -msgstr "%1$s tagged you on %2$s's %3$s %4$s" - -#: include/enotify.php:192 -#, php-format -msgid "%1$s commented on %2$s's %3$s %4$s" -msgstr "%1$s commented on %2$s's %3$s %4$s" - -#: include/enotify.php:202 -#, php-format -msgid "%1$s replied to you on your %2$s %3$s" -msgstr "%1$s replied to you on your %2$s %3$s" - -#: include/enotify.php:204 -#, php-format -msgid "%1$s tagged you on your %2$s %3$s" -msgstr "%1$s tagged you on your %2$s %3$s" - -#: include/enotify.php:206 -#, php-format -msgid "%1$s commented on your %2$s %3$s" -msgstr "%1$s commented on your %2$s %3$s" - -#: include/enotify.php:213 -#, php-format -msgid "%1$s replied to you on their %2$s %3$s" -msgstr "%1$s replied to you on their %2$s %3$s" - -#: include/enotify.php:215 -#, php-format -msgid "%1$s tagged you on their %2$s %3$s" -msgstr "%1$s tagged you on their %2$s %3$s" - -#: include/enotify.php:217 -#, php-format -msgid "%1$s commented on their %2$s %3$s" -msgstr "%1$s commented on their %2$s %3$s" - -#: include/enotify.php:228 -#, php-format -msgid "%s %s tagged you" -msgstr "%s %s tagged you" - -#: include/enotify.php:230 -#, php-format -msgid "%1$s tagged you at %2$s" -msgstr "%1$s tagged you at %2$s" - -#: include/enotify.php:232 -#, php-format -msgid "%1$s Comment to conversation #%2$d by %3$s" -msgstr "%1$s Comment to conversation #%2$d by %3$s" - -#: include/enotify.php:234 -#, php-format -msgid "%s commented on an item/conversation you have been following." -msgstr "%s commented on an item/conversation you have been following." - -#: include/enotify.php:239 include/enotify.php:254 include/enotify.php:279 -#: include/enotify.php:298 include/enotify.php:314 -#, php-format -msgid "Please visit %s to view and/or reply to the conversation." -msgstr "Please visit %s to view or reply to the conversation." - -#: include/enotify.php:246 -#, php-format -msgid "%s %s posted to your profile wall" -msgstr "%s %s posted to your profile wall" - -#: include/enotify.php:248 -#, php-format -msgid "%1$s posted to your profile wall at %2$s" -msgstr "%1$s posted to your profile wall at %2$s" - -#: include/enotify.php:249 -#, php-format -msgid "%1$s posted to [url=%2$s]your wall[/url]" -msgstr "%1$s posted to [url=%2$s]your wall[/url]" - -#: include/enotify.php:262 -#, php-format -msgid "%s %s shared a new post" -msgstr "%s %s shared a new post" - -#: include/enotify.php:264 -#, php-format -msgid "%1$s shared a new post at %2$s" -msgstr "%1$s shared a new post at %2$s" - -#: include/enotify.php:265 -#, php-format -msgid "%1$s [url=%2$s]shared a post[/url]." -msgstr "%1$s [url=%2$s]shared a post[/url]." - -#: include/enotify.php:270 -#, php-format -msgid "%s %s shared a post from %s" -msgstr "" - -#: include/enotify.php:272 -#, php-format -msgid "%1$s shared a post from %2$s at %3$s" -msgstr "" - -#: include/enotify.php:273 -#, php-format -msgid "%1$s [url=%2$s]shared a post[/url] from %3$s." -msgstr "" - -#: include/enotify.php:286 -#, php-format -msgid "%1$s %2$s poked you" -msgstr "%1$s %2$s poked you" - -#: include/enotify.php:288 -#, php-format -msgid "%1$s poked you at %2$s" -msgstr "%1$s poked you at %2$s" - -#: include/enotify.php:289 -#, php-format -msgid "%1$s [url=%2$s]poked you[/url]." -msgstr "%1$s [url=%2$s]poked you[/url]." - -#: include/enotify.php:306 -#, php-format -msgid "%s %s tagged your post" -msgstr "%s %s tagged your post" - -#: include/enotify.php:308 -#, php-format -msgid "%1$s tagged your post at %2$s" -msgstr "%1$s tagged your post at %2$s" - -#: include/enotify.php:309 -#, php-format -msgid "%1$s tagged [url=%2$s]your post[/url]" -msgstr "%1$s tagged [url=%2$s]your post[/url]" - -#: include/enotify.php:321 -#, php-format -msgid "%s Introduction received" -msgstr "%s Introduction received" - -#: include/enotify.php:323 -#, php-format -msgid "You've received an introduction from '%1$s' at %2$s" -msgstr "You've received an introduction from '%1$s' at %2$s" - -#: include/enotify.php:324 -#, php-format -msgid "You've received [url=%1$s]an introduction[/url] from %2$s." -msgstr "You've received [url=%1$s]an introduction[/url] from %2$s." - -#: include/enotify.php:329 include/enotify.php:375 -#, php-format -msgid "You may visit their profile at %s" -msgstr "You may visit their profile at %s" - -#: include/enotify.php:331 -#, php-format -msgid "Please visit %s to approve or reject the introduction." -msgstr "Please visit %s to approve or reject the introduction." - -#: include/enotify.php:338 -#, php-format -msgid "%s A new person is sharing with you" -msgstr "%s A new person is sharing with you" - -#: include/enotify.php:340 include/enotify.php:341 -#, php-format -msgid "%1$s is sharing with you at %2$s" -msgstr "%1$s is sharing with you at %2$s" - -#: include/enotify.php:348 -#, php-format -msgid "%s You have a new follower" -msgstr "%s You have a new follower" - -#: include/enotify.php:350 include/enotify.php:351 -#, php-format -msgid "You have a new follower at %2$s : %1$s" -msgstr "You have a new follower at %2$s : %1$s" - -#: include/enotify.php:364 -#, php-format -msgid "%s Friend suggestion received" -msgstr "%s Friend suggestion received" - -#: include/enotify.php:366 -#, php-format -msgid "You've received a friend suggestion from '%1$s' at %2$s" -msgstr "You've received a friend suggestion from '%1$s' at %2$s" - -#: include/enotify.php:367 -#, php-format -msgid "" -"You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s." -msgstr "You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s." - -#: include/enotify.php:373 -msgid "Name:" -msgstr "Name:" - -#: include/enotify.php:374 -msgid "Photo:" -msgstr "Photo:" - -#: include/enotify.php:377 -#, php-format -msgid "Please visit %s to approve or reject the suggestion." -msgstr "Please visit %s to approve or reject the suggestion." - -#: include/enotify.php:385 include/enotify.php:400 -#, php-format -msgid "%s Connection accepted" -msgstr "%s Connection accepted" - -#: include/enotify.php:387 include/enotify.php:402 -#, php-format -msgid "'%1$s' has accepted your connection request at %2$s" -msgstr "'%1$s' has accepted your connection request at %2$s" - -#: include/enotify.php:388 include/enotify.php:403 -#, php-format -msgid "%2$s has accepted your [url=%1$s]connection request[/url]." -msgstr "%2$s has accepted your [url=%1$s]connection request[/url]." - -#: include/enotify.php:393 -msgid "" -"You are now mutual friends and may exchange status updates, photos, and " -"email without restriction." -msgstr "You are now mutual friends and may exchange status updates, photos, and email without restriction." - -#: include/enotify.php:395 -#, php-format -msgid "Please visit %s if you wish to make any changes to this relationship." -msgstr "Please visit %s if you wish to make any changes to this relationship." - -#: include/enotify.php:408 -#, php-format -msgid "" -"'%1$s' has chosen to accept you a fan, which restricts some forms of " -"communication - such as private messaging and some profile interactions. If " -"this is a celebrity or community page, these settings were applied " -"automatically." -msgstr "'%1$s' has chosen to accept you as fan. This restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically." - -#: include/enotify.php:410 -#, php-format -msgid "" -"'%1$s' may choose to extend this into a two-way or more permissive " -"relationship in the future." -msgstr "'%1$s' may choose to extend this into a two-way or more permissive relationship in the future." - -#: include/enotify.php:412 -#, php-format -msgid "Please visit %s if you wish to make any changes to this relationship." -msgstr "Please visit %s if you wish to make any changes to this relationship." - -#: include/enotify.php:422 mod/removeme.php:63 -msgid "[Friendica System Notify]" -msgstr "[Friendica System Notify]" - -#: include/enotify.php:422 -msgid "registration request" -msgstr "registration request" - -#: include/enotify.php:424 -#, php-format -msgid "You've received a registration request from '%1$s' at %2$s" -msgstr "You've received a registration request from '%1$s' at %2$s." - -#: include/enotify.php:425 -#, php-format -msgid "You've received a [url=%1$s]registration request[/url] from %2$s." -msgstr "You've received a [url=%1$s]registration request[/url] from %2$s." - -#: include/enotify.php:430 -#, php-format -msgid "" -"Full Name:\t%s\n" -"Site Location:\t%s\n" -"Login Name:\t%s (%s)" -msgstr "Full Name:\t%s\nSite Location:\t%s\nLogin Name:\t%s (%s)" - -#: include/enotify.php:436 -#, php-format -msgid "Please visit %s to approve or reject the request." -msgstr "Please visit %s to approve or reject the request." - -#: mod/api.php:52 mod/api.php:57 mod/dfrn_confirm.php:78 mod/editpost.php:37 -#: mod/events.php:231 mod/follow.php:55 mod/follow.php:135 mod/item.php:183 -#: mod/item.php:188 mod/item.php:905 mod/message.php:69 mod/message.php:112 -#: mod/notes.php:44 mod/ostatus_subscribe.php:30 mod/photos.php:176 -#: mod/photos.php:922 mod/repair_ostatus.php:31 mod/settings.php:47 -#: mod/settings.php:65 mod/settings.php:498 mod/suggest.php:34 -#: mod/uimport.php:32 mod/unfollow.php:35 mod/unfollow.php:50 -#: mod/unfollow.php:82 mod/wall_attach.php:78 mod/wall_attach.php:81 -#: mod/wallmessage.php:35 mod/wallmessage.php:59 mod/wallmessage.php:96 -#: mod/wallmessage.php:120 mod/wall_upload.php:99 mod/wall_upload.php:102 -#: src/Module/Attach.php:56 src/Module/BaseApi.php:59 -#: src/Module/BaseApi.php:65 src/Module/BaseNotifications.php:88 -#: src/Module/Contact/Advanced.php:43 src/Module/Contact.php:385 -#: src/Module/Delegation.php:118 src/Module/FollowConfirm.php:16 -#: src/Module/FriendSuggest.php:44 src/Module/Group.php:45 -#: src/Module/Group.php:90 src/Module/Invite.php:40 src/Module/Invite.php:127 -#: src/Module/Notifications/Notification.php:47 -#: src/Module/Notifications/Notification.php:76 -#: src/Module/Profile/Common.php:57 src/Module/Profile/Contacts.php:57 -#: src/Module/Register.php:62 src/Module/Register.php:75 -#: src/Module/Register.php:193 src/Module/Register.php:232 +#: mod/api.php:30 mod/editpost.php:38 mod/events.php:220 mod/follow.php:56 +#: mod/follow.php:130 mod/item.php:185 mod/item.php:190 mod/item.php:936 +#: mod/message.php:69 mod/message.php:111 mod/notes.php:44 +#: mod/ostatus_subscribe.php:32 mod/photos.php:160 mod/photos.php:900 +#: mod/repair_ostatus.php:31 mod/settings.php:47 mod/settings.php:57 +#: mod/settings.php:409 mod/suggest.php:34 mod/uimport.php:33 +#: mod/unfollow.php:35 mod/unfollow.php:50 mod/unfollow.php:82 +#: mod/wall_attach.php:68 mod/wall_attach.php:71 mod/wall_upload.php:90 +#: mod/wall_upload.php:93 mod/wallmessage.php:36 mod/wallmessage.php:55 +#: mod/wallmessage.php:89 mod/wallmessage.php:109 src/Module/Attach.php:55 +#: src/Module/BaseApi.php:79 src/Module/BaseApi.php:88 +#: src/Module/BaseApi.php:97 src/Module/BaseApi.php:106 +#: src/Module/BaseNotifications.php:88 src/Module/Contact.php:328 +#: src/Module/Contact/Advanced.php:44 src/Module/Delegation.php:118 +#: src/Module/FollowConfirm.php:17 src/Module/FriendSuggest.php:44 +#: src/Module/Group.php:45 src/Module/Group.php:90 src/Module/Invite.php:41 +#: src/Module/Invite.php:130 src/Module/Notifications/Notification.php:48 +#: src/Module/Notifications/Notification.php:79 +#: src/Module/Profile/Common.php:56 src/Module/Profile/Contacts.php:56 +#: src/Module/Profile/Schedule.php:39 src/Module/Profile/Schedule.php:56 +#: src/Module/Register.php:64 src/Module/Register.php:77 +#: src/Module/Register.php:195 src/Module/Register.php:234 #: src/Module/Search/Directory.php:38 src/Module/Settings/Delegation.php:42 -#: src/Module/Settings/Delegation.php:70 src/Module/Settings/Display.php:42 -#: src/Module/Settings/Display.php:118 -#: src/Module/Settings/Profile/Photo/Crop.php:157 -#: src/Module/Settings/Profile/Photo/Index.php:113 -#: src/Module/Settings/UserExport.php:59 src/Module/Settings/UserExport.php:94 -#: src/Module/Settings/UserExport.php:201 -#: src/Module/Settings/UserExport.php:221 -#: src/Module/Settings/UserExport.php:286 +#: src/Module/Settings/Delegation.php:70 src/Module/Settings/Display.php:43 +#: src/Module/Settings/Display.php:121 +#: src/Module/Settings/Profile/Photo/Crop.php:166 +#: src/Module/Settings/Profile/Photo/Index.php:112 +#: src/Module/Settings/UserExport.php:58 src/Module/Settings/UserExport.php:93 +#: src/Module/Settings/UserExport.php:198 +#: src/Module/Settings/UserExport.php:218 +#: src/Module/Settings/UserExport.php:283 msgid "Permission denied." msgstr "Permission denied." -#: mod/api.php:102 mod/api.php:124 -msgid "Authorize application connection" -msgstr "Authorise application connection" - -#: mod/api.php:103 -msgid "Return to your app and insert this Securty Code:" -msgstr "Return to your app and insert this security code:" - -#: mod/api.php:112 src/Module/BaseAdmin.php:54 src/Module/BaseAdmin.php:58 -msgid "Please login to continue." -msgstr "Please login to continue." - -#: mod/api.php:126 -msgid "" -"Do you want to authorize this application to access your posts and contacts," -" and/or create new posts for you?" -msgstr "Do you want to authorise this application to access your posts and contacts and create new posts for you?" - -#: mod/api.php:127 src/Module/Contact.php:456 -#: src/Module/Notifications/Introductions.php:123 src/Module/Register.php:115 -msgid "Yes" -msgstr "Yes" - -#: mod/api.php:128 src/Module/Notifications/Introductions.php:123 -#: src/Module/Register.php:116 -msgid "No" -msgstr "No" - -#: mod/cal.php:46 mod/cal.php:50 mod/follow.php:38 mod/redir.php:34 -#: mod/redir.php:203 src/Module/Conversation/Community.php:194 -#: src/Module/Debug/ItemBody.php:38 src/Module/Diaspora/Receive.php:51 +#: mod/cal.php:44 mod/cal.php:48 mod/follow.php:39 mod/redir.php:34 +#: mod/redir.php:175 src/Module/Conversation/Community.php:182 +#: src/Module/Debug/ItemBody.php:37 src/Module/Diaspora/Receive.php:51 #: src/Module/Item/Follow.php:42 src/Module/Item/Ignore.php:41 #: src/Module/Item/Pin.php:42 src/Module/Item/Pin.php:57 -#: src/Module/Item/Star.php:42 +#: src/Module/Item/Star.php:43 msgid "Access denied." msgstr "Access denied." -#: mod/cal.php:72 mod/cal.php:133 src/Module/HoverCard.php:53 -#: src/Module/Profile/Common.php:41 src/Module/Profile/Common.php:53 -#: src/Module/Profile/Contacts.php:40 src/Module/Profile/Contacts.php:51 -#: src/Module/Profile/Status.php:58 src/Module/Register.php:258 +#: mod/cal.php:61 mod/cal.php:78 mod/photos.php:69 mod/photos.php:140 +#: mod/photos.php:807 src/Model/Profile.php:229 src/Module/HCard.php:52 +#: src/Module/Profile/Common.php:41 src/Module/Profile/Common.php:52 +#: src/Module/Profile/Contacts.php:40 src/Module/Profile/Contacts.php:50 +#: src/Module/Profile/Media.php:38 src/Module/Profile/Status.php:58 +#: src/Module/Register.php:256 src/Module/RemoteFollow.php:49 msgid "User not found." msgstr "User not found." -#: mod/cal.php:143 mod/display.php:283 src/Module/Profile/Profile.php:94 +#: mod/cal.php:120 mod/display.php:270 src/Module/Profile/Profile.php:94 #: src/Module/Profile/Profile.php:109 src/Module/Profile/Status.php:109 -#: src/Module/Update/Profile.php:55 +#: src/Module/Update/Profile.php:56 msgid "Access to this profile has been restricted." msgstr "Access to this profile has been restricted." -#: mod/cal.php:274 mod/events.php:417 src/Content/Nav.php:181 -#: src/Content/Nav.php:248 src/Module/BaseProfile.php:88 -#: src/Module/BaseProfile.php:99 view/theme/frio/theme.php:229 +#: mod/cal.php:242 mod/events.php:377 src/Content/Nav.php:194 +#: src/Content/Nav.php:258 src/Module/BaseProfile.php:84 +#: src/Module/BaseProfile.php:95 view/theme/frio/theme.php:229 #: view/theme/frio/theme.php:233 msgid "Events" msgstr "Events" -#: mod/cal.php:275 mod/events.php:418 +#: mod/cal.php:243 mod/events.php:378 msgid "View" msgstr "View" -#: mod/cal.php:276 mod/events.php:420 +#: mod/cal.php:244 mod/events.php:380 msgid "Previous" msgstr "Previous" -#: mod/cal.php:277 mod/events.php:421 src/Module/Install.php:207 +#: mod/cal.php:245 mod/events.php:381 src/Module/Install.php:207 msgid "Next" msgstr "Next" -#: mod/cal.php:280 mod/events.php:426 src/Model/Event.php:464 +#: mod/cal.php:248 mod/events.php:386 src/Model/Event.php:457 msgid "today" msgstr "today" -#: mod/cal.php:281 mod/events.php:427 src/Model/Event.php:465 -#: src/Util/Temporal.php:330 +#: mod/cal.php:249 mod/events.php:387 src/Model/Event.php:458 +#: src/Util/Temporal.php:334 msgid "month" msgstr "month" -#: mod/cal.php:282 mod/events.php:428 src/Model/Event.php:466 -#: src/Util/Temporal.php:331 +#: mod/cal.php:250 mod/events.php:388 src/Model/Event.php:459 +#: src/Util/Temporal.php:335 msgid "week" msgstr "week" -#: mod/cal.php:283 mod/events.php:429 src/Model/Event.php:467 -#: src/Util/Temporal.php:332 +#: mod/cal.php:251 mod/events.php:389 src/Model/Event.php:460 +#: src/Util/Temporal.php:336 msgid "day" msgstr "day" -#: mod/cal.php:284 mod/events.php:430 +#: mod/cal.php:252 mod/events.php:390 msgid "list" msgstr "List" -#: mod/cal.php:297 src/Console/User.php:152 src/Console/User.php:250 -#: src/Console/User.php:283 src/Console/User.php:309 src/Model/User.php:607 +#: mod/cal.php:265 src/Console/User.php:182 src/Model/User.php:680 #: src/Module/Admin/Users/Active.php:73 src/Module/Admin/Users/Blocked.php:74 #: src/Module/Admin/Users/Index.php:80 src/Module/Admin/Users/Pending.php:71 -#: src/Module/Api/Twitter/ContactEndpoint.php:73 +#: src/Module/Api/Twitter/ContactEndpoint.php:71 msgid "User not found" msgstr "User not found" -#: mod/cal.php:306 +#: mod/cal.php:274 msgid "This calendar format is not supported" msgstr "This calendar format is not supported" -#: mod/cal.php:308 +#: mod/cal.php:276 msgid "No exportable data found" msgstr "No exportable data found" -#: mod/cal.php:325 +#: mod/cal.php:293 msgid "calendar" msgstr "calendar" -#: mod/dfrn_confirm.php:84 src/Module/Profile/Profile.php:82 -msgid "Profile not found." -msgstr "Profile not found." - -#: mod/dfrn_confirm.php:139 mod/redir.php:56 mod/redir.php:157 -#: src/Module/Contact/Advanced.php:53 src/Module/Contact/Advanced.php:104 -#: src/Module/Contact/Contacts.php:36 src/Module/FriendSuggest.php:54 -#: src/Module/FriendSuggest.php:93 src/Module/Group.php:105 -msgid "Contact not found." -msgstr "Contact not found." - -#: mod/dfrn_confirm.php:140 -msgid "" -"This may occasionally happen if contact was requested by both persons and it" -" has already been approved." -msgstr "This may occasionally happen if contact was requested by both persons and it has already been approved." - -#: mod/dfrn_confirm.php:241 -msgid "Response from remote site was not understood." -msgstr "Response from remote site was not understood." - -#: mod/dfrn_confirm.php:248 mod/dfrn_confirm.php:254 -msgid "Unexpected response from remote site: " -msgstr "Unexpected response from remote site: " - -#: mod/dfrn_confirm.php:263 -msgid "Confirmation completed successfully." -msgstr "Confirmation completed successfully." - -#: mod/dfrn_confirm.php:275 -msgid "Temporary failure. Please wait and try again." -msgstr "Temporary failure. Please wait and try again." - -#: mod/dfrn_confirm.php:278 -msgid "Introduction failed or was revoked." -msgstr "Introduction failed or was revoked." - -#: mod/dfrn_confirm.php:283 -msgid "Remote site reported: " -msgstr "Remote site reported: " - -#: mod/dfrn_confirm.php:388 -#, php-format -msgid "No user record found for '%s' " -msgstr "No user record found for '%s' " - -#: mod/dfrn_confirm.php:398 -msgid "Our site encryption key is apparently messed up." -msgstr "Our site encryption key is apparently messed up." - -#: mod/dfrn_confirm.php:409 -msgid "Empty site URL was provided or URL could not be decrypted by us." -msgstr "An empty URL was provided or the URL could not be decrypted by us." - -#: mod/dfrn_confirm.php:425 -msgid "Contact record was not found for you on our site." -msgstr "Contact record was not found for you on our site." - -#: mod/dfrn_confirm.php:439 -#, php-format -msgid "Site public key not available in contact record for URL %s." -msgstr "Site public key not available in contact record for URL %s." - -#: mod/dfrn_confirm.php:455 -msgid "" -"The ID provided by your system is a duplicate on our system. It should work " -"if you try again." -msgstr "The ID provided by your system is a duplicate on our system. It should work if you try again." - -#: mod/dfrn_confirm.php:466 -msgid "Unable to set your contact credentials on our system." -msgstr "Unable to set your contact credentials on our system." - -#: mod/dfrn_confirm.php:522 -msgid "Unable to update your contact profile details on our system" -msgstr "Unable to update your contact profile details on our system" - -#: mod/dfrn_poll.php:135 mod/dfrn_poll.php:506 -#, php-format -msgid "%1$s welcomes %2$s" -msgstr "%1$s welcomes %2$s" - -#: mod/dfrn_request.php:113 -msgid "This introduction has already been accepted." -msgstr "This introduction has already been accepted." - -#: mod/dfrn_request.php:131 mod/dfrn_request.php:369 -msgid "Profile location is not valid or does not contain profile information." -msgstr "Profile location is not valid or does not contain profile information." - -#: mod/dfrn_request.php:135 mod/dfrn_request.php:373 -msgid "Warning: profile location has no identifiable owner name." -msgstr "Warning: profile location has no identifiable owner name." - -#: mod/dfrn_request.php:138 mod/dfrn_request.php:376 -msgid "Warning: profile location has no profile photo." -msgstr "Warning: profile location has no profile photo." - -#: mod/dfrn_request.php:142 mod/dfrn_request.php:380 -#, php-format -msgid "%d required parameter was not found at the given location" -msgid_plural "%d required parameters were not found at the given location" -msgstr[0] "%d required parameter was not found at the given location" -msgstr[1] "%d required parameters were not found at the given location" - -#: mod/dfrn_request.php:180 -msgid "Introduction complete." -msgstr "Introduction complete." - -#: mod/dfrn_request.php:216 -msgid "Unrecoverable protocol error." -msgstr "Unrecoverable protocol error." - -#: mod/dfrn_request.php:243 src/Module/RemoteFollow.php:54 -msgid "Profile unavailable." -msgstr "Profile unavailable." - -#: mod/dfrn_request.php:264 -#, php-format -msgid "%s has received too many connection requests today." -msgstr "%s has received too many connection requests today." - -#: mod/dfrn_request.php:265 -msgid "Spam protection measures have been invoked." -msgstr "Spam protection measures have been invoked." - -#: mod/dfrn_request.php:266 -msgid "Friends are advised to please try again in 24 hours." -msgstr "Friends are advised to please try again in 24 hours." - -#: mod/dfrn_request.php:290 src/Module/RemoteFollow.php:60 -msgid "Invalid locator" -msgstr "Invalid locator" - -#: mod/dfrn_request.php:326 -msgid "You have already introduced yourself here." -msgstr "You have already introduced yourself here." - -#: mod/dfrn_request.php:329 -#, php-format -msgid "Apparently you are already friends with %s." -msgstr "Apparently you are already friends with %s." - -#: mod/dfrn_request.php:349 -msgid "Invalid profile URL." -msgstr "Invalid profile URL." - -#: mod/dfrn_request.php:355 src/Model/Contact.php:2159 -msgid "Disallowed profile URL." -msgstr "Disallowed profile URL." - -#: mod/dfrn_request.php:361 src/Model/Contact.php:2164 -#: src/Module/Friendica.php:80 -msgid "Blocked domain" -msgstr "Blocked domain" - -#: mod/dfrn_request.php:428 src/Module/Contact.php:157 -msgid "Failed to update contact record." -msgstr "Failed to update contact record." - -#: mod/dfrn_request.php:448 -msgid "Your introduction has been sent." -msgstr "Your introduction has been sent." - -#: mod/dfrn_request.php:480 src/Module/RemoteFollow.php:72 -msgid "" -"Remote subscription can't be done for your network. Please subscribe " -"directly on your system." -msgstr "Remote subscription can't be done for your network. Please subscribe directly on your system." - -#: mod/dfrn_request.php:496 -msgid "Please login to confirm introduction." -msgstr "Please login to confirm introduction." - -#: mod/dfrn_request.php:504 -msgid "" -"Incorrect identity currently logged in. Please login to " -"this profile." -msgstr "Incorrect identity currently logged in. Please login to this profile." - -#: mod/dfrn_request.php:518 mod/dfrn_request.php:533 -msgid "Confirm" -msgstr "Confirm" - -#: mod/dfrn_request.php:529 -msgid "Hide this contact" -msgstr "Hide this contact" - -#: mod/dfrn_request.php:531 -#, php-format -msgid "Welcome home %s." -msgstr "Welcome home %s." - -#: mod/dfrn_request.php:532 -#, php-format -msgid "Please confirm your introduction/connection request to %s." -msgstr "Please confirm your introduction/connection request to %s." - -#: mod/dfrn_request.php:600 mod/display.php:179 mod/photos.php:836 -#: mod/videos.php:129 src/Module/Conversation/Community.php:188 -#: src/Module/Debug/Probe.php:39 src/Module/Debug/WebFinger.php:38 -#: src/Module/Directory.php:49 src/Module/Search/Index.php:51 -#: src/Module/Search/Index.php:56 +#: mod/display.php:165 mod/photos.php:811 +#: src/Module/Conversation/Community.php:176 src/Module/Debug/Probe.php:39 +#: src/Module/Debug/WebFinger.php:38 src/Module/Directory.php:49 +#: src/Module/Search/Index.php:50 src/Module/Search/Index.php:55 msgid "Public access denied." msgstr "Public access denied." -#: mod/dfrn_request.php:636 src/Module/RemoteFollow.php:104 -msgid "Friend/Connection Request" -msgstr "Friend/Connection request" - -#: mod/dfrn_request.php:637 -#, php-format -msgid "" -"Enter your Webfinger address (user@domain.tld) or profile URL here. If this " -"isn't supported by your system (for example it doesn't work with Diaspora), " -"you have to subscribe to %s directly on your system" -msgstr "Enter your WebFinger address (user@domain.tld) or profile URL here. If this isn't supported by your system (for example it doesn't work with Diaspora), you have to subscribe to %s directly on your system" - -#: mod/dfrn_request.php:638 src/Module/RemoteFollow.php:106 -#, php-format -msgid "" -"If you are not yet a member of the free social web, follow " -"this link to find a public Friendica node and join us today." -msgstr "If you are not yet a member of the free social web, follow this link to find a public Friendica node and join us today." - -#: mod/dfrn_request.php:639 src/Module/RemoteFollow.php:107 -msgid "Your Webfinger address or profile URL:" -msgstr "Your WebFinger address or profile URL:" - -#: mod/dfrn_request.php:640 mod/follow.php:147 src/Module/RemoteFollow.php:108 -msgid "Please answer the following:" -msgstr "Please answer the following:" - -#: mod/dfrn_request.php:641 mod/follow.php:74 mod/unfollow.php:99 -#: src/Module/RemoteFollow.php:109 -msgid "Submit Request" -msgstr "Submit request" - -#: mod/dfrn_request.php:648 mod/follow.php:161 -#, php-format -msgid "%s knows you" -msgstr "%s knows you" - -#: mod/dfrn_request.php:649 mod/follow.php:162 -msgid "Add a personal note:" -msgstr "Add a personal note:" - -#: mod/display.php:235 mod/display.php:319 +#: mod/display.php:221 mod/display.php:295 msgid "The requested item doesn't exist or has been deleted." msgstr "The requested item doesn't exist or has been deleted." -#: mod/display.php:399 +#: mod/display.php:375 msgid "The feed for this item is unavailable." msgstr "The feed for this item is unavailable." -#: mod/editpost.php:44 mod/editpost.php:54 +#: mod/editpost.php:45 mod/editpost.php:55 msgid "Item not found" msgstr "Item not found" -#: mod/editpost.php:61 +#: mod/editpost.php:64 msgid "Edit post" msgstr "Edit post" -#: mod/editpost.php:88 mod/notes.php:63 src/Content/Text/HTML.php:893 -#: src/Module/Filer/SaveTag.php:70 +#: mod/editpost.php:91 mod/notes.php:56 src/Content/Text/HTML.php:885 +#: src/Module/Admin/Storage.php:143 src/Module/Filer/SaveTag.php:69 msgid "Save" msgstr "Save" -#: mod/editpost.php:94 mod/message.php:203 mod/message.php:372 -#: mod/wallmessage.php:154 +#: mod/editpost.php:92 mod/photos.php:1347 src/Content/Conversation.php:326 +#: src/Module/Contact/Poke.php:157 src/Object/Post.php:964 +msgid "Loading..." +msgstr "Loading..." + +#: mod/editpost.php:93 mod/message.php:198 mod/message.php:355 +#: mod/wallmessage.php:139 src/Content/Conversation.php:327 +msgid "Upload photo" +msgstr "Upload photo" + +#: mod/editpost.php:94 src/Content/Conversation.php:328 +msgid "upload photo" +msgstr "upload photo" + +#: mod/editpost.php:95 src/Content/Conversation.php:329 +msgid "Attach file" +msgstr "Attach file" + +#: mod/editpost.php:96 src/Content/Conversation.php:330 +msgid "attach file" +msgstr "attach file" + +#: mod/editpost.php:97 mod/message.php:199 mod/message.php:356 +#: mod/wallmessage.php:140 msgid "Insert web link" msgstr "Insert web link" -#: mod/editpost.php:95 +#: mod/editpost.php:98 msgid "web link" msgstr "web link" -#: mod/editpost.php:96 +#: mod/editpost.php:99 msgid "Insert video link" msgstr "Insert video link" -#: mod/editpost.php:97 +#: mod/editpost.php:100 msgid "video link" msgstr "video link" -#: mod/editpost.php:98 +#: mod/editpost.php:101 msgid "Insert audio link" msgstr "Insert audio link" -#: mod/editpost.php:99 +#: mod/editpost.php:102 msgid "audio link" msgstr "audio link" -#: mod/editpost.php:113 src/Core/ACL.php:313 +#: mod/editpost.php:103 src/Content/Conversation.php:340 +#: src/Module/Item/Compose.php:161 +msgid "Set your location" +msgstr "Set your location" + +#: mod/editpost.php:104 src/Content/Conversation.php:341 +msgid "set location" +msgstr "set location" + +#: mod/editpost.php:105 src/Content/Conversation.php:342 +msgid "Clear browser location" +msgstr "Clear browser location" + +#: mod/editpost.php:106 src/Content/Conversation.php:343 +msgid "clear location" +msgstr "clear location" + +#: mod/editpost.php:107 mod/message.php:200 mod/message.php:358 +#: mod/photos.php:1498 mod/wallmessage.php:141 +#: src/Content/Conversation.php:355 src/Content/Conversation.php:689 +#: src/Module/Item/Compose.php:165 src/Object/Post.php:502 +msgid "Please wait" +msgstr "Please wait" + +#: mod/editpost.php:108 src/Content/Conversation.php:356 +msgid "Permission settings" +msgstr "Permission settings" + +#: mod/editpost.php:116 src/Core/ACL.php:325 msgid "CC: email addresses" msgstr "CC: email addresses" -#: mod/editpost.php:120 src/Core/ACL.php:314 +#: mod/editpost.php:117 src/Content/Conversation.php:366 +msgid "Public post" +msgstr "Public post" + +#: mod/editpost.php:120 src/Content/Conversation.php:345 +#: src/Module/Item/Compose.php:166 +msgid "Set title" +msgstr "Set title" + +#: mod/editpost.php:122 src/Content/Conversation.php:347 +#: src/Module/Item/Compose.php:167 +msgid "Categories (comma-separated list)" +msgstr "Categories (comma-separated list)" + +#: mod/editpost.php:123 src/Core/ACL.php:326 msgid "Example: bob@example.com, mary@example.com" msgstr "Example: bob@example.com, mary@example.com" -#: mod/events.php:138 mod/events.php:140 +#: mod/editpost.php:128 mod/events.php:517 mod/photos.php:1346 +#: mod/photos.php:1402 mod/photos.php:1476 src/Content/Conversation.php:370 +#: src/Module/Item/Compose.php:160 src/Object/Post.php:974 +msgid "Preview" +msgstr "Preview" + +#: mod/editpost.php:130 mod/fbrowser.php:100 mod/fbrowser.php:127 +#: mod/follow.php:144 mod/photos.php:1013 mod/photos.php:1114 mod/tagrm.php:37 +#: mod/tagrm.php:129 mod/unfollow.php:97 src/Content/Conversation.php:373 +#: src/Module/Contact/Revoke.php:99 src/Module/RemoteFollow.php:116 +msgid "Cancel" +msgstr "Cancel" + +#: mod/editpost.php:134 src/Content/Conversation.php:380 +#: src/Content/Widget/VCard.php:107 src/Model/Profile.php:460 +#: src/Module/Admin/Logs/View.php:92 +msgid "Message" +msgstr "Message" + +#: mod/editpost.php:135 src/Content/Conversation.php:381 +#: src/Module/Settings/TwoFactor/Trusted.php:101 +msgid "Browser" +msgstr "Browser" + +#: mod/editpost.php:136 mod/events.php:522 mod/photos.php:948 +#: mod/photos.php:1300 src/Content/Conversation.php:357 +msgid "Permissions" +msgstr "Permissions" + +#: mod/editpost.php:138 src/Content/Conversation.php:383 +msgid "Open Compose page" +msgstr "Open Compose page" + +#: mod/events.php:123 mod/events.php:125 msgid "Event can not end before it has started." msgstr "Event cannot end before it has started." -#: mod/events.php:147 mod/events.php:149 +#: mod/events.php:132 mod/events.php:134 msgid "Event title and start time are required." msgstr "Event title and starting time are required." -#: mod/events.php:419 +#: mod/events.php:379 msgid "Create New Event" msgstr "Create new event" -#: mod/events.php:531 +#: mod/events.php:478 src/Module/Admin/Logs/View.php:96 msgid "Event details" msgstr "Event details" -#: mod/events.php:532 +#: mod/events.php:479 msgid "Starting date and Title are required." msgstr "Starting date and title are required." -#: mod/events.php:533 mod/events.php:538 +#: mod/events.php:480 mod/events.php:485 msgid "Event Starts:" msgstr "Event starts:" -#: mod/events.php:533 mod/events.php:565 +#: mod/events.php:480 mod/events.php:510 #: src/Module/Admin/Blocklist/Server.php:79 #: src/Module/Admin/Blocklist/Server.php:80 #: src/Module/Admin/Blocklist/Server.php:99 #: src/Module/Admin/Blocklist/Server.php:100 -#: src/Module/Admin/Item/Delete.php:70 src/Module/Debug/Probe.php:60 +#: src/Module/Admin/Item/Delete.php:70 src/Module/Debug/Probe.php:61 #: src/Module/Install.php:200 src/Module/Install.php:233 #: src/Module/Install.php:238 src/Module/Install.php:257 #: src/Module/Install.php:268 src/Module/Install.php:273 #: src/Module/Install.php:279 src/Module/Install.php:284 #: src/Module/Install.php:298 src/Module/Install.php:313 -#: src/Module/Install.php:340 src/Module/Register.php:135 -#: src/Module/Security/TwoFactor/Verify.php:99 +#: src/Module/Install.php:340 src/Module/Register.php:137 +#: src/Module/Security/TwoFactor/Verify.php:100 #: src/Module/Settings/TwoFactor/Index.php:133 #: src/Module/Settings/TwoFactor/Verify.php:141 msgid "Required" msgstr "Required" -#: mod/events.php:546 mod/events.php:571 +#: mod/events.php:493 mod/events.php:516 msgid "Finish date/time is not known or not relevant" msgstr "Finish date/time is not known or not relevant" -#: mod/events.php:548 mod/events.php:553 +#: mod/events.php:495 mod/events.php:500 msgid "Event Finishes:" msgstr "Event finishes:" -#: mod/events.php:559 mod/events.php:572 -msgid "Adjust for viewer timezone" -msgstr "Adjust for viewer's time zone" - -#: mod/events.php:561 src/Module/Profile/Profile.php:172 -#: src/Module/Settings/Profile/Index.php:253 +#: mod/events.php:506 src/Module/Profile/Profile.php:172 +#: src/Module/Settings/Profile/Index.php:239 msgid "Description:" msgstr "Description:" -#: mod/events.php:563 src/Model/Event.php:84 src/Model/Event.php:111 -#: src/Model/Event.php:473 src/Model/Event.php:960 src/Model/Profile.php:358 -#: src/Module/Contact.php:646 src/Module/Directory.php:156 -#: src/Module/Notifications/Introductions.php:172 -#: src/Module/Profile/Profile.php:190 +#: mod/events.php:508 src/Content/Widget/VCard.php:98 src/Model/Event.php:80 +#: src/Model/Event.php:107 src/Model/Event.php:466 src/Model/Event.php:915 +#: src/Model/Profile.php:368 src/Module/Contact.php:565 +#: src/Module/Directory.php:150 src/Module/Notifications/Introductions.php:165 +#: src/Module/Profile/Profile.php:194 msgid "Location:" msgstr "Location:" -#: mod/events.php:565 mod/events.php:567 +#: mod/events.php:510 mod/events.php:512 msgid "Title:" msgstr "Title:" -#: mod/events.php:568 mod/events.php:569 +#: mod/events.php:513 mod/events.php:514 msgid "Share this event" msgstr "Share this event" -#: mod/events.php:575 mod/message.php:205 mod/message.php:373 -#: mod/photos.php:951 mod/photos.php:1054 mod/photos.php:1339 -#: mod/photos.php:1380 mod/photos.php:1437 mod/photos.php:1512 -#: src/Module/Admin/Item/Source.php:65 src/Module/Contact/Advanced.php:132 -#: src/Module/Contact.php:604 src/Module/Contact/Poke.php:155 +#: mod/events.php:519 mod/message.php:201 mod/message.php:357 +#: mod/photos.php:930 mod/photos.php:1034 mod/photos.php:1304 +#: mod/photos.php:1345 mod/photos.php:1401 mod/photos.php:1475 +#: src/Module/Admin/Item/Source.php:65 src/Module/Contact.php:523 +#: src/Module/Contact/Advanced.php:133 src/Module/Contact/Poke.php:158 #: src/Module/Debug/ActivityPubConversion.php:141 #: src/Module/Debug/Babel.php:313 src/Module/Debug/Localtime.php:64 -#: src/Module/Debug/Probe.php:55 src/Module/Debug/WebFinger.php:53 -#: src/Module/Delegation.php:152 src/Module/FriendSuggest.php:129 +#: src/Module/Debug/Probe.php:56 src/Module/Debug/WebFinger.php:53 +#: src/Module/Delegation.php:147 src/Module/FriendSuggest.php:128 #: src/Module/Install.php:245 src/Module/Install.php:287 -#: src/Module/Install.php:324 src/Module/Invite.php:174 -#: src/Module/Item/Compose.php:144 src/Module/Profile/Profile.php:243 -#: src/Module/Settings/Profile/Index.php:237 src/Object/Post.php:949 +#: src/Module/Install.php:324 src/Module/Invite.php:177 +#: src/Module/Item/Compose.php:150 src/Module/Profile/Profile.php:247 +#: src/Module/Settings/Profile/Index.php:223 src/Object/Post.php:963 #: view/theme/duepuntozero/config.php:69 view/theme/frio/config.php:160 #: view/theme/quattro/config.php:71 view/theme/vier/config.php:119 msgid "Submit" msgstr "Submit" -#: mod/events.php:576 src/Module/Profile/Profile.php:244 +#: mod/events.php:520 src/Module/Profile/Profile.php:248 msgid "Basic" msgstr "Basic" -#: mod/events.php:577 src/Module/Admin/Site.php:587 src/Module/Contact.php:953 -#: src/Module/Profile/Profile.php:245 +#: mod/events.php:521 src/Module/Admin/Site.php:507 src/Module/Contact.php:863 +#: src/Module/Profile/Profile.php:249 msgid "Advanced" msgstr "Advanced" -#: mod/events.php:594 +#: mod/events.php:538 msgid "Failed to remove event" msgstr "Failed to remove event" -#: mod/fbrowser.php:43 src/Content/Nav.php:179 src/Module/BaseProfile.php:68 +#: mod/fbrowser.php:43 src/Content/Nav.php:192 src/Module/BaseProfile.php:64 #: view/theme/frio/theme.php:227 msgid "Photos" msgstr "Photos" -#: mod/fbrowser.php:107 mod/fbrowser.php:136 -#: src/Module/Settings/Profile/Photo/Index.php:130 +#: mod/fbrowser.php:102 mod/fbrowser.php:129 +#: src/Module/Settings/Profile/Photo/Index.php:129 msgid "Upload" msgstr "Upload" -#: mod/fbrowser.php:131 +#: mod/fbrowser.php:124 msgid "Files" msgstr "Files" +#: mod/follow.php:74 mod/unfollow.php:96 src/Module/RemoteFollow.php:115 +msgid "Submit Request" +msgstr "Submit request" + #: mod/follow.php:84 msgid "You already added this contact." msgstr "You already added this contact." @@ -1407,55 +453,74 @@ msgstr "diaspora* support isn't enabled. Contact can't be added." msgid "OStatus support is disabled. Contact can't be added." msgstr "OStatus support is disabled. Contact can't be added." -#: mod/follow.php:148 mod/unfollow.php:97 +#: mod/follow.php:138 src/Content/Item.php:463 src/Content/Widget.php:76 +#: src/Model/Contact.php:1072 src/Model/Contact.php:1084 +#: view/theme/vier/theme.php:172 +msgid "Connect/Follow" +msgstr "Connect/Follow" + +#: mod/follow.php:139 src/Module/RemoteFollow.php:114 +msgid "Please answer the following:" +msgstr "Please answer the following:" + +#: mod/follow.php:140 mod/unfollow.php:94 msgid "Your Identity Address:" msgstr "My identity address:" -#: mod/follow.php:149 mod/unfollow.php:103 -#: src/Module/Admin/Blocklist/Contact.php:100 src/Module/Contact.php:642 -#: src/Module/Notifications/Introductions.php:108 -#: src/Module/Notifications/Introductions.php:183 +#: mod/follow.php:141 mod/unfollow.php:100 +#: src/Module/Admin/Blocklist/Contact.php:116 src/Module/Contact.php:561 +#: src/Module/Notifications/Introductions.php:107 +#: src/Module/Notifications/Introductions.php:176 msgid "Profile URL" msgstr "Profile URL:" -#: mod/follow.php:150 src/Module/Contact.php:652 -#: src/Module/Notifications/Introductions.php:176 -#: src/Module/Profile/Profile.php:203 +#: mod/follow.php:142 src/Module/Contact.php:573 +#: src/Module/Notifications/Introductions.php:169 +#: src/Module/Profile/Profile.php:207 msgid "Tags:" msgstr "Tags:" -#: mod/follow.php:171 mod/unfollow.php:113 src/Module/BaseProfile.php:63 -#: src/Module/Contact.php:931 +#: mod/follow.php:153 +#, php-format +msgid "%s knows you" +msgstr "%s knows you" + +#: mod/follow.php:154 +msgid "Add a personal note:" +msgstr "Add a personal note:" + +#: mod/follow.php:163 mod/unfollow.php:109 src/Module/BaseProfile.php:59 +#: src/Module/Contact.php:833 msgid "Status Messages and Posts" msgstr "Status Messages and Posts" -#: mod/follow.php:203 +#: mod/follow.php:191 msgid "The contact could not be added." msgstr "Contact could not be added." -#: mod/item.php:134 mod/item.php:138 +#: mod/item.php:135 mod/item.php:139 msgid "Unable to locate original post." msgstr "Unable to locate original post." -#: mod/item.php:339 mod/item.php:344 +#: mod/item.php:341 mod/item.php:346 msgid "Empty post discarded." msgstr "Empty post discarded." -#: mod/item.php:705 +#: mod/item.php:742 msgid "Post updated." msgstr "Post updated." -#: mod/item.php:722 mod/item.php:727 +#: mod/item.php:752 mod/item.php:757 msgid "Item wasn't stored." msgstr "Item wasn't stored." -#: mod/item.php:738 +#: mod/item.php:768 msgid "Item couldn't be fetched." msgstr "Item couldn't be fetched." -#: mod/item.php:884 src/Module/Admin/Themes/Details.php:39 -#: src/Module/Admin/Themes/Index.php:59 src/Module/Debug/ItemBody.php:47 -#: src/Module/Debug/ItemBody.php:60 +#: mod/item.php:914 src/Module/Admin/Themes/Details.php:39 +#: src/Module/Admin/Themes/Index.php:59 src/Module/Debug/ItemBody.php:41 +#: src/Module/Debug/ItemBody.php:56 msgid "Item not found." msgstr "Item not found." @@ -1525,7 +590,7 @@ msgid "" "your email for further instructions." msgstr "Enter email address or nickname to reset your password. You will receive further instruction via email." -#: mod/lostpass.php:130 src/Module/Security/Login.php:144 +#: mod/lostpass.php:130 src/Module/Security/Login.php:148 msgid "Nickname or Email: " msgstr "Nickname or email: " @@ -1533,7 +598,7 @@ msgstr "Nickname or email: " msgid "Reset" msgstr "Reset" -#: mod/lostpass.php:146 src/Module/Security/Login.php:156 +#: mod/lostpass.php:146 src/Module/Security/Login.php:160 msgid "Password Reset" msgstr "Forgotten password?" @@ -1597,27 +662,19 @@ msgstr "Your password has been changed at %s" msgid "No keywords to match. Please add keywords to your profile." msgstr "No keywords to match. Please add keywords to your profile." -#: mod/match.php:105 src/Content/Pager.php:216 -msgid "first" -msgstr "first" - -#: mod/match.php:110 src/Content/Pager.php:276 -msgid "next" -msgstr "next" - -#: mod/match.php:120 src/Module/BaseSearch.php:117 +#: mod/match.php:93 src/Module/BaseSearch.php:117 msgid "No matches" msgstr "No matches" -#: mod/match.php:125 +#: mod/match.php:98 msgid "Profile Match" msgstr "Profile Match" -#: mod/message.php:46 mod/message.php:127 src/Content/Nav.php:276 +#: mod/message.php:46 mod/message.php:126 src/Content/Nav.php:286 msgid "New Message" msgstr "New Message" -#: mod/message.php:83 mod/wallmessage.php:76 +#: mod/message.php:83 mod/wallmessage.php:69 msgid "No recipient selected." msgstr "No recipient selected." @@ -1625,412 +682,446 @@ msgstr "No recipient selected." msgid "Unable to locate contact information." msgstr "Unable to locate contact information." -#: mod/message.php:90 mod/wallmessage.php:82 +#: mod/message.php:90 mod/wallmessage.php:75 msgid "Message could not be sent." msgstr "Message could not be sent." -#: mod/message.php:93 mod/wallmessage.php:85 +#: mod/message.php:93 mod/wallmessage.php:78 msgid "Message collection failure." msgstr "Message collection failure." -#: mod/message.php:121 src/Module/Notifications/Introductions.php:114 -#: src/Module/Notifications/Introductions.php:155 -#: src/Module/Notifications/Notification.php:56 +#: mod/message.php:120 src/Module/Notifications/Introductions.php:113 +#: src/Module/Notifications/Introductions.php:148 +#: src/Module/Notifications/Notification.php:57 msgid "Discard" msgstr "Discard" -#: mod/message.php:134 src/Content/Nav.php:273 view/theme/frio/theme.php:234 +#: mod/message.php:133 src/Content/Nav.php:283 view/theme/frio/theme.php:234 msgid "Messages" msgstr "Messages" -#: mod/message.php:147 +#: mod/message.php:146 msgid "Conversation not found." msgstr "Conversation not found." -#: mod/message.php:152 +#: mod/message.php:151 msgid "Message was not deleted." msgstr "Message was not deleted." -#: mod/message.php:170 +#: mod/message.php:166 msgid "Conversation was not removed." -msgstr "" +msgstr "Conversation was not removed." -#: mod/message.php:184 mod/message.php:297 mod/wallmessage.php:137 +#: mod/message.php:180 mod/message.php:286 mod/wallmessage.php:123 msgid "Please enter a link URL:" msgstr "Please enter a link URL:" -#: mod/message.php:193 mod/wallmessage.php:142 +#: mod/message.php:189 mod/wallmessage.php:128 msgid "Send Private Message" msgstr "Send private message" -#: mod/message.php:194 mod/message.php:363 mod/wallmessage.php:144 +#: mod/message.php:190 mod/message.php:347 mod/wallmessage.php:130 msgid "To:" msgstr "To:" -#: mod/message.php:195 mod/message.php:364 mod/wallmessage.php:145 +#: mod/message.php:191 mod/message.php:348 mod/wallmessage.php:131 msgid "Subject:" msgstr "Subject:" -#: mod/message.php:199 mod/message.php:367 mod/wallmessage.php:151 -#: src/Module/Invite.php:167 +#: mod/message.php:195 mod/message.php:351 mod/wallmessage.php:137 +#: src/Module/Invite.php:170 msgid "Your message:" msgstr "Your message:" -#: mod/message.php:233 +#: mod/message.php:222 msgid "No messages." msgstr "No messages." -#: mod/message.php:289 +#: mod/message.php:278 msgid "Message not available." msgstr "Message not available." -#: mod/message.php:339 +#: mod/message.php:323 msgid "Delete message" msgstr "Delete message" -#: mod/message.php:341 mod/message.php:473 +#: mod/message.php:325 mod/message.php:457 msgid "D, d M Y - g:i A" msgstr "D, d M Y - g:i A" -#: mod/message.php:356 mod/message.php:470 +#: mod/message.php:340 mod/message.php:454 msgid "Delete conversation" msgstr "Delete conversation" -#: mod/message.php:358 +#: mod/message.php:342 msgid "" "No secure communications available. You may be able to " "respond from the sender's profile page." msgstr "No secure communications available. You may be able to respond from the sender's profile page." -#: mod/message.php:362 +#: mod/message.php:346 msgid "Send Reply" msgstr "Send reply" -#: mod/message.php:444 +#: mod/message.php:428 #, php-format msgid "Unknown sender - %s" msgstr "Unknown sender - %s" -#: mod/message.php:446 +#: mod/message.php:430 #, php-format msgid "You and %s" msgstr "Me and %s" -#: mod/message.php:448 +#: mod/message.php:432 #, php-format msgid "%s and You" msgstr "%s and me" -#: mod/message.php:476 +#: mod/message.php:460 #, php-format msgid "%d message" msgid_plural "%d messages" msgstr[0] "%d message" msgstr[1] "%d messages" -#: mod/notes.php:51 src/Module/BaseProfile.php:110 +#: mod/notes.php:51 src/Module/BaseProfile.php:106 msgid "Personal Notes" msgstr "Personal notes" -#: mod/notes.php:59 +#: mod/notes.php:55 msgid "Personal notes are visible only by yourself." -msgstr "" +msgstr "Personal notes are visible only to you." -#: mod/ostatus_subscribe.php:35 -msgid "Subscribing to OStatus contacts" -msgstr "Subscribing to OStatus contacts" +#: mod/ostatus_subscribe.php:37 +msgid "Subscribing to contacts" +msgstr "Subscribing to contacts" -#: mod/ostatus_subscribe.php:45 +#: mod/ostatus_subscribe.php:47 msgid "No contact provided." msgstr "No contact provided." -#: mod/ostatus_subscribe.php:51 +#: mod/ostatus_subscribe.php:53 msgid "Couldn't fetch information for contact." msgstr "Couldn't fetch information for contact." -#: mod/ostatus_subscribe.php:61 +#: mod/ostatus_subscribe.php:64 msgid "Couldn't fetch friends for contact." msgstr "Couldn't fetch friends for contact." -#: mod/ostatus_subscribe.php:79 mod/repair_ostatus.php:65 +#: mod/ostatus_subscribe.php:70 mod/ostatus_subscribe.php:81 +msgid "Couldn't fetch following contacts." +msgstr "Couldn't fetch following contacts." + +#: mod/ostatus_subscribe.php:76 +msgid "Couldn't fetch remote profile." +msgstr "Couldn't fetch remote profile." + +#: mod/ostatus_subscribe.php:86 +msgid "Unsupported network" +msgstr "Unsupported network" + +#: mod/ostatus_subscribe.php:102 mod/repair_ostatus.php:51 msgid "Done" msgstr "Done" -#: mod/ostatus_subscribe.php:93 +#: mod/ostatus_subscribe.php:116 msgid "success" msgstr "success" -#: mod/ostatus_subscribe.php:95 +#: mod/ostatus_subscribe.php:118 msgid "failed" msgstr "failed" -#: mod/ostatus_subscribe.php:98 src/Object/Post.php:305 +#: mod/ostatus_subscribe.php:121 msgid "ignored" msgstr "Ignored" -#: mod/ostatus_subscribe.php:103 mod/repair_ostatus.php:71 +#: mod/ostatus_subscribe.php:126 mod/repair_ostatus.php:57 msgid "Keep this window open until done." msgstr "Keep this window open until done." -#: mod/photos.php:129 src/Module/BaseProfile.php:71 +#: mod/photos.php:108 src/Module/BaseProfile.php:67 msgid "Photo Albums" msgstr "Photo Albums" -#: mod/photos.php:130 mod/photos.php:1638 +#: mod/photos.php:109 mod/photos.php:1593 msgid "Recent Photos" msgstr "Recent photos" -#: mod/photos.php:132 mod/photos.php:1105 mod/photos.php:1640 +#: mod/photos.php:111 mod/photos.php:1082 mod/photos.php:1595 msgid "Upload New Photos" msgstr "Upload new photos" -#: mod/photos.php:150 src/Module/BaseSettings.php:37 +#: mod/photos.php:129 src/Module/BaseSettings.php:37 msgid "everybody" msgstr "everybody" -#: mod/photos.php:183 +#: mod/photos.php:167 msgid "Contact information unavailable" msgstr "Contact information unavailable" -#: mod/photos.php:222 +#: mod/photos.php:196 msgid "Album not found." msgstr "Album not found." -#: mod/photos.php:280 +#: mod/photos.php:250 msgid "Album successfully deleted" msgstr "Album successfully deleted" -#: mod/photos.php:282 +#: mod/photos.php:252 msgid "Album was empty." msgstr "Album was empty." -#: mod/photos.php:314 +#: mod/photos.php:284 msgid "Failed to delete the photo." -msgstr "" +msgstr "Failed to delete the photo." -#: mod/photos.php:589 +#: mod/photos.php:559 msgid "a photo" msgstr "a photo" -#: mod/photos.php:589 +#: mod/photos.php:559 #, php-format msgid "%1$s was tagged in %2$s by %3$s" msgstr "%1$s was tagged in %2$s by %3$s" -#: mod/photos.php:672 mod/photos.php:675 mod/photos.php:702 -#: mod/wall_upload.php:216 src/Module/Settings/Profile/Photo/Index.php:61 +#: mod/photos.php:642 mod/photos.php:645 mod/photos.php:672 +#: mod/wall_upload.php:207 src/Module/Settings/Profile/Photo/Index.php:60 #, php-format msgid "Image exceeds size limit of %s" msgstr "Image exceeds size limit of %s" -#: mod/photos.php:678 +#: mod/photos.php:648 msgid "Image upload didn't complete, please try again" msgstr "Image upload didn't complete, please try again" -#: mod/photos.php:681 +#: mod/photos.php:651 msgid "Image file is missing" msgstr "Image file is missing" -#: mod/photos.php:686 +#: mod/photos.php:656 msgid "" "Server can't accept new file upload at this time, please contact your " "administrator" msgstr "Server can't accept new file upload at this time, please contact your administrator" -#: mod/photos.php:710 +#: mod/photos.php:680 msgid "Image file is empty." msgstr "Image file is empty." -#: mod/photos.php:725 mod/wall_upload.php:175 -#: src/Module/Settings/Profile/Photo/Index.php:70 +#: mod/photos.php:695 mod/wall_upload.php:166 +#: src/Module/Settings/Profile/Photo/Index.php:69 msgid "Unable to process image." msgstr "Unable to process image." -#: mod/photos.php:754 mod/wall_upload.php:241 -#: src/Module/Settings/Profile/Photo/Index.php:97 +#: mod/photos.php:724 mod/wall_upload.php:232 +#: src/Module/Settings/Profile/Photo/Index.php:96 msgid "Image upload failed." msgstr "Image upload failed." -#: mod/photos.php:841 +#: mod/photos.php:816 msgid "No photos selected" msgstr "No photos selected" -#: mod/photos.php:907 mod/videos.php:182 +#: mod/photos.php:885 msgid "Access to this item is restricted." msgstr "Access to this item is restricted." -#: mod/photos.php:961 +#: mod/photos.php:940 msgid "Upload Photos" msgstr "Upload photos" -#: mod/photos.php:965 mod/photos.php:1050 +#: mod/photos.php:944 mod/photos.php:1030 msgid "New album name: " msgstr "New album name: " -#: mod/photos.php:966 +#: mod/photos.php:945 msgid "or select existing album:" msgstr "or select existing album:" -#: mod/photos.php:967 +#: mod/photos.php:946 msgid "Do not show a status post for this upload" msgstr "Do not show a status post for this upload" -#: mod/photos.php:1033 +#: mod/photos.php:1011 msgid "Do you really want to delete this photo album and all its photos?" msgstr "Do you really want to delete this photo album and all its photos?" -#: mod/photos.php:1034 mod/photos.php:1055 +#: mod/photos.php:1012 mod/photos.php:1035 msgid "Delete Album" msgstr "Delete album" -#: mod/photos.php:1061 +#: mod/photos.php:1039 msgid "Edit Album" msgstr "Edit album" -#: mod/photos.php:1062 +#: mod/photos.php:1040 msgid "Drop Album" msgstr "Drop album" -#: mod/photos.php:1067 +#: mod/photos.php:1044 msgid "Show Newest First" msgstr "Show newest first" -#: mod/photos.php:1069 +#: mod/photos.php:1046 msgid "Show Oldest First" msgstr "Show oldest first" -#: mod/photos.php:1090 mod/photos.php:1623 +#: mod/photos.php:1067 mod/photos.php:1578 msgid "View Photo" msgstr "View photo" -#: mod/photos.php:1127 +#: mod/photos.php:1100 msgid "Permission denied. Access to this item may be restricted." msgstr "Permission denied. Access to this item may be restricted." -#: mod/photos.php:1129 +#: mod/photos.php:1102 msgid "Photo not available" msgstr "Photo not available" -#: mod/photos.php:1139 +#: mod/photos.php:1112 msgid "Do you really want to delete this photo?" msgstr "Do you really want to delete this photo?" -#: mod/photos.php:1140 mod/photos.php:1340 +#: mod/photos.php:1113 mod/photos.php:1305 msgid "Delete Photo" msgstr "Delete photo" -#: mod/photos.php:1231 +#: mod/photos.php:1203 msgid "View photo" msgstr "View photo" -#: mod/photos.php:1233 +#: mod/photos.php:1205 msgid "Edit photo" msgstr "Edit photo" -#: mod/photos.php:1234 +#: mod/photos.php:1206 msgid "Delete photo" msgstr "Delete photo" -#: mod/photos.php:1235 +#: mod/photos.php:1207 msgid "Use as profile photo" msgstr "Use as profile photo" -#: mod/photos.php:1242 +#: mod/photos.php:1214 msgid "Private Photo" msgstr "Private photo" -#: mod/photos.php:1248 +#: mod/photos.php:1220 msgid "View Full Size" msgstr "View full size" -#: mod/photos.php:1308 +#: mod/photos.php:1273 msgid "Tags: " msgstr "Tags: " -#: mod/photos.php:1311 +#: mod/photos.php:1276 msgid "[Select tags to remove]" msgstr "[Select tags to remove]" -#: mod/photos.php:1326 +#: mod/photos.php:1291 msgid "New album name" msgstr "New album name" -#: mod/photos.php:1327 +#: mod/photos.php:1292 msgid "Caption" msgstr "Caption" -#: mod/photos.php:1328 +#: mod/photos.php:1293 msgid "Add a Tag" msgstr "Add Tag" -#: mod/photos.php:1328 +#: mod/photos.php:1293 msgid "" "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" msgstr "Example: @bob, @jojo@example.com, #California, #camping" -#: mod/photos.php:1329 +#: mod/photos.php:1294 msgid "Do not rotate" msgstr "Do not rotate" -#: mod/photos.php:1330 +#: mod/photos.php:1295 msgid "Rotate CW (right)" msgstr "Rotate right (CW)" -#: mod/photos.php:1331 +#: mod/photos.php:1296 msgid "Rotate CCW (left)" msgstr "Rotate left (CCW)" -#: mod/photos.php:1377 mod/photos.php:1434 mod/photos.php:1509 -#: src/Module/Contact.php:1096 src/Module/Item/Compose.php:142 -#: src/Object/Post.php:946 +#: mod/photos.php:1342 mod/photos.php:1398 mod/photos.php:1472 +#: src/Module/Contact.php:993 src/Module/Item/Compose.php:148 +#: src/Object/Post.php:960 msgid "This is you" msgstr "This is me" -#: mod/photos.php:1379 mod/photos.php:1436 mod/photos.php:1511 -#: src/Object/Post.php:486 src/Object/Post.php:948 +#: mod/photos.php:1344 mod/photos.php:1400 mod/photos.php:1474 +#: src/Object/Post.php:496 src/Object/Post.php:962 msgid "Comment" msgstr "Comment" -#: mod/photos.php:1533 -msgid "Like" -msgstr "" +#: mod/photos.php:1433 src/Content/Conversation.php:615 +#: src/Object/Post.php:227 +msgid "Select" +msgstr "Select" -#: mod/photos.php:1534 src/Object/Post.php:345 +#: mod/photos.php:1434 mod/settings.php:563 src/Content/Conversation.php:616 +#: src/Module/Admin/Users/Active.php:139 +#: src/Module/Admin/Users/Blocked.php:140 src/Module/Admin/Users/Index.php:153 +msgid "Delete" +msgstr "Delete" + +#: mod/photos.php:1495 src/Object/Post.php:349 +msgid "Like" +msgstr "Like" + +#: mod/photos.php:1496 src/Object/Post.php:349 msgid "I like this (toggle)" msgstr "I like this (toggle)" -#: mod/photos.php:1535 +#: mod/photos.php:1497 src/Object/Post.php:350 msgid "Dislike" -msgstr "" +msgstr "Dislike" -#: mod/photos.php:1537 src/Object/Post.php:346 +#: mod/photos.php:1499 src/Object/Post.php:350 msgid "I don't like this (toggle)" msgstr "I don't like this (toggle)" -#: mod/photos.php:1559 +#: mod/photos.php:1521 msgid "Map" msgstr "Map" -#: mod/photos.php:1629 mod/videos.php:259 +#: mod/photos.php:1584 msgid "View Album" msgstr "View album" -#: mod/ping.php:285 +#: mod/ping.php:275 msgid "{0} wants to be your friend" msgstr "{0} wants to be your friend" -#: mod/ping.php:302 +#: mod/ping.php:292 msgid "{0} requested registration" msgstr "{0} requested registration" -#: mod/ping.php:315 +#: mod/ping.php:305 #, php-format msgid "{0} and %d others requested registration" -msgstr "" +msgstr "{0} and %d others requested registration" -#: mod/redir.php:50 mod/redir.php:130 +#: mod/redir.php:49 mod/redir.php:102 msgid "Bad Request." -msgstr "" +msgstr "Bad Request." + +#: mod/redir.php:55 mod/redir.php:129 src/Module/Contact/Advanced.php:54 +#: src/Module/Contact/Advanced.php:105 src/Module/Contact/Contacts.php:36 +#: src/Module/Contact/Media.php:43 src/Module/FriendSuggest.php:54 +#: src/Module/FriendSuggest.php:92 src/Module/Group.php:105 +msgid "Contact not found." +msgstr "Contact not found." + +#: mod/removeme.php:63 src/Navigation/Notifications/Repository/Notify.php:454 +msgid "[Friendica System Notify]" +msgstr "[Friendica System Notify]" #: mod/removeme.php:63 msgid "User deleted their account" @@ -2065,202 +1156,164 @@ msgstr "Please enter your password for verification:" msgid "Resubscribing to OStatus contacts" msgstr "Resubscribing to OStatus contacts" -#: mod/repair_ostatus.php:50 src/Module/Debug/ActivityPubConversion.php:130 -#: src/Module/Debug/Babel.php:293 src/Module/Security/TwoFactor/Verify.php:96 +#: mod/repair_ostatus.php:46 src/Module/Debug/ActivityPubConversion.php:130 +#: src/Module/Debug/Babel.php:293 src/Module/Security/TwoFactor/Verify.php:97 msgid "Error" msgid_plural "Errors" msgstr[0] "Error" msgstr[1] "Errors" -#: mod/settings.php:90 -msgid "Missing some important data!" -msgstr "Missing some important data!" - -#: mod/settings.php:92 mod/settings.php:534 src/Module/Contact.php:882 -msgid "Update" -msgstr "Update" - -#: mod/settings.php:200 +#: mod/settings.php:128 msgid "Failed to connect with email account using the settings provided." msgstr "Failed to connect with email account using the settings provided." -#: mod/settings.php:229 +#: mod/settings.php:157 msgid "Contact CSV file upload error" msgstr "Contact CSV file upload error" -#: mod/settings.php:248 +#: mod/settings.php:176 msgid "Importing Contacts done" msgstr "Importing contacts done" -#: mod/settings.php:261 +#: mod/settings.php:189 msgid "Relocate message has been send to your contacts" msgstr "Relocate message has been send to your contacts" -#: mod/settings.php:273 +#: mod/settings.php:201 msgid "Passwords do not match." msgstr "Passwords do not match." -#: mod/settings.php:281 src/Console/User.php:166 +#: mod/settings.php:209 src/Console/User.php:210 msgid "Password update failed. Please try again." msgstr "Password update failed. Please try again." -#: mod/settings.php:284 src/Console/User.php:169 +#: mod/settings.php:212 src/Console/User.php:213 msgid "Password changed." msgstr "Password changed." -#: mod/settings.php:287 +#: mod/settings.php:215 msgid "Password unchanged." msgstr "Password unchanged." -#: mod/settings.php:372 +#: mod/settings.php:303 msgid "Please use a shorter name." msgstr "Please use a shorter name." -#: mod/settings.php:375 +#: mod/settings.php:306 msgid "Name too short." msgstr "Name too short." -#: mod/settings.php:382 +#: mod/settings.php:313 msgid "Wrong Password." msgstr "Wrong password." -#: mod/settings.php:387 +#: mod/settings.php:318 msgid "Invalid email." msgstr "Invalid email." -#: mod/settings.php:393 +#: mod/settings.php:324 msgid "Cannot change to that email." msgstr "Cannot change to that email." -#: mod/settings.php:431 +#: mod/settings.php:365 msgid "Private forum has no privacy permissions. Using default privacy group." msgstr "Private forum has no privacy permissions. Using default privacy group." -#: mod/settings.php:434 +#: mod/settings.php:368 msgid "Private forum has no privacy permissions and no default privacy group." msgstr "Private forum has no privacy permissions and no default privacy group." -#: mod/settings.php:451 +#: mod/settings.php:387 msgid "Settings were not updated." -msgstr "" +msgstr "Settings were not updated." -#: mod/settings.php:507 mod/settings.php:533 mod/settings.php:567 -msgid "Add application" -msgstr "Add application" +#: mod/settings.php:428 +msgid "Connected Apps" +msgstr "Connected Apps" -#: mod/settings.php:508 mod/settings.php:615 mod/settings.php:713 -#: mod/settings.php:848 src/Module/Admin/Addons/Index.php:69 -#: src/Module/Admin/Features.php:87 src/Module/Admin/Logs/Settings.php:82 -#: src/Module/Admin/Site.php:582 src/Module/Admin/Themes/Index.php:113 -#: src/Module/Admin/Tos.php:66 src/Module/Settings/Delegation.php:170 -#: src/Module/Settings/Display.php:189 -msgid "Save Settings" -msgstr "Save settings" - -#: mod/settings.php:510 mod/settings.php:536 -#: src/Module/Admin/Blocklist/Contact.php:90 +#: mod/settings.php:429 src/Module/Admin/Blocklist/Contact.php:106 #: src/Module/Admin/Users/Active.php:129 #: src/Module/Admin/Users/Blocked.php:130 src/Module/Admin/Users/Create.php:71 #: src/Module/Admin/Users/Deleted.php:88 src/Module/Admin/Users/Index.php:142 #: src/Module/Admin/Users/Index.php:162 src/Module/Admin/Users/Pending.php:104 -#: src/Module/Contact/Advanced.php:134 +#: src/Module/Contact/Advanced.php:135 msgid "Name" msgstr "Name:" -#: mod/settings.php:511 mod/settings.php:537 -msgid "Consumer Key" -msgstr "Consumer key" +#: mod/settings.php:430 src/Content/Nav.php:212 +msgid "Home Page" +msgstr "Home page" -#: mod/settings.php:512 mod/settings.php:538 -msgid "Consumer Secret" -msgstr "Consumer secret" +#: mod/settings.php:431 src/Module/Admin/Queue.php:78 +msgid "Created" +msgstr "Created" -#: mod/settings.php:513 mod/settings.php:539 -msgid "Redirect" -msgstr "Redirect" - -#: mod/settings.php:514 mod/settings.php:540 -msgid "Icon url" -msgstr "Icon URL" - -#: mod/settings.php:525 -msgid "You can't edit this application." -msgstr "You cannot edit this application." - -#: mod/settings.php:566 -msgid "Connected Apps" -msgstr "Connected Apps" - -#: mod/settings.php:568 src/Object/Post.php:192 src/Object/Post.php:194 -msgid "Edit" -msgstr "Edit" - -#: mod/settings.php:570 -msgid "Client key starts with" -msgstr "Client key starts with" - -#: mod/settings.php:571 -msgid "No name" -msgstr "No name" - -#: mod/settings.php:572 +#: mod/settings.php:432 msgid "Remove authorization" msgstr "Remove authorization" -#: mod/settings.php:583 -msgid "No Addon settings configured" -msgstr "No addon settings configured" - -#: mod/settings.php:592 +#: mod/settings.php:450 msgid "Addon Settings" msgstr "Addon settings" -#: mod/settings.php:613 +#: mod/settings.php:451 +msgid "No Addon settings configured" +msgstr "No addon settings configured" + +#: mod/settings.php:472 msgid "Additional Features" msgstr "Additional Features" -#: mod/settings.php:638 +#: mod/settings.php:474 mod/settings.php:565 mod/settings.php:702 +#: src/Module/Admin/Addons/Index.php:69 src/Module/Admin/Features.php:87 +#: src/Module/Admin/Logs/Settings.php:82 src/Module/Admin/Site.php:502 +#: src/Module/Admin/Themes/Index.php:113 src/Module/Admin/Tos.php:66 +#: src/Module/Settings/Delegation.php:170 src/Module/Settings/Display.php:194 +msgid "Save Settings" +msgstr "Save settings" + +#: mod/settings.php:496 msgid "Diaspora (Socialhome, Hubzilla)" msgstr "diaspora* (Socialhome, Hubzilla)" -#: mod/settings.php:638 mod/settings.php:639 +#: mod/settings.php:496 mod/settings.php:497 msgid "enabled" msgstr "enabled" -#: mod/settings.php:638 mod/settings.php:639 +#: mod/settings.php:496 mod/settings.php:497 msgid "disabled" msgstr "disabled" -#: mod/settings.php:638 mod/settings.php:639 +#: mod/settings.php:496 mod/settings.php:497 #, php-format msgid "Built-in support for %s connectivity is %s" msgstr "Built-in support for %s connectivity is %s" -#: mod/settings.php:639 +#: mod/settings.php:497 msgid "OStatus (GNU Social)" msgstr "OStatus (GNU Social)" -#: mod/settings.php:670 +#: mod/settings.php:523 msgid "Email access is disabled on this site." msgstr "Email access is disabled on this site." -#: mod/settings.php:675 mod/settings.php:711 +#: mod/settings.php:528 mod/settings.php:563 msgid "None" msgstr "None" -#: mod/settings.php:681 src/Module/BaseSettings.php:80 +#: mod/settings.php:534 src/Module/BaseSettings.php:80 msgid "Social Networks" msgstr "Social networks" -#: mod/settings.php:686 +#: mod/settings.php:539 msgid "General Social Media Settings" msgstr "General Social Media Settings" -#: mod/settings.php:687 +#: mod/settings.php:540 msgid "Accept only top level posts by contacts you follow" msgstr "Accept only top-level posts by contacts you follow" -#: mod/settings.php:687 +#: mod/settings.php:540 msgid "" "The system does an auto completion of threads when a comment arrives. This " "has got the side effect that you can receive posts that had been started by " @@ -2269,239 +1322,235 @@ msgid "" "posts from people you really do follow." msgstr "The system automatically completes threads when a comment arrives. This has a side effect that you may receive posts started by someone you don't follow, because one of your followers commented there. This setting will deactivate this behaviour. If activated, you will only receive posts from people you really do follow." -#: mod/settings.php:688 -msgid "Disable Content Warning" -msgstr "Disable Content Warning" +#: mod/settings.php:541 +msgid "Enable Content Warning" +msgstr "Enable Content Warning" -#: mod/settings.php:688 +#: mod/settings.php:541 msgid "" "Users on networks like Mastodon or Pleroma are able to set a content warning" -" field which collapse their post by default. This disables the automatic " -"collapsing and sets the content warning as the post title. Doesn't affect " -"any other content filtering you eventually set up." -msgstr "Users on networks like Mastodon or Pleroma are able to set a content warning field which collapses their post by default. This disables the automatic collapsing and sets the content warning as the post title. It doesn't affect any other content filtering you may set up." +" field which collapse their post by default. This enables the automatic " +"collapsing instead of setting the content warning as the post title. Doesn't" +" affect any other content filtering you eventually set up." +msgstr "Users on networks like Mastodon or Pleroma are able to set a content warning field which collapse their post by default. This enables the automatic collapsing instead of setting the content warning as the post title. Doesn't affect any other content filtering you eventually set up." -#: mod/settings.php:689 -msgid "Disable intelligent shortening" -msgstr "Disable intelligent shortening" +#: mod/settings.php:542 +msgid "Enable intelligent shortening" +msgstr "Enable intelligent shortening" -#: mod/settings.php:689 +#: mod/settings.php:542 msgid "" "Normally the system tries to find the best link to add to shortened posts. " -"If this option is enabled then every shortened post will always point to the" -" original friendica post." -msgstr "Normally the system tries to find the best link to add to shortened posts. If this option is enabled then every shortened post will always point to the original Friendica post." +"If disabled, every shortened post will always point to the original " +"friendica post." +msgstr "Normally the system tries to find the best link to add to shortened posts. If disabled, every shortened post will always point to the original Friendica post." -#: mod/settings.php:690 +#: mod/settings.php:543 +msgid "Enable simple text shortening" +msgstr "Enable simple text shortening" + +#: mod/settings.php:543 +msgid "" +"Normally the system shortens posts at the next line feed. If this option is " +"enabled then the system will shorten the text at the maximum character " +"limit." +msgstr "Normally the system shortens posts at the next line feed. If this option is enabled then the system will shorten the text at the maximum character limit." + +#: mod/settings.php:544 msgid "Attach the link title" msgstr "Attach the link title" -#: mod/settings.php:690 +#: mod/settings.php:544 msgid "" "When activated, the title of the attached link will be added as a title on " "posts to Diaspora. This is mostly helpful with \"remote-self\" contacts that" " share feed content." msgstr "If activated, the title of the attached link will be added as a title on posts to Diaspora. This is mostly helpful with \"remote-self\" contacts that share feed content." -#: mod/settings.php:691 -msgid "Automatically follow any GNU Social (OStatus) followers/mentioners" -msgstr "Automatically follow any GNU Social (OStatus) followers/mentioners" +#: mod/settings.php:545 +msgid "Your legacy ActivityPub/GNU Social account" +msgstr "Your legacy ActivityPub/GNU Social account" -#: mod/settings.php:691 +#: mod/settings.php:545 msgid "" -"If you receive a message from an unknown OStatus user, this option decides " -"what to do. If it is checked, a new contact will be created for every " -"unknown user." -msgstr "Create a new contact for every unknown OStatus user from whom you receive a message." +"If you enter your old account name from an ActivityPub based system or your " +"GNU Social/Statusnet account name here (in the format user@domain.tld), your" +" contacts will be added automatically. The field will be emptied when done." +msgstr "If you enter your old account name from an ActivityPub based system or your GNU Social/Statusnet account name here (in the format user@domain.tld), your contacts will be added automatically. The field will be emptied when done." -#: mod/settings.php:692 -msgid "Default group for OStatus contacts" -msgstr "Default group for OStatus contacts" - -#: mod/settings.php:693 -msgid "Your legacy GNU Social account" -msgstr "Your legacy GNU Social account" - -#: mod/settings.php:693 -msgid "" -"If you enter your old GNU Social/Statusnet account name here (in the format " -"user@domain.tld), your contacts will be added automatically. The field will " -"be emptied when done." -msgstr "Entering your old GNU Social/Statusnet account name here (format: user@domain.tld), will automatically added your contacts. The field will be emptied when done." - -#: mod/settings.php:696 +#: mod/settings.php:548 msgid "Repair OStatus subscriptions" msgstr "Repair OStatus subscriptions" -#: mod/settings.php:700 +#: mod/settings.php:552 msgid "Email/Mailbox Setup" msgstr "Email/Mailbox setup" -#: mod/settings.php:701 +#: mod/settings.php:553 msgid "" "If you wish to communicate with email contacts using this service " "(optional), please specify how to connect to your mailbox." msgstr "Specify how to connect to your mailbox, if you wish to communicate with existing email contacts." -#: mod/settings.php:702 +#: mod/settings.php:554 msgid "Last successful email check:" msgstr "Last successful email check:" -#: mod/settings.php:704 +#: mod/settings.php:556 msgid "IMAP server name:" msgstr "IMAP server name:" -#: mod/settings.php:705 +#: mod/settings.php:557 msgid "IMAP port:" msgstr "IMAP port:" -#: mod/settings.php:706 +#: mod/settings.php:558 msgid "Security:" msgstr "Security:" -#: mod/settings.php:707 +#: mod/settings.php:559 msgid "Email login name:" msgstr "Email login name:" -#: mod/settings.php:708 +#: mod/settings.php:560 msgid "Email password:" msgstr "Email password:" -#: mod/settings.php:709 +#: mod/settings.php:561 msgid "Reply-to address:" msgstr "Reply-to address:" -#: mod/settings.php:710 +#: mod/settings.php:562 msgid "Send public posts to all email contacts:" msgstr "Send public posts to all email contacts:" -#: mod/settings.php:711 +#: mod/settings.php:563 msgid "Action after import:" msgstr "Action after import:" -#: mod/settings.php:711 src/Content/Nav.php:270 +#: mod/settings.php:563 src/Content/Nav.php:280 msgid "Mark as seen" msgstr "Mark as seen" -#: mod/settings.php:711 +#: mod/settings.php:563 msgid "Move to folder" msgstr "Move to folder" -#: mod/settings.php:712 +#: mod/settings.php:564 msgid "Move to folder:" msgstr "Move to folder:" -#: mod/settings.php:726 +#: mod/settings.php:578 msgid "Unable to find your profile. Please contact your admin." msgstr "Unable to find your profile. Please contact your admin." -#: mod/settings.php:762 src/Content/Widget.php:536 +#: mod/settings.php:616 src/Content/Widget.php:526 msgid "Account Types" msgstr "Account types" -#: mod/settings.php:763 +#: mod/settings.php:617 msgid "Personal Page Subtypes" msgstr "Personal Page subtypes" -#: mod/settings.php:764 +#: mod/settings.php:618 msgid "Community Forum Subtypes" msgstr "Community forum subtypes" -#: mod/settings.php:771 src/Module/Admin/BaseUsers.php:106 +#: mod/settings.php:625 src/Module/Admin/BaseUsers.php:106 msgid "Personal Page" msgstr "Personal Page" -#: mod/settings.php:772 +#: mod/settings.php:626 msgid "Account for a personal profile." msgstr "Account for a personal profile." -#: mod/settings.php:775 src/Module/Admin/BaseUsers.php:107 +#: mod/settings.php:629 src/Module/Admin/BaseUsers.php:107 msgid "Organisation Page" msgstr "Organisation Page" -#: mod/settings.php:776 +#: mod/settings.php:630 msgid "" "Account for an organisation that automatically approves contact requests as " "\"Followers\"." msgstr "Account for an organisation that automatically approves contact requests as \"Followers\"." -#: mod/settings.php:779 src/Module/Admin/BaseUsers.php:108 +#: mod/settings.php:633 src/Module/Admin/BaseUsers.php:108 msgid "News Page" msgstr "News Page" -#: mod/settings.php:780 +#: mod/settings.php:634 msgid "" "Account for a news reflector that automatically approves contact requests as" " \"Followers\"." msgstr "Account for a news reflector that automatically approves contact requests as \"Followers\"." -#: mod/settings.php:783 src/Module/Admin/BaseUsers.php:109 +#: mod/settings.php:637 src/Module/Admin/BaseUsers.php:109 msgid "Community Forum" msgstr "Community Forum" -#: mod/settings.php:784 +#: mod/settings.php:638 msgid "Account for community discussions." msgstr "Account for community discussions." -#: mod/settings.php:787 src/Module/Admin/BaseUsers.php:99 +#: mod/settings.php:641 src/Module/Admin/BaseUsers.php:99 msgid "Normal Account Page" msgstr "Standard" -#: mod/settings.php:788 +#: mod/settings.php:642 msgid "" "Account for a regular personal profile that requires manual approval of " "\"Friends\" and \"Followers\"." msgstr "Account for a regular personal profile that requires manual approval of \"Friends\" and \"Followers\"." -#: mod/settings.php:791 src/Module/Admin/BaseUsers.php:100 +#: mod/settings.php:645 src/Module/Admin/BaseUsers.php:100 msgid "Soapbox Page" msgstr "Soapbox" -#: mod/settings.php:792 +#: mod/settings.php:646 msgid "" "Account for a public profile that automatically approves contact requests as" " \"Followers\"." msgstr "Account for a public profile that automatically approves contact requests as \"Followers\"." -#: mod/settings.php:795 src/Module/Admin/BaseUsers.php:101 +#: mod/settings.php:649 src/Module/Admin/BaseUsers.php:101 msgid "Public Forum" msgstr "Public forum" -#: mod/settings.php:796 +#: mod/settings.php:650 msgid "Automatically approves all contact requests." msgstr "Automatically approves all contact requests." -#: mod/settings.php:799 src/Module/Admin/BaseUsers.php:102 +#: mod/settings.php:653 src/Module/Admin/BaseUsers.php:102 msgid "Automatic Friend Page" msgstr "Love-all" -#: mod/settings.php:800 +#: mod/settings.php:654 msgid "" "Account for a popular profile that automatically approves contact requests " "as \"Friends\"." msgstr "Account for a popular profile that automatically approves contact requests as \"Friends\"." -#: mod/settings.php:803 +#: mod/settings.php:657 msgid "Private Forum [Experimental]" msgstr "Private forum [Experimental]" -#: mod/settings.php:804 +#: mod/settings.php:658 msgid "Requires manual approval of contact requests." msgstr "Requires manual approval of contact requests." -#: mod/settings.php:815 +#: mod/settings.php:669 msgid "OpenID:" msgstr "OpenID:" -#: mod/settings.php:815 +#: mod/settings.php:669 msgid "(Optional) Allow this OpenID to login to this account." msgstr "(Optional) Allow this OpenID to login to this account." -#: mod/settings.php:823 +#: mod/settings.php:677 msgid "Publish your profile in your local site directory?" msgstr "Publish your profile in your local site directory?" -#: mod/settings.php:823 +#: mod/settings.php:677 #, php-format msgid "" "Your profile will be published in this node's local " @@ -2509,115 +1558,115 @@ msgid "" " system settings." msgstr "Your profile will be published in this node's local directory. Your profile details may be publicly visible depending on the system settings." -#: mod/settings.php:829 +#: mod/settings.php:683 #, php-format msgid "" "Your profile will also be published in the global friendica directories " "(e.g. %s)." msgstr "Your profile will also be published in the global Friendica directories (e.g. %s)." -#: mod/settings.php:835 +#: mod/settings.php:689 #, php-format msgid "Your Identity Address is '%s' or '%s'." msgstr "My identity address: '%s' or '%s'" -#: mod/settings.php:846 +#: mod/settings.php:700 msgid "Account Settings" msgstr "Account Settings" -#: mod/settings.php:854 +#: mod/settings.php:708 msgid "Password Settings" msgstr "Password change" -#: mod/settings.php:855 src/Module/Register.php:149 +#: mod/settings.php:709 src/Module/Register.php:151 msgid "New Password:" msgstr "New password:" -#: mod/settings.php:855 +#: mod/settings.php:709 msgid "" "Allowed characters are a-z, A-Z, 0-9 and special characters except white " "spaces, accentuated letters and colon (:)." msgstr "Allowed characters are a-z, A-Z, 0-9 and special characters except white spaces, accentuated letters and colon." -#: mod/settings.php:856 src/Module/Register.php:150 +#: mod/settings.php:710 src/Module/Register.php:152 msgid "Confirm:" msgstr "Confirm new password:" -#: mod/settings.php:856 +#: mod/settings.php:710 msgid "Leave password fields blank unless changing" msgstr "Leave password fields blank unless changing" -#: mod/settings.php:857 +#: mod/settings.php:711 msgid "Current Password:" msgstr "Current password:" -#: mod/settings.php:857 +#: mod/settings.php:711 msgid "Your current password to confirm the changes" msgstr "Current password to confirm change" -#: mod/settings.php:858 +#: mod/settings.php:712 msgid "Password:" msgstr "Password:" -#: mod/settings.php:858 +#: mod/settings.php:712 msgid "Your current password to confirm the changes of the email address" -msgstr "" +msgstr "Your current password to confirm the changes of the email address" -#: mod/settings.php:861 +#: mod/settings.php:715 msgid "Delete OpenID URL" msgstr "Delete OpenID URL" -#: mod/settings.php:863 +#: mod/settings.php:717 msgid "Basic Settings" msgstr "Basic information" -#: mod/settings.php:864 src/Module/Profile/Profile.php:144 +#: mod/settings.php:718 src/Module/Profile/Profile.php:144 msgid "Full Name:" msgstr "Full name:" -#: mod/settings.php:865 +#: mod/settings.php:719 msgid "Email Address:" msgstr "Email address:" -#: mod/settings.php:866 +#: mod/settings.php:720 msgid "Your Timezone:" msgstr "Time zone:" -#: mod/settings.php:867 +#: mod/settings.php:721 msgid "Your Language:" msgstr "Language:" -#: mod/settings.php:867 +#: mod/settings.php:721 msgid "" "Set the language we use to show you friendica interface and to send you " "emails" msgstr "Set the language of your Friendica interface and emails sent to you." -#: mod/settings.php:868 +#: mod/settings.php:722 msgid "Default Post Location:" msgstr "Posting location:" -#: mod/settings.php:869 +#: mod/settings.php:723 msgid "Use Browser Location:" msgstr "Use browser location:" -#: mod/settings.php:871 +#: mod/settings.php:725 msgid "Security and Privacy Settings" msgstr "Security and privacy" -#: mod/settings.php:873 +#: mod/settings.php:727 msgid "Maximum Friend Requests/Day:" msgstr "Maximum friend requests per day:" -#: mod/settings.php:873 mod/settings.php:883 +#: mod/settings.php:727 mod/settings.php:737 msgid "(to prevent spam abuse)" msgstr "May prevent spam or abuse registrations" -#: mod/settings.php:875 +#: mod/settings.php:729 msgid "Allow your profile to be searchable globally?" msgstr "Allow your profile to be searchable globally?" -#: mod/settings.php:875 +#: mod/settings.php:729 msgid "" "Activate this setting if you want others to easily find and follow you. Your" " profile will be searchable on remote systems. This setting also determines " @@ -2625,43 +1674,43 @@ msgid "" "indexed or not." msgstr "Activate this setting if you want others to easily find and follow you. Your profile will be searchable on remote systems. This setting also determines whether Friendica will inform search engines that your profile should be indexed or not." -#: mod/settings.php:876 +#: mod/settings.php:730 msgid "Hide your contact/friend list from viewers of your profile?" msgstr "Hide your contact/friend list from viewers of your profile?" -#: mod/settings.php:876 +#: mod/settings.php:730 msgid "" "A list of your contacts is displayed on your profile page. Activate this " "option to disable the display of your contact list." msgstr "A list of your contacts is displayed on your profile page. Activate this option to disable the display of your contact list." -#: mod/settings.php:877 +#: mod/settings.php:731 msgid "Hide your profile details from anonymous viewers?" msgstr "Hide profile details from anonymous viewers?" -#: mod/settings.php:877 +#: mod/settings.php:731 msgid "" "Anonymous visitors will only see your profile picture, your display name and" " the nickname you are using on your profile page. Your public posts and " "replies will still be accessible by other means." msgstr "Anonymous visitors will only see your profile picture, your display name and the nickname you are using on your profile page. Your public posts and replies may still be accessible by other means." -#: mod/settings.php:878 +#: mod/settings.php:732 msgid "Make public posts unlisted" msgstr "Make public posts unlisted" -#: mod/settings.php:878 +#: mod/settings.php:732 msgid "" "Your public posts will not appear on the community pages or in search " "results, nor be sent to relay servers. However they can still appear on " "public feeds on remote servers." msgstr "Your public posts will not appear on the community pages or in search results, nor be sent to relay servers. However they can still appear on public feeds on remote servers." -#: mod/settings.php:879 +#: mod/settings.php:733 msgid "Make all posted pictures accessible" msgstr "Make all posted pictures accessible" -#: mod/settings.php:879 +#: mod/settings.php:733 msgid "" "This option makes every posted picture accessible via the direct link. This " "is a workaround for the problem that most other networks can't handle " @@ -2669,209 +1718,221 @@ msgid "" "public on your photo albums though." msgstr "This option makes every posted picture accessible via the direct link. This is a workaround for the problem that most other networks can't handle permissions on pictures. Non public pictures still won't be visible for the public on your photo albums though." -#: mod/settings.php:880 +#: mod/settings.php:734 msgid "Allow friends to post to your profile page?" msgstr "Allow friends to post to my wall?" -#: mod/settings.php:880 +#: mod/settings.php:734 msgid "" "Your contacts may write posts on your profile wall. These posts will be " "distributed to your contacts" msgstr "Your contacts may write posts on your profile wall. These posts will be distributed to your contacts" -#: mod/settings.php:881 +#: mod/settings.php:735 msgid "Allow friends to tag your posts?" msgstr "Allow friends to tag my post?" -#: mod/settings.php:881 +#: mod/settings.php:735 msgid "Your contacts can add additional tags to your posts." msgstr "Your contacts can add additional tags to your posts." -#: mod/settings.php:882 +#: mod/settings.php:736 msgid "Permit unknown people to send you private mail?" msgstr "Allow unknown people to send me private messages?" -#: mod/settings.php:882 +#: mod/settings.php:736 msgid "" "Friendica network users may send you private messages even if they are not " "in your contact list." msgstr "Friendica network users may send you private messages even if they are not in your contact list." -#: mod/settings.php:883 +#: mod/settings.php:737 msgid "Maximum private messages per day from unknown people:" msgstr "Maximum private messages per day from unknown people:" -#: mod/settings.php:885 +#: mod/settings.php:739 msgid "Default Post Permissions" msgstr "Default post permissions" -#: mod/settings.php:889 +#: mod/settings.php:743 msgid "Expiration settings" msgstr "Expiration settings" -#: mod/settings.php:890 +#: mod/settings.php:744 msgid "Automatically expire posts after this many days:" msgstr "Automatically expire posts after this many days:" -#: mod/settings.php:890 +#: mod/settings.php:744 msgid "If empty, posts will not expire. Expired posts will be deleted" msgstr "Posts will not expire if empty; expired posts will be deleted" -#: mod/settings.php:891 +#: mod/settings.php:745 msgid "Expire posts" msgstr "Expire posts" -#: mod/settings.php:891 +#: mod/settings.php:745 msgid "When activated, posts and comments will be expired." msgstr "If activated, posts and comments will expire." -#: mod/settings.php:892 +#: mod/settings.php:746 msgid "Expire personal notes" msgstr "Expire personal notes" -#: mod/settings.php:892 +#: mod/settings.php:746 msgid "" "When activated, the personal notes on your profile page will be expired." msgstr "If activated, personal notes on your profile page will expire." -#: mod/settings.php:893 +#: mod/settings.php:747 msgid "Expire starred posts" msgstr "Expire starred posts" -#: mod/settings.php:893 +#: mod/settings.php:747 msgid "" "Starring posts keeps them from being expired. That behaviour is overwritten " "by this setting." msgstr "Starring posts keeps them from being expired. That behaviour is overwritten by this setting." -#: mod/settings.php:894 +#: mod/settings.php:748 msgid "Expire photos" msgstr "Expire photos" -#: mod/settings.php:894 +#: mod/settings.php:748 msgid "When activated, photos will be expired." msgstr "If activated, photos will expire." -#: mod/settings.php:895 +#: mod/settings.php:749 msgid "Only expire posts by others" msgstr "Only expire posts by others" -#: mod/settings.php:895 +#: mod/settings.php:749 msgid "" "When activated, your own posts never expire. Then the settings above are " "only valid for posts you received." msgstr "If activated, your own posts never expire. Than the settings above are only valid for posts you received." -#: mod/settings.php:898 +#: mod/settings.php:752 msgid "Notification Settings" msgstr "Notification" -#: mod/settings.php:899 +#: mod/settings.php:753 msgid "Send a notification email when:" msgstr "Send notification email when:" -#: mod/settings.php:900 +#: mod/settings.php:754 msgid "You receive an introduction" msgstr "Receiving an introduction" -#: mod/settings.php:901 +#: mod/settings.php:755 msgid "Your introductions are confirmed" msgstr "My introductions are confirmed" -#: mod/settings.php:902 +#: mod/settings.php:756 msgid "Someone writes on your profile wall" msgstr "Someone writes on my wall" -#: mod/settings.php:903 +#: mod/settings.php:757 msgid "Someone writes a followup comment" msgstr "A follow up comment is posted" -#: mod/settings.php:904 +#: mod/settings.php:758 msgid "You receive a private message" msgstr "receiving a private message" -#: mod/settings.php:905 +#: mod/settings.php:759 msgid "You receive a friend suggestion" msgstr "Receiving a friend suggestion" -#: mod/settings.php:906 +#: mod/settings.php:760 msgid "You are tagged in a post" msgstr "Tagged in a post" -#: mod/settings.php:907 +#: mod/settings.php:761 msgid "You are poked/prodded/etc. in a post" msgstr "Poked in a post" -#: mod/settings.php:909 +#: mod/settings.php:763 +msgid "Create a desktop notification when:" +msgstr "Create a desktop notification when:" + +#: mod/settings.php:764 +msgid "Someone liked your content" +msgstr "Someone liked your content" + +#: mod/settings.php:765 +msgid "Someone shared your content" +msgstr "Someone shared your content" + +#: mod/settings.php:767 msgid "Activate desktop notifications" msgstr "Activate desktop notifications" -#: mod/settings.php:909 +#: mod/settings.php:767 msgid "Show desktop popup on new notifications" msgstr "Show desktop pop-up on new notifications" -#: mod/settings.php:911 +#: mod/settings.php:769 msgid "Text-only notification emails" msgstr "Text-only notification emails" -#: mod/settings.php:913 +#: mod/settings.php:771 msgid "Send text only notification emails, without the html part" msgstr "Receive text only emails without HTML " -#: mod/settings.php:915 +#: mod/settings.php:773 msgid "Show detailled notifications" msgstr "Show detailled notifications" -#: mod/settings.php:917 +#: mod/settings.php:775 msgid "" "Per default, notifications are condensed to a single notification per item. " "When enabled every notification is displayed." msgstr "By default, notifications are condensed into a single notification for each item. If enabled, every notification is displayed." -#: mod/settings.php:919 +#: mod/settings.php:777 msgid "Show notifications of ignored contacts" -msgstr "" +msgstr "Show notifications of ignored contacts" -#: mod/settings.php:921 +#: mod/settings.php:779 msgid "" "You don't see posts from ignored contacts. But you still see their comments." " This setting controls if you want to still receive regular notifications " "that are caused by ignored contacts or not." -msgstr "" +msgstr "You don't see posts from ignored contacts. But you still see their comments. This setting controls if you want to still receive regular notifications that are caused by ignored contacts or not." -#: mod/settings.php:923 +#: mod/settings.php:781 msgid "Advanced Account/Page Type Settings" msgstr "Advanced account types" -#: mod/settings.php:924 +#: mod/settings.php:782 msgid "Change the behaviour of this account for special situations" msgstr "Change behaviour of this account for special situations" -#: mod/settings.php:927 +#: mod/settings.php:785 msgid "Import Contacts" msgstr "Import Contacts" -#: mod/settings.php:928 +#: mod/settings.php:786 msgid "" "Upload a CSV file that contains the handle of your followed accounts in the " "first column you exported from the old account." msgstr "Upload a CSV file that contains the handle of your followed accounts in the first column you exported from the old account." -#: mod/settings.php:929 +#: mod/settings.php:787 msgid "Upload File" msgstr "Upload File" -#: mod/settings.php:931 +#: mod/settings.php:789 msgid "Relocate" msgstr "Recent relocation" -#: mod/settings.php:932 +#: mod/settings.php:790 msgid "" "If you have moved this profile from another server, and some of your " "contacts don't receive your updates, try pushing this button." msgstr "If you have moved this profile from another server and some of your contacts don't receive your updates:" -#: mod/settings.php:933 +#: mod/settings.php:791 msgid "Resend relocate message to contacts" msgstr "Resend relocation message to contacts" @@ -2885,140 +1946,155 @@ msgstr "No suggestions available. If this is a new site, please try again in 24 msgid "Friend Suggestions" msgstr "Friend suggestions" -#: mod/tagrm.php:113 +#: mod/tagger.php:79 src/Content/Item.php:346 src/Model/Item.php:2626 +msgid "photo" +msgstr "photo" + +#: mod/tagger.php:79 src/Content/Item.php:341 src/Content/Item.php:350 +msgid "status" +msgstr "status" + +#: mod/tagger.php:112 src/Content/Item.php:360 +#, php-format +msgid "%1$s tagged %2$s's %3$s with %4$s" +msgstr "%1$s tagged %2$s's %3$s with %4$s" + +#: mod/tagrm.php:115 msgid "Remove Item Tag" msgstr "Remove Item tag" -#: mod/tagrm.php:115 +#: mod/tagrm.php:117 msgid "Select a tag to remove: " msgstr "Select a tag to remove: " -#: mod/tagrm.php:126 src/Module/Settings/Delegation.php:179 +#: mod/tagrm.php:128 src/Module/Settings/Delegation.php:179 #: src/Module/Settings/TwoFactor/Trusted.php:104 msgid "Remove" msgstr "Remove" -#: mod/uimport.php:45 +#: mod/uimport.php:46 msgid "User imports on closed servers can only be done by an administrator." msgstr "User imports on closed servers can only be done by an administrator." -#: mod/uimport.php:54 src/Module/Register.php:84 +#: mod/uimport.php:55 src/Module/Register.php:86 msgid "" "This site has exceeded the number of allowed daily account registrations. " "Please try again tomorrow." msgstr "This site has exceeded the number of allowed daily account registrations. Please try again tomorrow." -#: mod/uimport.php:61 src/Module/Register.php:160 +#: mod/uimport.php:62 src/Module/Register.php:162 msgid "Import" msgstr "Import profile" -#: mod/uimport.php:63 +#: mod/uimport.php:64 msgid "Move account" msgstr "Move Existing Friendica Account" -#: mod/uimport.php:64 +#: mod/uimport.php:65 msgid "You can import an account from another Friendica server." msgstr "You can import an existing Friendica profile to this node." -#: mod/uimport.php:65 +#: mod/uimport.php:66 msgid "" "You need to export your account from the old server and upload it here. We " "will recreate your old account here with all your contacts. We will try also" " to inform your friends that you moved here." msgstr "You need to export your account from the old server and upload it here. We will recreate your old account here with all your contacts. We will try also to inform your friends that you moved here." -#: mod/uimport.php:66 +#: mod/uimport.php:67 msgid "" "This feature is experimental. We can't import contacts from the OStatus " "network (GNU Social/Statusnet) or from Diaspora" msgstr "This feature is experimental. We can't import contacts from the OStatus network (GNU Social/Statusnet) or from diaspora*." -#: mod/uimport.php:67 +#: mod/uimport.php:68 msgid "Account file" msgstr "Account file:" -#: mod/uimport.php:67 +#: mod/uimport.php:68 msgid "" "To export your account, go to \"Settings->Export your personal data\" and " "select \"Export account\"" msgstr "To export your account, go to \"Settings->Export personal data\" and select \"Export account\"" -#: mod/unfollow.php:65 mod/unfollow.php:133 +#: mod/unfollow.php:65 mod/unfollow.php:135 msgid "You aren't following this contact." msgstr "You aren't following this contact." -#: mod/unfollow.php:71 mod/unfollow.php:139 +#: mod/unfollow.php:71 msgid "Unfollowing is currently not supported by your network." msgstr "Unfollowing is currently not supported by your network." -#: mod/unfollow.php:95 +#: mod/unfollow.php:92 msgid "Disconnect/Unfollow" msgstr "Disconnect/Unfollow" -#: mod/videos.php:134 -msgid "No videos selected" -msgstr "No videos selected" +#: mod/unfollow.php:146 +msgid "" +"Unable to unfollow this contact, please retry in a few minutes or contact " +"your administrator." +msgstr "Unable to unfollow this contact, please retry in a few minutes or contact your administrator." -#: mod/videos.php:252 -msgid "View Video" -msgstr "View video" +#: mod/unfollow.php:148 +msgid "Contact was successfully unfollowed" +msgstr "Contact was successfully unfollowed" -#: mod/videos.php:267 -msgid "Recent Videos" -msgstr "Recent videos" +#: mod/unfollow.php:152 +msgid "Unable to unfollow this contact, please contact your administrator" +msgstr "Unable to unfollow this contact, please contact your administrator" -#: mod/videos.php:269 -msgid "Upload New Videos" -msgstr "Upload new videos" - -#: mod/wall_attach.php:42 mod/wall_attach.php:49 mod/wall_attach.php:87 -#: mod/wall_upload.php:52 mod/wall_upload.php:63 mod/wall_upload.php:108 -#: mod/wall_upload.php:159 mod/wall_upload.php:162 +#: mod/wall_attach.php:39 mod/wall_attach.php:46 mod/wall_attach.php:77 +#: mod/wall_upload.php:52 mod/wall_upload.php:63 mod/wall_upload.php:99 +#: mod/wall_upload.php:150 mod/wall_upload.php:153 msgid "Invalid request." msgstr "Invalid request." -#: mod/wall_attach.php:105 +#: mod/wall_attach.php:95 msgid "Sorry, maybe your upload is bigger than the PHP configuration allows" msgstr "Sorry, maybe your upload is bigger than the PHP configuration allows" -#: mod/wall_attach.php:105 +#: mod/wall_attach.php:95 msgid "Or - did you try to upload an empty file?" msgstr "Or did you try to upload an empty file?" -#: mod/wall_attach.php:116 +#: mod/wall_attach.php:106 #, php-format msgid "File exceeds size limit of %s" msgstr "File exceeds size limit of %s" -#: mod/wall_attach.php:131 +#: mod/wall_attach.php:121 msgid "File upload failed." msgstr "File upload failed." -#: mod/wallmessage.php:68 mod/wallmessage.php:129 +#: mod/wall_upload.php:224 src/Model/Photo.php:987 +msgid "Wall Photos" +msgstr "Wall photos" + +#: mod/wallmessage.php:61 mod/wallmessage.php:115 #, php-format msgid "Number of daily wall messages for %s exceeded. Message failed." msgstr "Number of daily wall messages for %s exceeded. Message failed." -#: mod/wallmessage.php:79 +#: mod/wallmessage.php:72 msgid "Unable to check your home location." msgstr "Unable to check your home location." -#: mod/wallmessage.php:103 mod/wallmessage.php:112 +#: mod/wallmessage.php:96 mod/wallmessage.php:103 msgid "No recipient." msgstr "No recipient." -#: mod/wallmessage.php:143 +#: mod/wallmessage.php:129 #, php-format msgid "" "If you wish for %s to respond, please check that the privacy settings on " "your site allow private mail from unknown senders." msgstr "If you wish for %s to respond, please check that the privacy settings on your site allow private mail from unknown senders." -#: mod/wall_upload.php:233 -msgid "Wall Photos" -msgstr "Wall photos" +#: src/App.php:456 +msgid "No system theme config value set." +msgstr "No system theme configuration value set." -#: src/App/Module.php:241 +#: src/App/Module.php:240 msgid "You must be logged in to use addons. " msgstr "You must be logged in to use addons. " @@ -3030,61 +2106,69 @@ msgstr "Delete this item?" msgid "" "Block this author? They won't be able to follow you nor see your public " "posts, and you won't be able to see their posts and their notifications." -msgstr "" +msgstr "Block this author? They won't be able to follow you nor see your public posts, and you won't be able to see their posts and their notifications." #: src/App/Page.php:299 msgid "toggle mobile" msgstr "Toggle mobile" -#: src/App.php:311 -msgid "No system theme config value set." -msgstr "No system theme configuration value set." - -#: src/App/Router.php:234 +#: src/App/Router.php:241 #, php-format msgid "Method not allowed for this module. Allowed method(s): %s" msgstr "Method not allowed for this module. Allowed method(s): %s" -#: src/App/Router.php:236 src/Module/HTTPException/PageNotFound.php:32 +#: src/App/Router.php:243 src/Module/HTTPException/PageNotFound.php:32 msgid "Page not found." msgstr "Page not found" -#: src/BaseModule.php:150 +#: src/BaseModule.php:180 msgid "" "The form security token was not correct. This probably happened because the " "form has been opened for too long (>3 hours) before submitting it." msgstr "The form security token was incorrect. This probably happened because the form has not been submitted within 3 hours." -#: src/BaseModule.php:179 +#: src/BaseModule.php:207 msgid "All contacts" msgstr "All contacts" -#: src/BaseModule.php:184 src/Content/Widget.php:238 src/Core/ACL.php:183 -#: src/Module/Contact.php:852 src/Module/PermissionTooltip.php:77 -#: src/Module/PermissionTooltip.php:99 +#: src/BaseModule.php:212 src/Content/Widget.php:231 src/Core/ACL.php:193 +#: src/Module/Contact.php:756 src/Module/PermissionTooltip.php:79 +#: src/Module/PermissionTooltip.php:101 msgid "Followers" msgstr "Followers" -#: src/BaseModule.php:189 src/Content/Widget.php:239 -#: src/Module/Contact.php:853 +#: src/BaseModule.php:217 src/Content/Widget.php:232 +#: src/Module/Contact.php:757 msgid "Following" msgstr "Following" -#: src/BaseModule.php:194 src/Content/Widget.php:240 -#: src/Module/Contact.php:854 +#: src/BaseModule.php:222 src/Content/Widget.php:233 +#: src/Module/Contact.php:758 msgid "Mutual friends" msgstr "Mutual friends" -#: src/BaseModule.php:202 +#: src/BaseModule.php:230 msgid "Common" -msgstr "" +msgstr "Common" -#: src/Console/ArchiveContact.php:105 +#: src/Console/Addon.php:177 src/Console/Addon.php:202 +msgid "Addon not found" +msgstr "Addon not found" + +#: src/Console/Addon.php:181 +msgid "Addon already enabled" +msgstr "Addon already enabled" + +#: src/Console/Addon.php:206 +msgid "Addon already disabled" +msgstr "Addon already disabled" + +#: src/Console/ArchiveContact.php:106 #, php-format msgid "Could not find any unarchived contact entry for this URL (%s)" msgstr "Could not find any unarchived contact entry for this URL (%s)" -#: src/Console/ArchiveContact.php:108 +#: src/Console/ArchiveContact.php:109 msgid "The contact entries have been archived" msgstr "The contact entries have been archived" @@ -3095,7 +2179,7 @@ msgid "Could not find any contact entry for this URL (%s)" msgstr "Could not find any contact entry for this URL (%s)" #: src/Console/GlobalCommunityBlock.php:101 -#: src/Module/Admin/Blocklist/Contact.php:47 +#: src/Module/Admin/Blocklist/Contact.php:66 msgid "The contact has been blocked from the node" msgstr "The contact has been blocked from the node" @@ -3120,43 +2204,54 @@ msgstr "Execute pending post updates." msgid "All pending post updates are done." msgstr "All pending post updates are done." -#: src/Console/User.php:158 -msgid "Enter new password: " -msgstr "Enter new password: " - -#: src/Console/User.php:193 -msgid "Enter user name: " -msgstr "Enter user name: " - -#: src/Console/User.php:201 src/Console/User.php:241 src/Console/User.php:274 -#: src/Console/User.php:300 +#: src/Console/User.php:158 src/Console/User.php:245 msgid "Enter user nickname: " msgstr "Enter user nickname: " -#: src/Console/User.php:209 +#: src/Console/User.php:202 +msgid "Enter new password: " +msgstr "Enter new password: " + +#: src/Console/User.php:237 +msgid "Enter user name: " +msgstr "Enter user name: " + +#: src/Console/User.php:253 msgid "Enter user email address: " msgstr "Enter user email address: " -#: src/Console/User.php:217 +#: src/Console/User.php:261 msgid "Enter a language (optional): " msgstr "Enter a language (optional): " -#: src/Console/User.php:255 +#: src/Console/User.php:286 msgid "User is not pending." msgstr "User is not pending." -#: src/Console/User.php:313 -msgid "User has already been marked for deletion." -msgstr "" - #: src/Console/User.php:318 +msgid "User has already been marked for deletion." +msgstr "User has already been marked for deletion." + +#: src/Console/User.php:323 #, php-format msgid "Type \"yes\" to delete %s" msgstr "Type \"yes\" to delete %s" -#: src/Console/User.php:320 +#: src/Console/User.php:325 msgid "Deletion aborted." -msgstr "" +msgstr "Deletion aborted." + +#: src/Console/User.php:450 +msgid "Enter category: " +msgstr "Enter category: " + +#: src/Console/User.php:460 +msgid "Enter key: " +msgstr "Enter key: " + +#: src/Console/User.php:494 +msgid "Enter value: " +msgstr "Enter value: " #: src/Content/BoundariesPager.php:116 src/Content/Pager.php:171 msgid "newer" @@ -3266,6 +2361,268 @@ msgstr "pnut" msgid "%s (via %s)" msgstr "%s (via %s)" +#: src/Content/Conversation.php:207 +#, php-format +msgid "%s likes this." +msgstr "%s likes this." + +#: src/Content/Conversation.php:210 +#, php-format +msgid "%s doesn't like this." +msgstr "%s doesn't like this." + +#: src/Content/Conversation.php:213 +#, php-format +msgid "%s attends." +msgstr "%s attends." + +#: src/Content/Conversation.php:216 +#, php-format +msgid "%s doesn't attend." +msgstr "%s doesn't attend." + +#: src/Content/Conversation.php:219 +#, php-format +msgid "%s attends maybe." +msgstr "%s may attend." + +#: src/Content/Conversation.php:222 src/Content/Conversation.php:260 +#: src/Content/Conversation.php:848 +#, php-format +msgid "%s reshared this." +msgstr "%s reshared this." + +#: src/Content/Conversation.php:228 +msgid "and" +msgstr "and" + +#: src/Content/Conversation.php:231 +#, php-format +msgid "and %d other people" +msgstr "and %d other people" + +#: src/Content/Conversation.php:239 +#, php-format +msgid "%2$d people like this" +msgstr "%2$d people like this" + +#: src/Content/Conversation.php:240 +#, php-format +msgid "%s like this." +msgstr "%s like this." + +#: src/Content/Conversation.php:243 +#, php-format +msgid "%2$d people don't like this" +msgstr "%2$d people don't like this" + +#: src/Content/Conversation.php:244 +#, php-format +msgid "%s don't like this." +msgstr "%s don't like this." + +#: src/Content/Conversation.php:247 +#, php-format +msgid "%2$d people attend" +msgstr "%2$d people attend" + +#: src/Content/Conversation.php:248 +#, php-format +msgid "%s attend." +msgstr "%s attend." + +#: src/Content/Conversation.php:251 +#, php-format +msgid "%2$d people don't attend" +msgstr "%2$d people don't attend" + +#: src/Content/Conversation.php:252 +#, php-format +msgid "%s don't attend." +msgstr "%s don't attend." + +#: src/Content/Conversation.php:255 +#, php-format +msgid "%2$d people attend maybe" +msgstr "%2$d people attend maybe" + +#: src/Content/Conversation.php:256 +#, php-format +msgid "%s attend maybe." +msgstr "%s may be attending." + +#: src/Content/Conversation.php:259 +#, php-format +msgid "%2$d people reshared this" +msgstr "%2$d people reshared this" + +#: src/Content/Conversation.php:307 +msgid "Visible to everybody" +msgstr "Visible to everybody" + +#: src/Content/Conversation.php:308 src/Module/Item/Compose.php:159 +#: src/Object/Post.php:973 +msgid "Please enter a image/video/audio/webpage URL:" +msgstr "Please enter an image/video/audio/webpage URL:" + +#: src/Content/Conversation.php:309 +msgid "Tag term:" +msgstr "Tag term:" + +#: src/Content/Conversation.php:310 src/Module/Filer/SaveTag.php:68 +msgid "Save to Folder:" +msgstr "Save to folder:" + +#: src/Content/Conversation.php:311 +msgid "Where are you right now?" +msgstr "Where are you right now?" + +#: src/Content/Conversation.php:312 +msgid "Delete item(s)?" +msgstr "Delete item(s)?" + +#: src/Content/Conversation.php:322 +msgid "New Post" +msgstr "New post" + +#: src/Content/Conversation.php:325 +msgid "Share" +msgstr "Share" + +#: src/Content/Conversation.php:331 src/Module/Item/Compose.php:151 +#: src/Object/Post.php:965 +msgid "Bold" +msgstr "Bold" + +#: src/Content/Conversation.php:332 src/Module/Item/Compose.php:152 +#: src/Object/Post.php:966 +msgid "Italic" +msgstr "Italic" + +#: src/Content/Conversation.php:333 src/Module/Item/Compose.php:153 +#: src/Object/Post.php:967 +msgid "Underline" +msgstr "Underline" + +#: src/Content/Conversation.php:334 src/Module/Item/Compose.php:154 +#: src/Object/Post.php:968 +msgid "Quote" +msgstr "Quote" + +#: src/Content/Conversation.php:335 src/Module/Item/Compose.php:155 +#: src/Object/Post.php:969 +msgid "Code" +msgstr "Code" + +#: src/Content/Conversation.php:336 src/Module/Item/Compose.php:156 +#: src/Object/Post.php:970 +msgid "Image" +msgstr "Image" + +#: src/Content/Conversation.php:337 src/Module/Item/Compose.php:157 +#: src/Object/Post.php:971 +msgid "Link" +msgstr "Link" + +#: src/Content/Conversation.php:338 src/Module/Item/Compose.php:158 +#: src/Object/Post.php:972 +msgid "Link or Media" +msgstr "Link or media" + +#: src/Content/Conversation.php:339 +msgid "Video" +msgstr "Video" + +#: src/Content/Conversation.php:352 src/Module/Item/Compose.php:172 +msgid "Scheduled at" +msgstr "Scheduled at" + +#: src/Content/Conversation.php:651 src/Object/Post.php:454 +#: src/Object/Post.php:455 +#, php-format +msgid "View %s's profile @ %s" +msgstr "View %s's profile @ %s" + +#: src/Content/Conversation.php:664 src/Object/Post.php:442 +msgid "Categories:" +msgstr "Categories:" + +#: src/Content/Conversation.php:665 src/Object/Post.php:443 +msgid "Filed under:" +msgstr "Filed under:" + +#: src/Content/Conversation.php:672 src/Object/Post.php:468 +#, php-format +msgid "%s from %s" +msgstr "%s from %s" + +#: src/Content/Conversation.php:687 +msgid "View in context" +msgstr "View in context" + +#: src/Content/Conversation.php:752 +msgid "remove" +msgstr "Remove" + +#: src/Content/Conversation.php:756 +msgid "Delete Selected Items" +msgstr "Delete selected items" + +#: src/Content/Conversation.php:820 src/Content/Conversation.php:823 +#: src/Content/Conversation.php:826 src/Content/Conversation.php:829 +#, php-format +msgid "You had been addressed (%s)." +msgstr "You had been addressed (%s)." + +#: src/Content/Conversation.php:832 +#, php-format +msgid "You are following %s." +msgstr "You are following %s." + +#: src/Content/Conversation.php:835 +msgid "Tagged" +msgstr "Tagged" + +#: src/Content/Conversation.php:850 +msgid "Reshared" +msgstr "Reshared" + +#: src/Content/Conversation.php:850 +#, php-format +msgid "Reshared by %s <%s>" +msgstr "Reshared by %s <%s>" + +#: src/Content/Conversation.php:853 +#, php-format +msgid "%s is participating in this thread." +msgstr "%s is participating in this thread." + +#: src/Content/Conversation.php:856 +msgid "Stored" +msgstr "Stored" + +#: src/Content/Conversation.php:859 +msgid "Global" +msgstr "Global" + +#: src/Content/Conversation.php:862 +msgid "Relayed" +msgstr "Relayed" + +#: src/Content/Conversation.php:862 +#, php-format +msgid "Relayed by %s <%s>" +msgstr "Relayed by %s <%s>" + +#: src/Content/Conversation.php:865 +msgid "Fetched" +msgstr "Fetched" + +#: src/Content/Conversation.php:865 +#, php-format +msgid "Fetched because of %s <%s>" +msgstr "Fetched because of %s <%s>" + #: src/Content/Feature.php:96 msgid "General Features" msgstr "General" @@ -3353,8 +2710,8 @@ msgstr "Display membership date" msgid "Display membership date in profile" msgstr "Display membership date in profile" -#: src/Content/ForumManager.php:145 src/Content/Nav.php:229 -#: src/Content/Text/HTML.php:914 src/Content/Widget.php:533 +#: src/Content/ForumManager.php:145 src/Content/Nav.php:239 +#: src/Content/Text/HTML.php:906 src/Content/Widget.php:523 msgid "Forums" msgstr "Forums" @@ -3362,15 +2719,80 @@ msgstr "Forums" msgid "External link to forum" msgstr "External link to forum" -#: src/Content/ForumManager.php:150 src/Content/Widget.php:512 +#: src/Content/ForumManager.php:150 src/Content/Widget.php:502 msgid "show less" -msgstr "" +msgstr "show less" -#: src/Content/ForumManager.php:151 src/Content/Widget.php:411 -#: src/Content/Widget.php:513 +#: src/Content/ForumManager.php:151 src/Content/Widget.php:404 +#: src/Content/Widget.php:503 msgid "show more" msgstr "Show more..." +#: src/Content/Item.php:305 +#, php-format +msgid "%1$s poked %2$s" +msgstr "%1$s poked %2$s" + +#: src/Content/Item.php:338 src/Model/Item.php:2624 +msgid "event" +msgstr "event" + +#: src/Content/Item.php:442 view/theme/frio/theme.php:254 +msgid "Follow Thread" +msgstr "Follow thread" + +#: src/Content/Item.php:443 src/Model/Contact.php:1077 +msgid "View Status" +msgstr "View status" + +#: src/Content/Item.php:444 src/Content/Item.php:466 +#: src/Model/Contact.php:1011 src/Model/Contact.php:1069 +#: src/Model/Contact.php:1078 src/Module/Directory.php:160 +#: src/Module/Settings/Profile/Index.php:226 +msgid "View Profile" +msgstr "View profile" + +#: src/Content/Item.php:445 src/Model/Contact.php:1079 +msgid "View Photos" +msgstr "View photos" + +#: src/Content/Item.php:446 src/Model/Contact.php:1070 +#: src/Model/Contact.php:1080 +msgid "Network Posts" +msgstr "Network posts" + +#: src/Content/Item.php:447 src/Model/Contact.php:1071 +#: src/Model/Contact.php:1081 +msgid "View Contact" +msgstr "View contact" + +#: src/Content/Item.php:448 src/Model/Contact.php:1082 +msgid "Send PM" +msgstr "Send PM" + +#: src/Content/Item.php:449 src/Module/Admin/Blocklist/Contact.php:100 +#: src/Module/Admin/Users/Active.php:140 src/Module/Admin/Users/Index.php:154 +#: src/Module/Contact.php:544 src/Module/Contact.php:787 +#: src/Module/Contact.php:1064 +msgid "Block" +msgstr "Block" + +#: src/Content/Item.php:450 src/Module/Contact.php:545 +#: src/Module/Contact.php:788 src/Module/Contact.php:1072 +#: src/Module/Notifications/Introductions.php:112 +#: src/Module/Notifications/Introductions.php:184 +#: src/Module/Notifications/Notification.php:61 +msgid "Ignore" +msgstr "Ignore" + +#: src/Content/Item.php:454 src/Object/Post.php:429 +msgid "Languages" +msgstr "Languages" + +#: src/Content/Item.php:458 src/Model/Contact.php:1083 +msgid "Poke" +msgstr "Poke" + #: src/Content/Nav.php:90 msgid "Nothing new here" msgstr "Nothing new here" @@ -3383,92 +2805,89 @@ msgstr "Go back" msgid "Clear notifications" msgstr "Clear notifications" -#: src/Content/Nav.php:96 src/Content/Text/HTML.php:901 +#: src/Content/Nav.php:96 src/Content/Text/HTML.php:893 msgid "@name, !forum, #tags, content" msgstr "@name, !forum, #tags, content" -#: src/Content/Nav.php:169 src/Module/Security/Login.php:141 +#: src/Content/Nav.php:183 src/Module/Security/Login.php:145 msgid "Logout" msgstr "Logout" -#: src/Content/Nav.php:169 +#: src/Content/Nav.php:183 msgid "End this session" msgstr "End this session" -#: src/Content/Nav.php:171 src/Module/Bookmarklet.php:46 -#: src/Module/Security/Login.php:142 +#: src/Content/Nav.php:185 src/Module/Bookmarklet.php:44 +#: src/Module/Security/Login.php:146 msgid "Login" msgstr "Login" -#: src/Content/Nav.php:171 +#: src/Content/Nav.php:185 msgid "Sign in" msgstr "Sign in" -#: src/Content/Nav.php:177 src/Module/BaseProfile.php:60 -#: src/Module/Contact.php:655 src/Module/Contact.php:920 +#: src/Content/Nav.php:190 src/Module/BaseProfile.php:56 +#: src/Module/Contact.php:576 src/Module/Contact.php:822 #: src/Module/Settings/TwoFactor/Index.php:112 view/theme/frio/theme.php:225 msgid "Status" msgstr "Status" -#: src/Content/Nav.php:177 src/Content/Nav.php:263 +#: src/Content/Nav.php:190 src/Content/Nav.php:273 #: view/theme/frio/theme.php:225 msgid "Your posts and conversations" msgstr "My posts and conversations" -#: src/Content/Nav.php:178 src/Module/BaseProfile.php:52 -#: src/Module/BaseSettings.php:57 src/Module/Contact.php:657 -#: src/Module/Contact.php:936 src/Module/Profile/Profile.php:237 +#: src/Content/Nav.php:191 src/Module/BaseProfile.php:48 +#: src/Module/BaseSettings.php:57 src/Module/Contact.php:578 +#: src/Module/Contact.php:846 src/Module/Profile/Profile.php:241 #: src/Module/Welcome.php:57 view/theme/frio/theme.php:226 msgid "Profile" msgstr "Profile" -#: src/Content/Nav.php:178 view/theme/frio/theme.php:226 +#: src/Content/Nav.php:191 view/theme/frio/theme.php:226 msgid "Your profile page" msgstr "My profile page" -#: src/Content/Nav.php:179 view/theme/frio/theme.php:227 +#: src/Content/Nav.php:192 view/theme/frio/theme.php:227 msgid "Your photos" msgstr "My photos" -#: src/Content/Nav.php:180 src/Module/BaseProfile.php:76 -#: src/Module/BaseProfile.php:79 view/theme/frio/theme.php:228 -msgid "Videos" -msgstr "Videos" +#: src/Content/Nav.php:193 src/Module/BaseProfile.php:72 +#: src/Module/BaseProfile.php:75 src/Module/Contact.php:838 +#: view/theme/frio/theme.php:228 +msgid "Media" +msgstr "Media" -#: src/Content/Nav.php:180 view/theme/frio/theme.php:228 -msgid "Your videos" -msgstr "My videos" +#: src/Content/Nav.php:193 view/theme/frio/theme.php:228 +msgid "Your postings with media" +msgstr "Your postings with media" -#: src/Content/Nav.php:181 view/theme/frio/theme.php:229 +#: src/Content/Nav.php:194 view/theme/frio/theme.php:229 msgid "Your events" msgstr "My events" -#: src/Content/Nav.php:182 +#: src/Content/Nav.php:195 msgid "Personal notes" msgstr "Personal notes" -#: src/Content/Nav.php:182 +#: src/Content/Nav.php:195 msgid "Your personal notes" msgstr "My personal notes" -#: src/Content/Nav.php:202 src/Content/Nav.php:263 +#: src/Content/Nav.php:212 src/Content/Nav.php:273 msgid "Home" msgstr "Home" -#: src/Content/Nav.php:202 -msgid "Home Page" -msgstr "Home page" - -#: src/Content/Nav.php:206 src/Module/Register.php:155 -#: src/Module/Security/Login.php:102 +#: src/Content/Nav.php:216 src/Module/Register.php:157 +#: src/Module/Security/Login.php:106 msgid "Register" msgstr "Sign up now >>" -#: src/Content/Nav.php:206 +#: src/Content/Nav.php:216 msgid "Create an account" msgstr "Create account" -#: src/Content/Nav.php:212 src/Module/Help.php:69 +#: src/Content/Nav.php:222 src/Module/Help.php:69 #: src/Module/Settings/TwoFactor/AppSpecific.php:115 #: src/Module/Settings/TwoFactor/Index.php:111 #: src/Module/Settings/TwoFactor/Recovery.php:93 @@ -3476,252 +2895,233 @@ msgstr "Create account" msgid "Help" msgstr "Help" -#: src/Content/Nav.php:212 +#: src/Content/Nav.php:222 msgid "Help and documentation" msgstr "Help and documentation" -#: src/Content/Nav.php:216 +#: src/Content/Nav.php:226 msgid "Apps" msgstr "Apps" -#: src/Content/Nav.php:216 +#: src/Content/Nav.php:226 msgid "Addon applications, utilities, games" msgstr "Addon applications, utilities, games" -#: src/Content/Nav.php:220 src/Content/Text/HTML.php:899 -#: src/Module/Search/Index.php:100 +#: src/Content/Nav.php:230 src/Content/Text/HTML.php:891 +#: src/Module/Admin/Logs/View.php:86 src/Module/Search/Index.php:99 msgid "Search" msgstr "Search" -#: src/Content/Nav.php:220 +#: src/Content/Nav.php:230 msgid "Search site content" msgstr "Search site content" -#: src/Content/Nav.php:223 src/Content/Text/HTML.php:908 +#: src/Content/Nav.php:233 src/Content/Text/HTML.php:900 msgid "Full Text" msgstr "Full text" -#: src/Content/Nav.php:224 src/Content/Text/HTML.php:909 +#: src/Content/Nav.php:234 src/Content/Text/HTML.php:901 #: src/Content/Widget/TagCloud.php:68 msgid "Tags" msgstr "Tags" -#: src/Content/Nav.php:225 src/Content/Nav.php:284 -#: src/Content/Text/HTML.php:910 src/Module/BaseProfile.php:121 -#: src/Module/BaseProfile.php:124 src/Module/Contact.php:855 -#: src/Module/Contact.php:943 view/theme/frio/theme.php:236 +#: src/Content/Nav.php:235 src/Content/Nav.php:294 +#: src/Content/Text/HTML.php:902 src/Module/BaseProfile.php:125 +#: src/Module/BaseProfile.php:128 src/Module/Contact.php:759 +#: src/Module/Contact.php:853 view/theme/frio/theme.php:236 msgid "Contacts" msgstr "Contacts" -#: src/Content/Nav.php:244 +#: src/Content/Nav.php:254 msgid "Community" msgstr "Community" -#: src/Content/Nav.php:244 +#: src/Content/Nav.php:254 msgid "Conversations on this and other servers" msgstr "Conversations on this and other servers" -#: src/Content/Nav.php:248 src/Module/BaseProfile.php:91 -#: src/Module/BaseProfile.php:102 view/theme/frio/theme.php:233 +#: src/Content/Nav.php:258 src/Module/BaseProfile.php:87 +#: src/Module/BaseProfile.php:98 view/theme/frio/theme.php:233 msgid "Events and Calendar" msgstr "Events and calendar" -#: src/Content/Nav.php:251 +#: src/Content/Nav.php:261 msgid "Directory" msgstr "Directory" -#: src/Content/Nav.php:251 +#: src/Content/Nav.php:261 msgid "People directory" msgstr "People directory" -#: src/Content/Nav.php:253 src/Module/BaseAdmin.php:85 +#: src/Content/Nav.php:263 src/Module/BaseAdmin.php:85 msgid "Information" msgstr "Information" -#: src/Content/Nav.php:253 +#: src/Content/Nav.php:263 msgid "Information about this friendica instance" msgstr "Information about this Friendica instance" -#: src/Content/Nav.php:256 src/Module/Admin/Tos.php:59 -#: src/Module/BaseAdmin.php:95 src/Module/Register.php:163 +#: src/Content/Nav.php:266 src/Module/Admin/Tos.php:59 +#: src/Module/BaseAdmin.php:96 src/Module/Register.php:165 #: src/Module/Tos.php:84 msgid "Terms of Service" msgstr "Terms of Service" -#: src/Content/Nav.php:256 +#: src/Content/Nav.php:266 msgid "Terms of Service of this Friendica instance" msgstr "Terms of Service for this Friendica instance" -#: src/Content/Nav.php:261 view/theme/frio/theme.php:232 +#: src/Content/Nav.php:271 view/theme/frio/theme.php:232 msgid "Network" msgstr "Network" -#: src/Content/Nav.php:261 view/theme/frio/theme.php:232 +#: src/Content/Nav.php:271 view/theme/frio/theme.php:232 msgid "Conversations from your friends" msgstr "My friends' conversations" -#: src/Content/Nav.php:267 +#: src/Content/Nav.php:277 msgid "Introductions" msgstr "Introductions" -#: src/Content/Nav.php:267 +#: src/Content/Nav.php:277 msgid "Friend Requests" msgstr "Friend requests" -#: src/Content/Nav.php:268 src/Module/BaseNotifications.php:139 -#: src/Module/Notifications/Introductions.php:54 +#: src/Content/Nav.php:278 src/Module/BaseNotifications.php:139 +#: src/Module/Notifications/Introductions.php:53 msgid "Notifications" msgstr "Notifications" -#: src/Content/Nav.php:269 +#: src/Content/Nav.php:279 msgid "See all notifications" msgstr "See all notifications" -#: src/Content/Nav.php:270 +#: src/Content/Nav.php:280 msgid "Mark all system notifications seen" msgstr "Mark all system notifications seen" -#: src/Content/Nav.php:273 view/theme/frio/theme.php:234 +#: src/Content/Nav.php:283 view/theme/frio/theme.php:234 msgid "Private mail" msgstr "Private messages" -#: src/Content/Nav.php:274 +#: src/Content/Nav.php:284 msgid "Inbox" msgstr "Inbox" -#: src/Content/Nav.php:275 +#: src/Content/Nav.php:285 msgid "Outbox" msgstr "Outbox" -#: src/Content/Nav.php:279 +#: src/Content/Nav.php:289 msgid "Accounts" msgstr "Accounts" -#: src/Content/Nav.php:279 +#: src/Content/Nav.php:289 msgid "Manage other pages" msgstr "Manage other pages" -#: src/Content/Nav.php:282 src/Module/Admin/Addons/Details.php:114 +#: src/Content/Nav.php:292 src/Module/Admin/Addons/Details.php:114 #: src/Module/Admin/Themes/Details.php:93 src/Module/BaseSettings.php:124 #: src/Module/Welcome.php:52 view/theme/frio/theme.php:235 msgid "Settings" msgstr "Settings" -#: src/Content/Nav.php:282 view/theme/frio/theme.php:235 +#: src/Content/Nav.php:292 view/theme/frio/theme.php:235 msgid "Account settings" msgstr "Account settings" -#: src/Content/Nav.php:284 view/theme/frio/theme.php:236 +#: src/Content/Nav.php:294 view/theme/frio/theme.php:236 msgid "Manage/edit friends and contacts" msgstr "Manage/Edit friends and contacts" -#: src/Content/Nav.php:289 src/Module/BaseAdmin.php:125 +#: src/Content/Nav.php:299 src/Module/BaseAdmin.php:126 msgid "Admin" msgstr "Admin" -#: src/Content/Nav.php:289 +#: src/Content/Nav.php:299 msgid "Site setup and configuration" msgstr "Site setup and configuration" -#: src/Content/Nav.php:292 +#: src/Content/Nav.php:302 msgid "Navigation" msgstr "Navigation" -#: src/Content/Nav.php:292 +#: src/Content/Nav.php:302 msgid "Site map" msgstr "Site map" -#: src/Content/OEmbed.php:292 +#: src/Content/OEmbed.php:298 msgid "Embedding disabled" msgstr "Embedding disabled" -#: src/Content/OEmbed.php:410 +#: src/Content/OEmbed.php:416 msgid "Embedded content" msgstr "Embedded content" +#: src/Content/Pager.php:216 +msgid "first" +msgstr "first" + #: src/Content/Pager.php:221 msgid "prev" msgstr "prev" +#: src/Content/Pager.php:276 +msgid "next" +msgstr "next" + #: src/Content/Pager.php:281 msgid "last" msgstr "last" -#: src/Content/Text/BBCode.php:1015 src/Content/Text/BBCode.php:1669 -#: src/Content/Text/BBCode.php:1670 +#: src/Content/Text/BBCode.php:987 src/Content/Text/BBCode.php:1781 +#: src/Content/Text/BBCode.php:1782 msgid "Image/photo" msgstr "Image/Photo" -#: src/Content/Text/BBCode.php:1117 +#: src/Content/Text/BBCode.php:1160 #, php-format msgid "%2$s %3$s" msgstr "%2$s %3$s" -#: src/Content/Text/BBCode.php:1142 src/Model/Item.php:2773 -#: src/Model/Item.php:2779 -msgid "link to source" +#: src/Content/Text/BBCode.php:1185 src/Model/Item.php:3154 +#: src/Model/Item.php:3160 src/Model/Item.php:3161 +msgid "Link to source" msgstr "Link to source" -#: src/Content/Text/BBCode.php:1587 src/Content/Text/HTML.php:951 +#: src/Content/Text/BBCode.php:1699 src/Content/Text/HTML.php:943 msgid "Click to open/close" msgstr "Reveal/hide" -#: src/Content/Text/BBCode.php:1618 +#: src/Content/Text/BBCode.php:1730 msgid "$1 wrote:" msgstr "$1 wrote:" -#: src/Content/Text/BBCode.php:1672 src/Content/Text/BBCode.php:1673 +#: src/Content/Text/BBCode.php:1786 src/Content/Text/BBCode.php:1787 msgid "Encrypted content" msgstr "Encrypted content" -#: src/Content/Text/BBCode.php:1886 +#: src/Content/Text/BBCode.php:2002 msgid "Invalid source protocol" msgstr "Invalid source protocol" -#: src/Content/Text/BBCode.php:1901 +#: src/Content/Text/BBCode.php:2017 msgid "Invalid link protocol" msgstr "Invalid link protocol" -#: src/Content/Text/HTML.php:799 +#: src/Content/Text/HTML.php:807 msgid "Loading more entries..." msgstr "Loading more entries..." -#: src/Content/Text/HTML.php:800 +#: src/Content/Text/HTML.php:808 msgid "The end" msgstr "The end" -#: src/Content/Text/HTML.php:893 src/Model/Profile.php:439 -#: src/Module/Contact.php:340 +#: src/Content/Text/HTML.php:885 src/Content/Widget/VCard.php:103 +#: src/Model/Profile.php:454 msgid "Follow" msgstr "Follow" -#: src/Content/Widget/CalendarExport.php:63 -msgid "Export" -msgstr "Export" - -#: src/Content/Widget/CalendarExport.php:64 -msgid "Export calendar as ical" -msgstr "Export calendar as ical" - -#: src/Content/Widget/CalendarExport.php:65 -msgid "Export calendar as csv" -msgstr "Export calendar as csv" - -#: src/Content/Widget/ContactBlock.php:73 -msgid "No contacts" -msgstr "No contacts" - -#: src/Content/Widget/ContactBlock.php:105 -#, php-format -msgid "%d Contact" -msgid_plural "%d Contacts" -msgstr[0] "%d contact" -msgstr[1] "%d contacts" - -#: src/Content/Widget/ContactBlock.php:124 -msgid "View Contacts" -msgstr "View contacts" - #: src/Content/Widget.php:49 msgid "Add New Contact" msgstr "Add new contact" @@ -3757,8 +3157,8 @@ msgstr "Enter name or interest" msgid "Examples: Robert Morgenstein, Fishing" msgstr "Examples: Robert Morgenstein, fishing" -#: src/Content/Widget.php:78 src/Module/Contact.php:876 -#: src/Module/Directory.php:105 view/theme/vier/theme.php:174 +#: src/Content/Widget.php:78 src/Module/Contact.php:780 +#: src/Module/Directory.php:99 view/theme/vier/theme.php:174 msgid "Find" msgstr "Find" @@ -3774,7 +3174,7 @@ msgstr "Random profile" msgid "Invite Friends" msgstr "Invite friends" -#: src/Content/Widget.php:83 src/Module/Directory.php:97 +#: src/Content/Widget.php:83 src/Module/Directory.php:91 #: view/theme/vier/theme.php:179 msgid "Global Directory" msgstr "Global directory" @@ -3783,70 +3183,97 @@ msgstr "Global directory" msgid "Local Directory" msgstr "Local directory" -#: src/Content/Widget.php:214 src/Model/Group.php:535 -#: src/Module/Contact.php:839 src/Module/Welcome.php:76 +#: src/Content/Widget.php:207 src/Model/Group.php:535 +#: src/Module/Contact.php:743 src/Module/Welcome.php:76 msgid "Groups" msgstr "Groups" -#: src/Content/Widget.php:216 +#: src/Content/Widget.php:209 msgid "Everyone" msgstr "Everyone" -#: src/Content/Widget.php:245 +#: src/Content/Widget.php:238 msgid "Relationships" msgstr "Relationships" -#: src/Content/Widget.php:247 src/Module/Contact.php:791 +#: src/Content/Widget.php:240 src/Module/Contact.php:695 #: src/Module/Group.php:292 msgid "All Contacts" msgstr "All contacts" -#: src/Content/Widget.php:286 +#: src/Content/Widget.php:279 msgid "Protocols" msgstr "Protocols" -#: src/Content/Widget.php:288 +#: src/Content/Widget.php:281 msgid "All Protocols" msgstr "All Protocols" -#: src/Content/Widget.php:316 +#: src/Content/Widget.php:309 msgid "Saved Folders" msgstr "Saved Folders" -#: src/Content/Widget.php:318 src/Content/Widget.php:352 +#: src/Content/Widget.php:311 src/Content/Widget.php:345 msgid "Everything" msgstr "Everything" -#: src/Content/Widget.php:350 +#: src/Content/Widget.php:343 msgid "Categories" msgstr "Categories" -#: src/Content/Widget.php:407 +#: src/Content/Widget.php:400 #, php-format msgid "%d contact in common" msgid_plural "%d contacts in common" msgstr[0] "%d contact in common" msgstr[1] "%d contacts in common" -#: src/Content/Widget.php:506 +#: src/Content/Widget.php:496 msgid "Archives" msgstr "Archives" -#: src/Content/Widget.php:530 +#: src/Content/Widget.php:520 msgid "Persons" -msgstr "" +msgstr "Persons" -#: src/Content/Widget.php:531 +#: src/Content/Widget.php:521 msgid "Organisations" -msgstr "" +msgstr "Organisations" -#: src/Content/Widget.php:532 src/Model/Contact.php:1410 +#: src/Content/Widget.php:522 src/Model/Contact.php:1506 msgid "News" msgstr "News" -#: src/Content/Widget.php:537 src/Module/Admin/BaseUsers.php:50 +#: src/Content/Widget.php:527 src/Module/Admin/BaseUsers.php:50 msgid "All" -msgstr "" +msgstr "All" + +#: src/Content/Widget/CalendarExport.php:54 +msgid "Export" +msgstr "Export" + +#: src/Content/Widget/CalendarExport.php:55 +msgid "Export calendar as ical" +msgstr "Export calendar as ical" + +#: src/Content/Widget/CalendarExport.php:56 +msgid "Export calendar as csv" +msgstr "Export calendar as csv" + +#: src/Content/Widget/ContactBlock.php:79 +msgid "No contacts" +msgstr "No contacts" + +#: src/Content/Widget/ContactBlock.php:108 +#, php-format +msgid "%d Contact" +msgid_plural "%d Contacts" +msgstr[0] "%d contact" +msgstr[1] "%d contacts" + +#: src/Content/Widget/ContactBlock.php:125 +msgid "View Contacts" +msgstr "View contacts" #: src/Content/Widget/SavedSearches.php:47 msgid "Remove term" @@ -3867,582 +3294,626 @@ msgstr[1] "Trending tags (last %d hours)" msgid "More Trending Tags" msgstr "More Trending Tags" -#: src/Core/ACL.php:154 src/Module/Profile/Profile.php:238 +#: src/Content/Widget/VCard.php:96 src/Model/Profile.php:373 +#: src/Module/Contact.php:567 src/Module/Profile/Profile.php:176 +msgid "XMPP:" +msgstr "XMPP:" + +#: src/Content/Widget/VCard.php:97 src/Model/Profile.php:374 +#: src/Module/Contact.php:569 src/Module/Profile/Profile.php:180 +msgid "Matrix:" +msgstr "Matrix:" + +#: src/Content/Widget/VCard.php:101 src/Model/Profile.php:466 +#: src/Module/Notifications/Introductions.php:179 +msgid "Network:" +msgstr "Network:" + +#: src/Content/Widget/VCard.php:105 src/Model/Profile.php:456 +msgid "Unfollow" +msgstr "Unfollow" + +#: src/Core/ACL.php:164 src/Module/Profile/Profile.php:242 msgid "Yourself" msgstr "Yourself" -#: src/Core/ACL.php:190 src/Module/PermissionTooltip.php:83 -#: src/Module/PermissionTooltip.php:105 +#: src/Core/ACL.php:200 src/Module/PermissionTooltip.php:85 +#: src/Module/PermissionTooltip.php:107 msgid "Mutuals" msgstr "Mutuals" -#: src/Core/ACL.php:280 +#: src/Core/ACL.php:292 msgid "Post to Email" msgstr "Post to email" -#: src/Core/ACL.php:307 +#: src/Core/ACL.php:319 msgid "Public" msgstr "Public" -#: src/Core/ACL.php:308 +#: src/Core/ACL.php:320 msgid "" "This content will be shown to all your followers and can be seen in the " "community pages and by anyone with its link." msgstr "This post will be shown to all your followers and can be seen in the community pages and by anyone with its link." -#: src/Core/ACL.php:309 +#: src/Core/ACL.php:321 msgid "Limited/Private" msgstr "Limited/Private" -#: src/Core/ACL.php:310 +#: src/Core/ACL.php:322 msgid "" "This content will be shown only to the people in the first box, to the " "exception of the people mentioned in the second box. It won't appear " "anywhere public." msgstr "This post will be shown only to the people in the first box, to the exception of the people mentioned in the second box. It won't appear anywhere publicly." -#: src/Core/ACL.php:311 +#: src/Core/ACL.php:323 msgid "Show to:" msgstr "Show to:" -#: src/Core/ACL.php:312 +#: src/Core/ACL.php:324 msgid "Except to:" msgstr "Except to:" -#: src/Core/ACL.php:315 +#: src/Core/ACL.php:327 msgid "Connectors" msgstr "Connectors" -#: src/Core/Installer.php:179 +#: src/Core/Installer.php:183 msgid "" "The database configuration file \"config/local.config.php\" could not be " "written. Please use the enclosed text to create a configuration file in your" " web server root." msgstr "The database configuration file \"config/local.config.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root." -#: src/Core/Installer.php:198 +#: src/Core/Installer.php:202 msgid "" "You may need to import the file \"database.sql\" manually using phpmyadmin " "or mysql." msgstr "You may need to import the file \"database.sql\" manually using phpmyadmin or mysql." -#: src/Core/Installer.php:199 src/Module/Install.php:206 +#: src/Core/Installer.php:203 src/Module/Install.php:206 #: src/Module/Install.php:365 msgid "Please see the file \"doc/INSTALL.md\"." -msgstr "" +msgstr "Please see the file \"doc/INSTALL.md\"." -#: src/Core/Installer.php:260 +#: src/Core/Installer.php:264 msgid "Could not find a command line version of PHP in the web server PATH." msgstr "Could not find a command line version of PHP in the web server PATH." -#: src/Core/Installer.php:261 +#: src/Core/Installer.php:265 msgid "" "If you don't have a command line version of PHP installed on your server, " "you will not be able to run the background processing. See 'Setup the worker'" -msgstr "" +msgstr "If you don't have a command line version of PHP installed on your server, you will not be able to run the background processing. See 'Setup the worker'" -#: src/Core/Installer.php:266 +#: src/Core/Installer.php:270 msgid "PHP executable path" msgstr "PHP executable path" -#: src/Core/Installer.php:266 +#: src/Core/Installer.php:270 msgid "" "Enter full path to php executable. You can leave this blank to continue the " "installation." msgstr "Enter full path to php executable. You can leave this blank to continue the installation." -#: src/Core/Installer.php:271 +#: src/Core/Installer.php:275 msgid "Command line PHP" msgstr "Command line PHP" -#: src/Core/Installer.php:280 +#: src/Core/Installer.php:284 msgid "PHP executable is not the php cli binary (could be cgi-fgci version)" msgstr "PHP executable is not a php cli binary; it could possibly be a cgi-fgci version." -#: src/Core/Installer.php:281 +#: src/Core/Installer.php:285 msgid "Found PHP version: " msgstr "Found PHP version: " -#: src/Core/Installer.php:283 +#: src/Core/Installer.php:287 msgid "PHP cli binary" msgstr "PHP cli binary" -#: src/Core/Installer.php:296 +#: src/Core/Installer.php:300 msgid "" "The command line version of PHP on your system does not have " "\"register_argc_argv\" enabled." msgstr "The command line version of PHP on your system does not have \"register_argc_argv\" enabled." -#: src/Core/Installer.php:297 +#: src/Core/Installer.php:301 msgid "This is required for message delivery to work." msgstr "This is required for message delivery to work." -#: src/Core/Installer.php:302 +#: src/Core/Installer.php:306 msgid "PHP register_argc_argv" msgstr "PHP register_argc_argv" -#: src/Core/Installer.php:334 +#: src/Core/Installer.php:338 msgid "" "Error: the \"openssl_pkey_new\" function on this system is not able to " "generate encryption keys" msgstr "Error: the \"openssl_pkey_new\" function on this system is not able to generate encryption keys" -#: src/Core/Installer.php:335 +#: src/Core/Installer.php:339 msgid "" "If running under Windows, please see " "\"http://www.php.net/manual/en/openssl.installation.php\"." msgstr "If running under Windows OS, please see \"http://www.php.net/manual/en/openssl.installation.php\"." -#: src/Core/Installer.php:338 +#: src/Core/Installer.php:342 msgid "Generate encryption keys" msgstr "Generate encryption keys" -#: src/Core/Installer.php:390 +#: src/Core/Installer.php:394 msgid "" "Error: Apache webserver mod-rewrite module is required but not installed." msgstr "Error: Apache web server mod-rewrite module is required but not installed." -#: src/Core/Installer.php:395 +#: src/Core/Installer.php:399 msgid "Apache mod_rewrite module" msgstr "Apache mod_rewrite module" -#: src/Core/Installer.php:401 +#: src/Core/Installer.php:405 msgid "Error: PDO or MySQLi PHP module required but not installed." msgstr "Error: PDO or MySQLi PHP module required but not installed." -#: src/Core/Installer.php:406 +#: src/Core/Installer.php:410 msgid "Error: The MySQL driver for PDO is not installed." msgstr "Error: MySQL driver for PDO is not installed." -#: src/Core/Installer.php:410 +#: src/Core/Installer.php:414 msgid "PDO or MySQLi PHP module" msgstr "PDO or MySQLi PHP module" -#: src/Core/Installer.php:418 +#: src/Core/Installer.php:422 msgid "Error, XML PHP module required but not installed." msgstr "Error, XML PHP module required but not installed." -#: src/Core/Installer.php:422 +#: src/Core/Installer.php:426 msgid "XML PHP module" msgstr "XML PHP module" -#: src/Core/Installer.php:425 +#: src/Core/Installer.php:429 msgid "libCurl PHP module" msgstr "libCurl PHP module" -#: src/Core/Installer.php:426 +#: src/Core/Installer.php:430 msgid "Error: libCURL PHP module required but not installed." msgstr "Error: libCURL PHP module required but not installed." -#: src/Core/Installer.php:432 +#: src/Core/Installer.php:436 msgid "GD graphics PHP module" msgstr "GD graphics PHP module" -#: src/Core/Installer.php:433 +#: src/Core/Installer.php:437 msgid "" "Error: GD graphics PHP module with JPEG support required but not installed." msgstr "Error: GD graphics PHP module with JPEG support required but not installed." -#: src/Core/Installer.php:439 +#: src/Core/Installer.php:443 msgid "OpenSSL PHP module" msgstr "OpenSSL PHP module" -#: src/Core/Installer.php:440 +#: src/Core/Installer.php:444 msgid "Error: openssl PHP module required but not installed." msgstr "Error: openssl PHP module required but not installed." -#: src/Core/Installer.php:446 +#: src/Core/Installer.php:450 msgid "mb_string PHP module" msgstr "mb_string PHP module" -#: src/Core/Installer.php:447 +#: src/Core/Installer.php:451 msgid "Error: mb_string PHP module required but not installed." msgstr "Error: mb_string PHP module required but not installed." -#: src/Core/Installer.php:453 +#: src/Core/Installer.php:457 msgid "iconv PHP module" msgstr "iconv PHP module" -#: src/Core/Installer.php:454 +#: src/Core/Installer.php:458 msgid "Error: iconv PHP module required but not installed." msgstr "Error: iconv PHP module required but not installed." -#: src/Core/Installer.php:460 +#: src/Core/Installer.php:464 msgid "POSIX PHP module" msgstr "POSIX PHP module" -#: src/Core/Installer.php:461 +#: src/Core/Installer.php:465 msgid "Error: POSIX PHP module required but not installed." msgstr "Error: POSIX PHP module required but not installed." -#: src/Core/Installer.php:467 +#: src/Core/Installer.php:471 msgid "Program execution functions" -msgstr "" +msgstr "Program execution functions" -#: src/Core/Installer.php:468 -msgid "Error: Program execution functions required but not enabled." -msgstr "" +#: src/Core/Installer.php:472 +msgid "" +"Error: Program execution functions (proc_open) required but not enabled." +msgstr "Error: Program execution functions (proc_open) required but not enabled." -#: src/Core/Installer.php:474 +#: src/Core/Installer.php:478 msgid "JSON PHP module" msgstr "JSON PHP module" -#: src/Core/Installer.php:475 +#: src/Core/Installer.php:479 msgid "Error: JSON PHP module required but not installed." msgstr "Error: JSON PHP module is required but not installed." -#: src/Core/Installer.php:481 +#: src/Core/Installer.php:485 msgid "File Information PHP module" msgstr "File Information PHP module" -#: src/Core/Installer.php:482 +#: src/Core/Installer.php:486 msgid "Error: File Information PHP module required but not installed." msgstr "Error: File Information PHP module required but not installed." -#: src/Core/Installer.php:505 +#: src/Core/Installer.php:509 msgid "" "The web installer needs to be able to create a file called " "\"local.config.php\" in the \"config\" folder of your web server and it is " "unable to do so." msgstr "The web installer needs to be able to create a file called \"local.config.php\" in the \"config\" folder of your web server but is unable to do so." -#: src/Core/Installer.php:506 +#: src/Core/Installer.php:510 msgid "" "This is most often a permission setting, as the web server may not be able " "to write files in your folder - even if you can." msgstr "This is most often a permission setting issue, as the web server may not be able to write files in your directory - even if you can." -#: src/Core/Installer.php:507 +#: src/Core/Installer.php:511 msgid "" "At the end of this procedure, we will give you a text to save in a file " "named local.config.php in your Friendica \"config\" folder." msgstr "At the end of this procedure, we will give you a text to save in a file named local.config.php in your Friendica \"config\" folder." -#: src/Core/Installer.php:508 +#: src/Core/Installer.php:512 msgid "" "You can alternatively skip this procedure and perform a manual installation." " Please see the file \"doc/INSTALL.md\" for instructions." -msgstr "" +msgstr "You can alternatively skip this procedure and perform a manual installation. Please see the file \"doc/INSTALL.md\" for instructions." -#: src/Core/Installer.php:511 +#: src/Core/Installer.php:515 msgid "config/local.config.php is writable" msgstr "config/local.config.php is writable" -#: src/Core/Installer.php:531 +#: src/Core/Installer.php:535 msgid "" "Friendica uses the Smarty3 template engine to render its web views. Smarty3 " "compiles templates to PHP to speed up rendering." msgstr "Friendica uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering." -#: src/Core/Installer.php:532 +#: src/Core/Installer.php:536 msgid "" "In order to store these compiled templates, the web server needs to have " "write access to the directory view/smarty3/ under the Friendica top level " "folder." msgstr "In order to store these compiled templates, the web server needs to have write access to the directory view/smarty3/ under the Friendica top-level directory." -#: src/Core/Installer.php:533 +#: src/Core/Installer.php:537 msgid "" "Please ensure that the user that your web server runs as (e.g. www-data) has" " write access to this folder." msgstr "Please ensure the user (e.g. www-data) that your web server runs as has write access to this directory." -#: src/Core/Installer.php:534 +#: src/Core/Installer.php:538 msgid "" "Note: as a security measure, you should give the web server write access to " "view/smarty3/ only--not the template files (.tpl) that it contains." msgstr "Note: as a security measure, you should give the web server write access to view/smarty3/ only--not the template files (.tpl) that it contains." -#: src/Core/Installer.php:537 +#: src/Core/Installer.php:541 msgid "view/smarty3 is writable" msgstr "view/smarty3 is writeable" -#: src/Core/Installer.php:565 +#: src/Core/Installer.php:569 msgid "" "Url rewrite in .htaccess seems not working. Make sure you copied .htaccess-" "dist to .htaccess." -msgstr "" +msgstr "Url rewrite in .htaccess seems not working. Make sure you copied .htaccess-dist to .htaccess." -#: src/Core/Installer.php:566 +#: src/Core/Installer.php:570 msgid "" "In some circumstances (like running inside containers), you can skip this " "error." -msgstr "" +msgstr "In some situations like running inside a container, you can skip this error." -#: src/Core/Installer.php:568 +#: src/Core/Installer.php:572 msgid "Error message from Curl when fetching" msgstr "Error message from Curl while fetching" -#: src/Core/Installer.php:574 +#: src/Core/Installer.php:578 msgid "Url rewrite is working" msgstr "URL rewrite is working" -#: src/Core/Installer.php:603 +#: src/Core/Installer.php:607 +msgid "" +"The detection of TLS to secure the communication between the browser and the" +" new Friendica server failed." +msgstr "Failed to detect TLS that secures the communication between the browser and the new Friendica server." + +#: src/Core/Installer.php:608 +msgid "" +"It is highly encouraged to use Friendica only over a secure connection as " +"sensitive information like passwords will be transmitted." +msgstr "It's highly encouraged using Friendica only over a secure connection as sensitive information like passwords will be transmitted." + +#: src/Core/Installer.php:609 +msgid "Please ensure that the connection to the server is secure." +msgstr "Please ensure that the connection to the server is secure." + +#: src/Core/Installer.php:610 +msgid "No TLS detected" +msgstr "No TLS detected" + +#: src/Core/Installer.php:612 +msgid "TLS detected" +msgstr "TLS detected" + +#: src/Core/Installer.php:639 msgid "ImageMagick PHP extension is not installed" msgstr "ImageMagick PHP extension is not installed" -#: src/Core/Installer.php:605 +#: src/Core/Installer.php:641 msgid "ImageMagick PHP extension is installed" msgstr "ImageMagick PHP extension is installed" -#: src/Core/Installer.php:607 +#: src/Core/Installer.php:643 msgid "ImageMagick supports GIF" msgstr "ImageMagick supports GIF" -#: src/Core/Installer.php:629 +#: src/Core/Installer.php:665 msgid "Database already in use." msgstr "Database already in use." -#: src/Core/Installer.php:634 +#: src/Core/Installer.php:670 msgid "Could not connect to database." msgstr "Could not connect to database." -#: src/Core/L10n.php:371 src/Model/Event.php:432 -#: src/Module/Settings/Display.php:178 +#: src/Core/L10n.php:377 src/Model/Event.php:425 +#: src/Module/Settings/Display.php:183 msgid "Monday" msgstr "Monday" -#: src/Core/L10n.php:371 src/Model/Event.php:433 +#: src/Core/L10n.php:377 src/Model/Event.php:426 msgid "Tuesday" msgstr "Tuesday" -#: src/Core/L10n.php:371 src/Model/Event.php:434 +#: src/Core/L10n.php:377 src/Model/Event.php:427 msgid "Wednesday" msgstr "Wednesday" -#: src/Core/L10n.php:371 src/Model/Event.php:435 +#: src/Core/L10n.php:377 src/Model/Event.php:428 msgid "Thursday" msgstr "Thursday" -#: src/Core/L10n.php:371 src/Model/Event.php:436 +#: src/Core/L10n.php:377 src/Model/Event.php:429 msgid "Friday" msgstr "Friday" -#: src/Core/L10n.php:371 src/Model/Event.php:437 +#: src/Core/L10n.php:377 src/Model/Event.php:430 msgid "Saturday" msgstr "Saturday" -#: src/Core/L10n.php:371 src/Model/Event.php:431 -#: src/Module/Settings/Display.php:178 +#: src/Core/L10n.php:377 src/Model/Event.php:424 +#: src/Module/Settings/Display.php:183 msgid "Sunday" msgstr "Sunday" -#: src/Core/L10n.php:375 src/Model/Event.php:452 +#: src/Core/L10n.php:381 src/Model/Event.php:445 msgid "January" msgstr "January" -#: src/Core/L10n.php:375 src/Model/Event.php:453 +#: src/Core/L10n.php:381 src/Model/Event.php:446 msgid "February" msgstr "February" -#: src/Core/L10n.php:375 src/Model/Event.php:454 +#: src/Core/L10n.php:381 src/Model/Event.php:447 msgid "March" msgstr "March" -#: src/Core/L10n.php:375 src/Model/Event.php:455 +#: src/Core/L10n.php:381 src/Model/Event.php:448 msgid "April" msgstr "April" -#: src/Core/L10n.php:375 src/Core/L10n.php:395 src/Model/Event.php:443 +#: src/Core/L10n.php:381 src/Core/L10n.php:401 src/Model/Event.php:436 msgid "May" msgstr "May" -#: src/Core/L10n.php:375 src/Model/Event.php:456 +#: src/Core/L10n.php:381 src/Model/Event.php:449 msgid "June" msgstr "June" -#: src/Core/L10n.php:375 src/Model/Event.php:457 +#: src/Core/L10n.php:381 src/Model/Event.php:450 msgid "July" msgstr "July" -#: src/Core/L10n.php:375 src/Model/Event.php:458 +#: src/Core/L10n.php:381 src/Model/Event.php:451 msgid "August" msgstr "August" -#: src/Core/L10n.php:375 src/Model/Event.php:459 +#: src/Core/L10n.php:381 src/Model/Event.php:452 msgid "September" msgstr "September" -#: src/Core/L10n.php:375 src/Model/Event.php:460 +#: src/Core/L10n.php:381 src/Model/Event.php:453 msgid "October" msgstr "October" -#: src/Core/L10n.php:375 src/Model/Event.php:461 +#: src/Core/L10n.php:381 src/Model/Event.php:454 msgid "November" msgstr "November" -#: src/Core/L10n.php:375 src/Model/Event.php:462 +#: src/Core/L10n.php:381 src/Model/Event.php:455 msgid "December" msgstr "December" -#: src/Core/L10n.php:391 src/Model/Event.php:424 +#: src/Core/L10n.php:397 src/Model/Event.php:417 msgid "Mon" msgstr "Mon" -#: src/Core/L10n.php:391 src/Model/Event.php:425 +#: src/Core/L10n.php:397 src/Model/Event.php:418 msgid "Tue" msgstr "Tue" -#: src/Core/L10n.php:391 src/Model/Event.php:426 +#: src/Core/L10n.php:397 src/Model/Event.php:419 msgid "Wed" msgstr "Wed" -#: src/Core/L10n.php:391 src/Model/Event.php:427 +#: src/Core/L10n.php:397 src/Model/Event.php:420 msgid "Thu" msgstr "Thu" -#: src/Core/L10n.php:391 src/Model/Event.php:428 +#: src/Core/L10n.php:397 src/Model/Event.php:421 msgid "Fri" msgstr "Fri" -#: src/Core/L10n.php:391 src/Model/Event.php:429 +#: src/Core/L10n.php:397 src/Model/Event.php:422 msgid "Sat" msgstr "Sat" -#: src/Core/L10n.php:391 src/Model/Event.php:423 +#: src/Core/L10n.php:397 src/Model/Event.php:416 msgid "Sun" msgstr "Sun" -#: src/Core/L10n.php:395 src/Model/Event.php:439 +#: src/Core/L10n.php:401 src/Model/Event.php:432 msgid "Jan" msgstr "Jan" -#: src/Core/L10n.php:395 src/Model/Event.php:440 +#: src/Core/L10n.php:401 src/Model/Event.php:433 msgid "Feb" msgstr "Feb" -#: src/Core/L10n.php:395 src/Model/Event.php:441 +#: src/Core/L10n.php:401 src/Model/Event.php:434 msgid "Mar" msgstr "Mar" -#: src/Core/L10n.php:395 src/Model/Event.php:442 +#: src/Core/L10n.php:401 src/Model/Event.php:435 msgid "Apr" msgstr "Apr" -#: src/Core/L10n.php:395 src/Model/Event.php:444 +#: src/Core/L10n.php:401 src/Model/Event.php:437 msgid "Jun" msgstr "Jun" -#: src/Core/L10n.php:395 src/Model/Event.php:445 +#: src/Core/L10n.php:401 src/Model/Event.php:438 msgid "Jul" msgstr "Jul" -#: src/Core/L10n.php:395 src/Model/Event.php:446 +#: src/Core/L10n.php:401 src/Model/Event.php:439 msgid "Aug" msgstr "Aug" -#: src/Core/L10n.php:395 +#: src/Core/L10n.php:401 msgid "Sep" msgstr "Sep" -#: src/Core/L10n.php:395 src/Model/Event.php:448 +#: src/Core/L10n.php:401 src/Model/Event.php:441 msgid "Oct" msgstr "Oct" -#: src/Core/L10n.php:395 src/Model/Event.php:449 +#: src/Core/L10n.php:401 src/Model/Event.php:442 msgid "Nov" msgstr "Nov" -#: src/Core/L10n.php:395 src/Model/Event.php:450 +#: src/Core/L10n.php:401 src/Model/Event.php:443 msgid "Dec" msgstr "Dec" -#: src/Core/L10n.php:414 +#: src/Core/L10n.php:420 msgid "poke" msgstr "poke" -#: src/Core/L10n.php:414 +#: src/Core/L10n.php:420 msgid "poked" msgstr "poked" -#: src/Core/L10n.php:415 +#: src/Core/L10n.php:421 msgid "ping" msgstr "ping" -#: src/Core/L10n.php:415 +#: src/Core/L10n.php:421 msgid "pinged" msgstr "pinged" -#: src/Core/L10n.php:416 +#: src/Core/L10n.php:422 msgid "prod" msgstr "prod" -#: src/Core/L10n.php:416 +#: src/Core/L10n.php:422 msgid "prodded" msgstr "prodded" -#: src/Core/L10n.php:417 +#: src/Core/L10n.php:423 msgid "slap" msgstr "slap" -#: src/Core/L10n.php:417 +#: src/Core/L10n.php:423 msgid "slapped" msgstr "slapped" -#: src/Core/L10n.php:418 +#: src/Core/L10n.php:424 msgid "finger" msgstr "finger" -#: src/Core/L10n.php:418 +#: src/Core/L10n.php:424 msgid "fingered" msgstr "fingered" -#: src/Core/L10n.php:419 +#: src/Core/L10n.php:425 msgid "rebuff" msgstr "rebuff" -#: src/Core/L10n.php:419 +#: src/Core/L10n.php:425 msgid "rebuffed" msgstr "rebuffed" -#: src/Core/Renderer.php:90 src/Core/Renderer.php:119 -#: src/Core/Renderer.php:146 src/Core/Renderer.php:180 +#: src/Core/Renderer.php:89 src/Core/Renderer.php:118 +#: src/Core/Renderer.php:145 src/Core/Renderer.php:179 #: src/Render/FriendicaSmartyEngine.php:56 msgid "" "Friendica can't display this page at the moment, please contact the " "administrator." -msgstr "" +msgstr "Friendica can't display this page at the moment, please contact the administrator." -#: src/Core/Renderer.php:142 +#: src/Core/Renderer.php:141 msgid "template engine cannot be registered without a name." -msgstr "" +msgstr "template engine cannot be registered without a name." -#: src/Core/Renderer.php:176 +#: src/Core/Renderer.php:175 msgid "template engine is not registered!" -msgstr "" +msgstr "template engine is not registered!" #: src/Core/Update.php:67 #, php-format msgid "" "Updates from version %s are not supported. Please update at least to version" " 2021.01 and wait until the postupdate finished version 1383." -msgstr "" +msgstr "Updates from version %s are not supported. Please update at least to version 2021.01 and wait until the postupdate finished version 1383." #: src/Core/Update.php:78 #, php-format msgid "" "Updates from postupdate version %s are not supported. Please update at least" " to version 2021.01 and wait until the postupdate finished version 1383." -msgstr "" +msgstr "Updates from postupdate version %s are not supported. Please update at least to version 2021.01 and wait until the postupdate finished version 1383." #: src/Core/Update.php:152 #, php-format msgid "%s: executing pre update %d" -msgstr "" +msgstr "%s: executing pre update %d" #: src/Core/Update.php:190 #, php-format msgid "%s: executing post update %d" -msgstr "" +msgstr "%s: executing post update %d" -#: src/Core/Update.php:259 +#: src/Core/Update.php:261 #, php-format msgid "Update %s failed. See error logs." msgstr "Update %s failed. See error logs." -#: src/Core/Update.php:312 +#: src/Core/Update.php:314 #, php-format msgid "" "\n" @@ -4452,81 +3923,81 @@ msgid "" "\t\t\t\tfriendica developer if you can not help me on your own. My database might be invalid." msgstr "\n\t\t\t\tThe friendica developers released update %s recently,\n\t\t\t\tbut when I tried to install it, something went terribly wrong.\n\t\t\t\tThis needs to be fixed soon and I can't do it alone. Please contact a\n\t\t\t\tfriendica developer if you can not help me on your own. My database might be invalid." -#: src/Core/Update.php:318 +#: src/Core/Update.php:320 #, php-format msgid "The error message is\\n[pre]%s[/pre]" -msgstr "" +msgstr "The error message is\\n[pre]%s[/pre]" -#: src/Core/Update.php:322 src/Core/Update.php:364 +#: src/Core/Update.php:324 src/Core/Update.php:366 msgid "[Friendica Notify] Database update" msgstr "[Friendica Notify] Database update" -#: src/Core/Update.php:358 +#: src/Core/Update.php:360 #, php-format msgid "" "\n" "\t\t\t\t\tThe friendica database was successfully updated from %s to %s." msgstr "\n\t\t\t\t\tThe friendica database was successfully updated from %s to %s." -#: src/Core/UserImport.php:126 +#: src/Core/UserImport.php:125 msgid "Error decoding account file" msgstr "Error decoding account file" -#: src/Core/UserImport.php:132 +#: src/Core/UserImport.php:131 msgid "Error! No version data in file! This is not a Friendica account file?" msgstr "Error! No version data in file! Is this a Friendica account file?" -#: src/Core/UserImport.php:140 +#: src/Core/UserImport.php:139 #, php-format msgid "User '%s' already exists on this server!" msgstr "User '%s' already exists on this server!" -#: src/Core/UserImport.php:176 +#: src/Core/UserImport.php:175 msgid "User creation error" msgstr "User creation error" -#: src/Core/UserImport.php:221 +#: src/Core/UserImport.php:220 #, php-format msgid "%d contact not imported" msgid_plural "%d contacts not imported" msgstr[0] "%d contact not imported" msgstr[1] "%d contacts not imported" -#: src/Core/UserImport.php:274 +#: src/Core/UserImport.php:273 msgid "User profile creation error" msgstr "User profile creation error" -#: src/Core/UserImport.php:330 +#: src/Core/UserImport.php:326 msgid "Done. You can now login with your username and password" msgstr "Done. You can now login with your username and password" -#: src/Database/DBStructure.php:64 +#: src/Database/DBStructure.php:65 #, php-format msgid "The database version had been set to %s." -msgstr "" +msgstr "The database version had been set to %s." -#: src/Database/DBStructure.php:77 +#: src/Database/DBStructure.php:78 #, php-format msgid "" "The post update is at version %d, it has to be at %d to safely drop the " "tables." -msgstr "" +msgstr "The post update is at version %d, it has to be at %d to safely drop the tables." -#: src/Database/DBStructure.php:89 +#: src/Database/DBStructure.php:91 msgid "No unused tables found." -msgstr "" +msgstr "No unused tables found." -#: src/Database/DBStructure.php:94 +#: src/Database/DBStructure.php:96 msgid "" "These tables are not used for friendica and will be deleted when you execute" " \"dbstructure drop -e\":" msgstr "" -#: src/Database/DBStructure.php:132 +#: src/Database/DBStructure.php:134 msgid "There are no tables on MyISAM or InnoDB with the Antelope file format." msgstr "There are no tables on MyISAM or InnoDB with the Antelope file format." -#: src/Database/DBStructure.php:156 +#: src/Database/DBStructure.php:158 #, php-format msgid "" "\n" @@ -4534,230 +4005,198 @@ msgid "" "%s\n" msgstr "\nError %d occurred during database update:\n%s\n" -#: src/Database/DBStructure.php:159 +#: src/Database/DBStructure.php:161 msgid "Errors encountered performing database changes: " msgstr "Errors encountered performing database changes: " -#: src/Database/DBStructure.php:436 +#: src/Database/DBStructure.php:549 msgid "Another database update is currently running." msgstr "" -#: src/Database/DBStructure.php:440 +#: src/Database/DBStructure.php:553 #, php-format msgid "%s: Database update" msgstr "%s: Database update" -#: src/Database/DBStructure.php:740 +#: src/Database/DBStructure.php:803 #, php-format msgid "%s: updating %s table." msgstr "%s: updating %s table." -#: src/Factory/Api/Mastodon/Error.php:32 +#: src/Factory/Api/Mastodon/Error.php:55 msgid "Record not found" msgstr "" -#: src/Factory/Notification/Introduction.php:135 -msgid "Friend Suggestion" -msgstr "Friend suggestion" +#: src/Factory/Api/Mastodon/Error.php:65 +msgid "Unprocessable Entity" +msgstr "" -#: src/Factory/Notification/Introduction.php:161 -msgid "Friend/Connect Request" -msgstr "Friend/Contact request" +#: src/Factory/Api/Mastodon/Error.php:75 +#: src/Module/Special/HTTPException.php:50 +msgid "Unauthorized" +msgstr "Unauthorized" -#: src/Factory/Notification/Introduction.php:161 -msgid "New Follower" -msgstr "New follower" +#: src/Factory/Api/Mastodon/Error.php:85 +msgid "" +"Token is not authorized with a valid user or is missing a required scope" +msgstr "" -#: src/Factory/Notification/Notification.php:103 -#, php-format -msgid "%s created a new post" -msgstr "%s posted something new" - -#: src/Factory/Notification/Notification.php:104 -#: src/Factory/Notification/Notification.php:362 -#, php-format -msgid "%s commented on %s's post" -msgstr "%s commented on %s's post" - -#: src/Factory/Notification/Notification.php:130 -#, php-format -msgid "%s liked %s's post" -msgstr "%s liked %s's post" - -#: src/Factory/Notification/Notification.php:141 -#, php-format -msgid "%s disliked %s's post" -msgstr "%s disliked %s's post" - -#: src/Factory/Notification/Notification.php:152 -#, php-format -msgid "%s is attending %s's event" -msgstr "%s is going to %s's event" - -#: src/Factory/Notification/Notification.php:163 -#, php-format -msgid "%s is not attending %s's event" -msgstr "%s is not going to %s's event" - -#: src/Factory/Notification/Notification.php:174 -#, php-format -msgid "%s may attending %s's event" -msgstr "%s may attending %s's event" - -#: src/Factory/Notification/Notification.php:201 -#, php-format -msgid "%s is now friends with %s" -msgstr "%s is now friends with %s" +#: src/Factory/Api/Mastodon/Error.php:95 +#: src/Module/Special/HTTPException.php:53 +msgid "Internal Server Error" +msgstr "Internal Server Error" #: src/LegacyModule.php:49 #, php-format msgid "Legacy module file not found: %s" msgstr "Legacy module file not found: %s" -#: src/Model/Contact.php:982 src/Model/Contact.php:995 +#: src/Model/Contact.php:1073 src/Model/Contact.php:1085 msgid "UnFollow" msgstr "Unfollow" -#: src/Model/Contact.php:991 -msgid "Drop Contact" -msgstr "Drop contact" - -#: src/Model/Contact.php:1001 src/Module/Admin/Users/Pending.php:107 -#: src/Module/Notifications/Introductions.php:111 -#: src/Module/Notifications/Introductions.php:189 +#: src/Model/Contact.php:1091 src/Module/Admin/Users/Pending.php:107 +#: src/Module/Notifications/Introductions.php:110 +#: src/Module/Notifications/Introductions.php:182 msgid "Approve" msgstr "Approve" -#: src/Model/Contact.php:1406 +#: src/Model/Contact.php:1502 msgid "Organisation" msgstr "Organisation" -#: src/Model/Contact.php:1414 +#: src/Model/Contact.php:1510 msgid "Forum" msgstr "Forum" -#: src/Model/Contact.php:2169 +#: src/Model/Contact.php:2380 +msgid "Disallowed profile URL." +msgstr "Disallowed profile URL." + +#: src/Model/Contact.php:2385 src/Module/Friendica.php:81 +msgid "Blocked domain" +msgstr "Blocked domain" + +#: src/Model/Contact.php:2390 msgid "Connect URL missing." msgstr "Connect URL missing." -#: src/Model/Contact.php:2178 +#: src/Model/Contact.php:2399 msgid "" "The contact could not be added. Please check the relevant network " "credentials in your Settings -> Social Networks page." msgstr "The contact could not be added. Please check the relevant network credentials in your Settings -> Social Networks page." -#: src/Model/Contact.php:2219 -msgid "" -"This site is not configured to allow communications with other networks." -msgstr "This site is not configured to allow communications with other networks." - -#: src/Model/Contact.php:2220 src/Model/Contact.php:2233 -msgid "No compatible communication protocols or feeds were discovered." -msgstr "No compatible communication protocols or feeds were discovered." - -#: src/Model/Contact.php:2231 +#: src/Model/Contact.php:2436 msgid "The profile address specified does not provide adequate information." msgstr "The profile address specified does not provide adequate information." -#: src/Model/Contact.php:2236 +#: src/Model/Contact.php:2438 +msgid "No compatible communication protocols or feeds were discovered." +msgstr "No compatible communication protocols or feeds were discovered." + +#: src/Model/Contact.php:2441 msgid "An author or name was not found." msgstr "An author or name was not found." -#: src/Model/Contact.php:2239 +#: src/Model/Contact.php:2444 msgid "No browser URL could be matched to this address." msgstr "No browser URL could be matched to this address." -#: src/Model/Contact.php:2242 +#: src/Model/Contact.php:2447 msgid "" "Unable to match @-style Identity Address with a known protocol or email " "contact." msgstr "Unable to match @-style identity address with a known protocol or email contact." -#: src/Model/Contact.php:2243 +#: src/Model/Contact.php:2448 msgid "Use mailto: in front of address to force email check." msgstr "Use mailto: in front of address to force email check." -#: src/Model/Contact.php:2249 +#: src/Model/Contact.php:2454 msgid "" "The profile address specified belongs to a network which has been disabled " "on this site." msgstr "The profile address specified belongs to a network which has been disabled on this site." -#: src/Model/Contact.php:2254 +#: src/Model/Contact.php:2459 msgid "" "Limited profile. This person will be unable to receive direct/personal " "notifications from you." msgstr "Limited profile: This person will be unable to receive direct/private messages from you." -#: src/Model/Contact.php:2313 +#: src/Model/Contact.php:2518 msgid "Unable to retrieve contact information." msgstr "Unable to retrieve contact information." -#: src/Model/Event.php:50 src/Model/Event.php:872 -#: src/Module/Debug/Localtime.php:36 -msgid "l F d, Y \\@ g:i A" -msgstr "l F d, Y \\@ g:i A" +#: src/Model/Event.php:52 +msgid "l F d, Y \\@ g:i A \\G\\M\\TP (e)" +msgstr "" -#: src/Model/Event.php:77 src/Model/Event.php:94 src/Model/Event.php:471 -#: src/Model/Event.php:942 +#: src/Model/Event.php:73 src/Model/Event.php:90 src/Model/Event.php:464 +#: src/Model/Event.php:897 msgid "Starts:" msgstr "Starts:" -#: src/Model/Event.php:80 src/Model/Event.php:100 src/Model/Event.php:472 -#: src/Model/Event.php:946 +#: src/Model/Event.php:76 src/Model/Event.php:96 src/Model/Event.php:465 +#: src/Model/Event.php:901 msgid "Finishes:" msgstr "Finishes:" -#: src/Model/Event.php:421 +#: src/Model/Event.php:414 msgid "all-day" msgstr "All-day" -#: src/Model/Event.php:447 +#: src/Model/Event.php:440 msgid "Sept" msgstr "Sep" -#: src/Model/Event.php:469 +#: src/Model/Event.php:462 msgid "No events to display" msgstr "No events to display" -#: src/Model/Event.php:588 +#: src/Model/Event.php:578 msgid "l, F j" msgstr "l, F j" -#: src/Model/Event.php:619 +#: src/Model/Event.php:609 msgid "Edit event" msgstr "Edit event" -#: src/Model/Event.php:620 +#: src/Model/Event.php:610 msgid "Duplicate event" msgstr "Duplicate event" -#: src/Model/Event.php:621 +#: src/Model/Event.php:611 msgid "Delete event" msgstr "Delete event" -#: src/Model/Event.php:873 +#: src/Model/Event.php:853 src/Module/Debug/Localtime.php:38 +msgid "l F d, Y \\@ g:i A" +msgstr "l F d, Y \\@ g:i A" + +#: src/Model/Event.php:854 msgid "D g:i A" msgstr "D g:i A" -#: src/Model/Event.php:874 +#: src/Model/Event.php:855 msgid "g:i A" msgstr "g:i A" -#: src/Model/Event.php:961 src/Model/Event.php:963 +#: src/Model/Event.php:916 src/Model/Event.php:918 msgid "Show map" msgstr "Show map" -#: src/Model/Event.php:962 +#: src/Model/Event.php:917 msgid "Hide map" msgstr "Hide map" -#: src/Model/Event.php:1054 +#: src/Model/Event.php:1009 #, php-format msgid "%s's birthday" msgstr "%s's birthday" -#: src/Model/Event.php:1055 +#: src/Model/Event.php:1010 #, php-format msgid "Happy Birthday %s" msgstr "Happy Birthday, %s!" @@ -4806,287 +4245,330 @@ msgstr "Group name: " msgid "Edit groups" msgstr "Edit groups" -#: src/Model/Item.php:1556 +#: src/Model/Item.php:1677 #, php-format msgid "Detected languages in this post:\\n%s" msgstr "" -#: src/Model/Item.php:2501 +#: src/Model/Item.php:2628 msgid "activity" msgstr "activity" -#: src/Model/Item.php:2503 src/Object/Post.php:545 +#: src/Model/Item.php:2630 msgid "comment" -msgid_plural "comments" -msgstr[0] "comment" -msgstr[1] "comments" +msgstr "" -#: src/Model/Item.php:2506 +#: src/Model/Item.php:2633 msgid "post" msgstr "post" -#: src/Model/Item.php:2620 +#: src/Model/Item.php:2770 #, php-format msgid "Content warning: %s" msgstr "Content warning: %s" -#: src/Model/Item.php:2734 +#: src/Model/Item.php:3119 msgid "bytes" msgstr "bytes" -#: src/Model/Item.php:2767 +#: src/Model/Item.php:3148 src/Model/Item.php:3149 msgid "View on separate page" msgstr "View on separate page" -#: src/Model/Item.php:2768 -msgid "view on separate page" -msgstr "view on separate page" - -#: src/Model/Mail.php:120 src/Model/Mail.php:258 +#: src/Model/Mail.php:134 src/Model/Mail.php:266 msgid "[no subject]" msgstr "[no subject]" -#: src/Model/Profile.php:346 src/Module/Profile/Profile.php:252 -#: src/Module/Profile/Profile.php:254 +#: src/Model/Profile.php:356 src/Module/Profile/Profile.php:256 +#: src/Module/Profile/Profile.php:258 msgid "Edit profile" msgstr "Edit profile" -#: src/Model/Profile.php:348 +#: src/Model/Profile.php:358 msgid "Change profile photo" msgstr "Change profile photo" -#: src/Model/Profile.php:361 src/Module/Directory.php:161 -#: src/Module/Profile/Profile.php:180 +#: src/Model/Profile.php:371 src/Module/Directory.php:155 +#: src/Module/Profile/Profile.php:184 msgid "Homepage:" msgstr "Homepage:" -#: src/Model/Profile.php:362 src/Module/Contact.php:650 -#: src/Module/Notifications/Introductions.php:174 +#: src/Model/Profile.php:372 src/Module/Contact.php:571 +#: src/Module/Notifications/Introductions.php:167 msgid "About:" msgstr "About:" -#: src/Model/Profile.php:363 src/Module/Contact.php:648 -#: src/Module/Profile/Profile.php:176 -msgid "XMPP:" -msgstr "XMPP:" - -#: src/Model/Profile.php:441 src/Module/Contact.php:342 -msgid "Unfollow" -msgstr "Unfollow" - -#: src/Model/Profile.php:443 +#: src/Model/Profile.php:458 msgid "Atom feed" msgstr "Atom feed" -#: src/Model/Profile.php:451 src/Module/Contact.php:338 -#: src/Module/Notifications/Introductions.php:186 -msgid "Network:" -msgstr "Network:" - -#: src/Model/Profile.php:481 src/Model/Profile.php:578 +#: src/Model/Profile.php:496 src/Model/Profile.php:593 msgid "g A l F d" msgstr "g A l F d" -#: src/Model/Profile.php:482 +#: src/Model/Profile.php:497 msgid "F d" msgstr "F d" -#: src/Model/Profile.php:544 src/Model/Profile.php:629 +#: src/Model/Profile.php:559 src/Model/Profile.php:644 msgid "[today]" msgstr "[today]" -#: src/Model/Profile.php:554 +#: src/Model/Profile.php:569 msgid "Birthday Reminders" msgstr "Birthday reminders" -#: src/Model/Profile.php:555 +#: src/Model/Profile.php:570 msgid "Birthdays this week:" msgstr "Birthdays this week:" -#: src/Model/Profile.php:616 +#: src/Model/Profile.php:631 msgid "[No description]" msgstr "[No description]" -#: src/Model/Profile.php:642 +#: src/Model/Profile.php:657 msgid "Event Reminders" msgstr "Event reminders" -#: src/Model/Profile.php:643 +#: src/Model/Profile.php:658 msgid "Upcoming events the next 7 days:" msgstr "Upcoming events the next 7 days:" -#: src/Model/Profile.php:818 +#: src/Model/Profile.php:846 #, php-format msgid "OpenWebAuth: %1$s welcomes %2$s" msgstr "OpenWebAuth: %1$s welcomes %2$s" -#: src/Model/Storage/Database.php:74 -#, php-format -msgid "Database storage failed to update %s" -msgstr "Database storage failed to update %s" +#: src/Model/Profile.php:978 +msgid "Hometown:" +msgstr "Home town:" -#: src/Model/Storage/Database.php:82 -msgid "Database storage failed to insert data" -msgstr "Database storage failed to insert data" +#: src/Model/Profile.php:979 +msgid "Marital Status:" +msgstr "Marital Status:" -#: src/Model/Storage/Filesystem.php:100 -#, php-format -msgid "Filesystem storage failed to create \"%s\". Check you write permissions." -msgstr "Filesystem storage failed to create \"%s\". Check you write permissions." +#: src/Model/Profile.php:980 +msgid "With:" +msgstr "With:" -#: src/Model/Storage/Filesystem.php:148 -#, php-format -msgid "" -"Filesystem storage failed to save data to \"%s\". Check your write " -"permissions" -msgstr "Filesystem storage failed to save data to \"%s\". Check your write permissions" +#: src/Model/Profile.php:981 +msgid "Since:" +msgstr "Since:" -#: src/Model/Storage/Filesystem.php:176 +#: src/Model/Profile.php:982 +msgid "Sexual Preference:" +msgstr "Sexual preference:" + +#: src/Model/Profile.php:983 +msgid "Political Views:" +msgstr "Political views:" + +#: src/Model/Profile.php:984 +msgid "Religious Views:" +msgstr "Religious views:" + +#: src/Model/Profile.php:985 +msgid "Likes:" +msgstr "Likes:" + +#: src/Model/Profile.php:986 +msgid "Dislikes:" +msgstr "Dislikes:" + +#: src/Model/Profile.php:987 +msgid "Title/Description:" +msgstr "Title/Description:" + +#: src/Model/Profile.php:988 src/Module/Admin/Summary.php:234 +msgid "Summary" +msgstr "Summary" + +#: src/Model/Profile.php:989 +msgid "Musical interests" +msgstr "Music:" + +#: src/Model/Profile.php:990 +msgid "Books, literature" +msgstr "Books, literature, poetry:" + +#: src/Model/Profile.php:991 +msgid "Television" +msgstr "Television:" + +#: src/Model/Profile.php:992 +msgid "Film/dance/culture/entertainment" +msgstr "Film, dance, culture, entertainment" + +#: src/Model/Profile.php:993 +msgid "Hobbies/Interests" +msgstr "Hobbies/Interests:" + +#: src/Model/Profile.php:994 +msgid "Love/romance" +msgstr "Love/Romance:" + +#: src/Model/Profile.php:995 +msgid "Work/employment" +msgstr "Work/Employment:" + +#: src/Model/Profile.php:996 +msgid "School/education" +msgstr "School/Education:" + +#: src/Model/Profile.php:997 +msgid "Contact information and Social Networks" +msgstr "Contact information and other social networks:" + +#: src/Model/Storage/FilesystemConfig.php:77 msgid "Storage base path" msgstr "Storage base path" -#: src/Model/Storage/Filesystem.php:178 +#: src/Model/Storage/FilesystemConfig.php:79 msgid "" "Folder where uploaded files are saved. For maximum security, This should be " "a path outside web server folder tree" msgstr "Folder where uploaded files are saved. For maximum security, this should be a path outside web server folder tree" -#: src/Model/Storage/Filesystem.php:191 +#: src/Model/Storage/FilesystemConfig.php:92 msgid "Enter a valid existing folder" msgstr "Enter a valid existing folder" -#: src/Model/User.php:186 src/Model/User.php:931 +#: src/Model/User.php:208 src/Model/User.php:1050 msgid "SERIOUS ERROR: Generation of security keys failed." msgstr "SERIOUS ERROR: Generation of security keys failed." -#: src/Model/User.php:549 +#: src/Model/User.php:589 src/Model/User.php:622 msgid "Login failed" msgstr "Login failed" -#: src/Model/User.php:581 +#: src/Model/User.php:654 msgid "Not enough information to authenticate" msgstr "Not enough information to authenticate" -#: src/Model/User.php:676 +#: src/Model/User.php:749 msgid "Password can't be empty" msgstr "Password can't be empty" -#: src/Model/User.php:695 +#: src/Model/User.php:768 msgid "Empty passwords are not allowed." msgstr "Empty passwords are not allowed." -#: src/Model/User.php:699 +#: src/Model/User.php:772 msgid "" "The new password has been exposed in a public data dump, please choose " "another." msgstr "The new password has been exposed in a public data dump; please choose another." -#: src/Model/User.php:705 +#: src/Model/User.php:778 msgid "" "The password can't contain accentuated letters, white spaces or colons (:)" msgstr "The password can't contain accentuated letters, white spaces or colons" -#: src/Model/User.php:811 +#: src/Model/User.php:930 msgid "Passwords do not match. Password unchanged." msgstr "Passwords do not match. Password unchanged." -#: src/Model/User.php:818 +#: src/Model/User.php:937 msgid "An invitation is required." msgstr "An invitation is required." -#: src/Model/User.php:822 +#: src/Model/User.php:941 msgid "Invitation could not be verified." msgstr "Invitation could not be verified." -#: src/Model/User.php:830 +#: src/Model/User.php:949 msgid "Invalid OpenID url" msgstr "Invalid OpenID URL" -#: src/Model/User.php:843 src/Security/Authentication.php:223 +#: src/Model/User.php:962 src/Security/Authentication.php:223 msgid "" "We encountered a problem while logging in with the OpenID you provided. " "Please check the correct spelling of the ID." msgstr "We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID." -#: src/Model/User.php:843 src/Security/Authentication.php:223 +#: src/Model/User.php:962 src/Security/Authentication.php:223 msgid "The error message was:" msgstr "The error message was:" -#: src/Model/User.php:849 +#: src/Model/User.php:968 msgid "Please enter the required information." msgstr "Please enter the required information." -#: src/Model/User.php:863 +#: src/Model/User.php:982 #, php-format msgid "" "system.username_min_length (%s) and system.username_max_length (%s) are " "excluding each other, swapping values." msgstr "system.username_min_length (%s) and system.username_max_length (%s) are excluding each other, swapping values." -#: src/Model/User.php:870 +#: src/Model/User.php:989 #, php-format msgid "Username should be at least %s character." msgid_plural "Username should be at least %s characters." msgstr[0] "Username should be at least %s character." msgstr[1] "Username should be at least %s characters." -#: src/Model/User.php:874 +#: src/Model/User.php:993 #, php-format msgid "Username should be at most %s character." msgid_plural "Username should be at most %s characters." msgstr[0] "Username should be at most %s character." msgstr[1] "Username should be at most %s characters." -#: src/Model/User.php:882 +#: src/Model/User.php:1001 msgid "That doesn't appear to be your full (First Last) name." msgstr "That doesn't appear to be your full (i.e first and last) name." -#: src/Model/User.php:887 +#: src/Model/User.php:1006 msgid "Your email domain is not among those allowed on this site." msgstr "Your email domain is not allowed on this site." -#: src/Model/User.php:891 +#: src/Model/User.php:1010 msgid "Not a valid email address." msgstr "Not a valid email address." -#: src/Model/User.php:894 +#: src/Model/User.php:1013 msgid "The nickname was blocked from registration by the nodes admin." msgstr "The nickname was blocked from registration by the nodes admin." -#: src/Model/User.php:898 src/Model/User.php:906 +#: src/Model/User.php:1017 src/Model/User.php:1025 msgid "Cannot use that email." msgstr "Cannot use that email." -#: src/Model/User.php:913 +#: src/Model/User.php:1032 msgid "Your nickname can only contain a-z, 0-9 and _." msgstr "Your nickname can only contain a-z, 0-9 and _." -#: src/Model/User.php:921 src/Model/User.php:978 +#: src/Model/User.php:1040 src/Model/User.php:1097 msgid "Nickname is already registered. Please choose another." msgstr "Nickname is already registered. Please choose another." -#: src/Model/User.php:965 src/Model/User.php:969 +#: src/Model/User.php:1084 src/Model/User.php:1088 msgid "An error occurred during registration. Please try again." msgstr "An error occurred during registration. Please try again." -#: src/Model/User.php:992 +#: src/Model/User.php:1111 msgid "An error occurred creating your default profile. Please try again." msgstr "An error occurred creating your default profile. Please try again." -#: src/Model/User.php:999 +#: src/Model/User.php:1118 msgid "An error occurred creating your self contact. Please try again." msgstr "An error occurred creating your self-contact. Please try again." -#: src/Model/User.php:1004 +#: src/Model/User.php:1123 msgid "Friends" msgstr "Friends" -#: src/Model/User.php:1008 +#: src/Model/User.php:1127 msgid "" "An error occurred creating your default contact group. Please try again." msgstr "An error occurred while creating your default contact group. Please try again." -#: src/Model/User.php:1199 +#: src/Model/User.php:1165 +msgid "Profile Photos" +msgstr "Profile photos" + +#: src/Model/User.php:1359 #, php-format msgid "" "\n" @@ -5094,7 +4576,7 @@ msgid "" "\t\t\tthe administrator of %2$s has set up an account for you." msgstr "\n\t\tDear %1$s,\n\t\t\tThe administrator of %2$s has set up an account for you." -#: src/Model/User.php:1202 +#: src/Model/User.php:1362 #, php-format msgid "" "\n" @@ -5126,12 +4608,12 @@ msgid "" "\t\tThank you and welcome to %4$s." msgstr "\n\t\tThe login details are as follows:\n\n\t\tSite Location:\t%1$s\n\t\tLogin Name:\t\t%2$s\n\t\tPassword:\t\t%3$s\n\n\t\tYou may change your password from your account \"Settings\" page after logging\n\t\tin.\n\n\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\tYou may also wish to add some basic information to your default profile\n\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\tWe recommend setting your full name, adding a profile photo,\n\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\tthan that.\n\n\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\tIf you are new and do not know anybody here, they may help\n\t\tyou to make some new and interesting friends.\n\n\t\tIf you ever want to delete your account, you can do so at %1$s/removeme\n\n\t\tThank you and welcome to %4$s." -#: src/Model/User.php:1235 src/Model/User.php:1342 +#: src/Model/User.php:1395 src/Model/User.php:1502 #, php-format msgid "Registration details for %s" msgstr "Registration details for %s" -#: src/Model/User.php:1255 +#: src/Model/User.php:1415 #, php-format msgid "" "\n" @@ -5146,12 +4628,12 @@ msgid "" "\t\t" msgstr "\n\t\t\tDear %1$s,\n\t\t\t\tThank you for registering at %2$s. Your account is pending for approval by the administrator.\n\n\t\t\tYour login details are as follows:\n\n\t\t\tSite Location:\t%3$s\n\t\t\tLogin Name:\t\t%4$s\n\t\t\tPassword:\t\t%5$s\n\t\t" -#: src/Model/User.php:1274 +#: src/Model/User.php:1434 #, php-format msgid "Registration at %s" msgstr "Registration at %s" -#: src/Model/User.php:1298 +#: src/Model/User.php:1458 #, php-format msgid "" "\n" @@ -5160,7 +4642,7 @@ msgid "" "\t\t\t" msgstr "\n\t\t\t\tDear %1$s,\n\t\t\t\tThank you for registering at %2$s. Your account has been created.\n\t\t\t" -#: src/Model/User.php:1306 +#: src/Model/User.php:1466 #, php-format msgid "" "\n" @@ -5218,12 +4700,13 @@ msgstr "Enable" #: src/Module/Admin/Addons/Details.php:111 #: src/Module/Admin/Addons/Index.php:67 -#: src/Module/Admin/Blocklist/Contact.php:78 +#: src/Module/Admin/Blocklist/Contact.php:94 #: src/Module/Admin/Blocklist/Server.php:88 -#: src/Module/Admin/Federation.php:141 src/Module/Admin/Item/Delete.php:65 -#: src/Module/Admin/Logs/Settings.php:80 src/Module/Admin/Logs/View.php:64 -#: src/Module/Admin/Queue.php:72 src/Module/Admin/Site.php:579 -#: src/Module/Admin/Summary.php:232 src/Module/Admin/Themes/Details.php:90 +#: src/Module/Admin/Federation.php:159 src/Module/Admin/Item/Delete.php:65 +#: src/Module/Admin/Logs/Settings.php:80 src/Module/Admin/Logs/View.php:83 +#: src/Module/Admin/Queue.php:72 src/Module/Admin/Site.php:499 +#: src/Module/Admin/Storage.php:139 src/Module/Admin/Summary.php:233 +#: src/Module/Admin/Themes/Details.php:90 #: src/Module/Admin/Themes/Index.php:111 src/Module/Admin/Tos.php:58 #: src/Module/Admin/Users/Active.php:136 #: src/Module/Admin/Users/Blocked.php:137 src/Module/Admin/Users/Create.php:61 @@ -5233,7 +4716,7 @@ msgid "Administration" msgstr "Administration" #: src/Module/Admin/Addons/Details.php:112 -#: src/Module/Admin/Addons/Index.php:68 src/Module/BaseAdmin.php:92 +#: src/Module/Admin/Addons/Index.php:68 src/Module/BaseAdmin.php:93 #: src/Module/BaseSettings.php:87 msgid "Addons" msgstr "Addons" @@ -5286,8 +4769,8 @@ msgstr "" msgid "List of active accounts" msgstr "" -#: src/Module/Admin/BaseUsers.php:66 src/Module/Contact.php:799 -#: src/Module/Contact.php:859 +#: src/Module/Admin/BaseUsers.php:66 src/Module/Contact.php:703 +#: src/Module/Contact.php:763 msgid "Pending" msgstr "Pending" @@ -5295,8 +4778,8 @@ msgstr "Pending" msgid "List of pending registrations" msgstr "" -#: src/Module/Admin/BaseUsers.php:74 src/Module/Contact.php:807 -#: src/Module/Contact.php:860 +#: src/Module/Admin/BaseUsers.php:74 src/Module/Contact.php:711 +#: src/Module/Contact.php:764 msgid "Blocked" msgstr "Blocked" @@ -5320,77 +4803,91 @@ msgstr "Private Forum" msgid "Relay" msgstr "Relay" -#: src/Module/Admin/Blocklist/Contact.php:57 +#: src/Module/Admin/Blocklist/Contact.php:54 +msgid "You can't block a local contact, please block the user instead" +msgstr "" + +#: src/Module/Admin/Blocklist/Contact.php:73 #, php-format msgid "%s contact unblocked" msgid_plural "%s contacts unblocked" msgstr[0] "%s contact unblocked" msgstr[1] "%s contacts unblocked" -#: src/Module/Admin/Blocklist/Contact.php:79 +#: src/Module/Admin/Blocklist/Contact.php:95 msgid "Remote Contact Blocklist" msgstr "Remote contact block-list" -#: src/Module/Admin/Blocklist/Contact.php:80 +#: src/Module/Admin/Blocklist/Contact.php:96 msgid "" "This page allows you to prevent any message from a remote contact to reach " "your node." msgstr "This page allows you to prevent any message from a remote contact to reach your node." -#: src/Module/Admin/Blocklist/Contact.php:81 +#: src/Module/Admin/Blocklist/Contact.php:97 msgid "Block Remote Contact" msgstr "Block Remote Contact" -#: src/Module/Admin/Blocklist/Contact.php:82 +#: src/Module/Admin/Blocklist/Contact.php:98 #: src/Module/Admin/Users/Active.php:138 #: src/Module/Admin/Users/Blocked.php:139 src/Module/Admin/Users/Index.php:151 #: src/Module/Admin/Users/Pending.php:103 msgid "select all" msgstr "select all" -#: src/Module/Admin/Blocklist/Contact.php:83 +#: src/Module/Admin/Blocklist/Contact.php:99 msgid "select none" msgstr "select none" -#: src/Module/Admin/Blocklist/Contact.php:85 +#: src/Module/Admin/Blocklist/Contact.php:101 #: src/Module/Admin/Users/Blocked.php:142 src/Module/Admin/Users/Index.php:156 -#: src/Module/Contact.php:625 src/Module/Contact.php:883 -#: src/Module/Contact.php:1165 +#: src/Module/Contact.php:544 src/Module/Contact.php:787 +#: src/Module/Contact.php:1064 msgid "Unblock" msgstr "Unblock" -#: src/Module/Admin/Blocklist/Contact.php:86 +#: src/Module/Admin/Blocklist/Contact.php:102 msgid "No remote contact is blocked from this node." msgstr "No remote contact is blocked from this node." -#: src/Module/Admin/Blocklist/Contact.php:88 +#: src/Module/Admin/Blocklist/Contact.php:104 msgid "Blocked Remote Contacts" msgstr "Blocked remote contacts" -#: src/Module/Admin/Blocklist/Contact.php:89 +#: src/Module/Admin/Blocklist/Contact.php:105 msgid "Block New Remote Contact" msgstr "Block new remote contact" -#: src/Module/Admin/Blocklist/Contact.php:90 +#: src/Module/Admin/Blocklist/Contact.php:106 msgid "Photo" msgstr "Photo" -#: src/Module/Admin/Blocklist/Contact.php:90 +#: src/Module/Admin/Blocklist/Contact.php:106 msgid "Reason" msgstr "Reason" -#: src/Module/Admin/Blocklist/Contact.php:98 +#: src/Module/Admin/Blocklist/Contact.php:114 #, php-format msgid "%s total blocked contact" msgid_plural "%s total blocked contacts" msgstr[0] "%s total blocked contact" msgstr[1] "%s total blocked contacts" -#: src/Module/Admin/Blocklist/Contact.php:100 +#: src/Module/Admin/Blocklist/Contact.php:116 msgid "URL of the remote contact to block." msgstr "URL of the remote contact to block." -#: src/Module/Admin/Blocklist/Contact.php:101 +#: src/Module/Admin/Blocklist/Contact.php:117 +msgid "Also purge contact" +msgstr "" + +#: src/Module/Admin/Blocklist/Contact.php:117 +msgid "" +"Removes all content related to this contact from the node. Keeps the contact" +" record. This action canoot be undone." +msgstr "" + +#: src/Module/Admin/Blocklist/Contact.php:118 msgid "Block Reason" msgstr "Reason for blocking" @@ -5404,7 +4901,7 @@ msgid "Blocked server domain pattern" msgstr "Blocked server domain pattern" #: src/Module/Admin/Blocklist/Server.php:80 -#: src/Module/Admin/Blocklist/Server.php:105 src/Module/Friendica.php:81 +#: src/Module/Admin/Blocklist/Server.php:105 src/Module/Friendica.php:82 msgid "Reason for the block" msgstr "Reason for the block" @@ -5554,26 +5051,26 @@ msgstr "Lock feature %s" msgid "Manage Additional Features" msgstr "Manage additional features" -#: src/Module/Admin/Federation.php:54 +#: src/Module/Admin/Federation.php:56 msgid "Other" msgstr "Other" -#: src/Module/Admin/Federation.php:108 src/Module/Admin/Federation.php:268 +#: src/Module/Admin/Federation.php:118 src/Module/Admin/Federation.php:348 msgid "unknown" msgstr "unknown" -#: src/Module/Admin/Federation.php:136 +#: src/Module/Admin/Federation.php:154 msgid "" "This page offers you some numbers to the known part of the federated social " "network your Friendica node is part of. These numbers are not complete but " "only reflect the part of the network your node is aware of." msgstr "This page offers you the amount of known part of the federated social network your Friendica node is part of. These numbers are not complete and only reflect the part of the network your node is aware of." -#: src/Module/Admin/Federation.php:142 src/Module/BaseAdmin.php:87 +#: src/Module/Admin/Federation.php:160 src/Module/BaseAdmin.php:87 msgid "Federation Statistics" msgstr "Federation statistics" -#: src/Module/Admin/Federation.php:146 +#: src/Module/Admin/Federation.php:164 #, php-format msgid "" "Currently this node is aware of %d nodes with %d registered users from the " @@ -5584,7 +5081,7 @@ msgstr "Currently this node is aware of %d nodes with %d registered users from t msgid "Item marked for deletion." msgstr "Item marked for deletion." -#: src/Module/Admin/Item/Delete.php:66 src/Module/BaseAdmin.php:105 +#: src/Module/Admin/Item/Delete.php:66 src/Module/BaseAdmin.php:106 msgid "Delete Item" msgstr "Delete item" @@ -5613,7 +5110,7 @@ msgstr "GUID" msgid "The GUID of the item you want to delete." msgstr "GUID of item to be deleted." -#: src/Module/Admin/Item/Source.php:57 src/Module/BaseAdmin.php:115 +#: src/Module/Admin/Item/Source.php:57 src/Module/BaseAdmin.php:116 msgid "Item Source" msgstr "Item source" @@ -5658,7 +5155,7 @@ msgstr "" msgid "Implicit Mention" msgstr "" -#: src/Module/Admin/Item/Source.php:73 +#: src/Module/Admin/Item/Source.php:73 src/Module/Admin/Logs/View.php:98 #: src/Module/Debug/ActivityPubConversion.php:62 msgid "Source" msgstr "" @@ -5676,8 +5173,8 @@ msgstr "PHP log currently enabled." msgid "PHP log currently disabled." msgstr "PHP log currently disabled." -#: src/Module/Admin/Logs/Settings.php:81 src/Module/BaseAdmin.php:107 -#: src/Module/BaseAdmin.php:108 +#: src/Module/Admin/Logs/Settings.php:81 src/Module/BaseAdmin.php:108 +#: src/Module/BaseAdmin.php:109 msgid "Logs" msgstr "Logs" @@ -5716,24 +5213,85 @@ msgid "" "'display_errors' is to enable these options, set to '0' to disable them." msgstr "To temporarily enable logging of PHP errors and warnings you can prepend the following to the index.php file of your installation. The filename set in the 'error_log' line is relative to the friendica top-level directory and must be writeable by the web server. The option '1' for 'log_errors' and 'display_errors' is to enable these options, set to '0' to disable them." -#: src/Module/Admin/Logs/View.php:40 +#: src/Module/Admin/Logs/View.php:70 #, php-format msgid "" -"Error trying to open %1$s log file.\\r\\n
Check to see " -"if file %1$s exist and is readable." -msgstr "Error trying to open %1$s log file.\\r\\n
Check to see if file %1$s exist and is readable." +"Error trying to open %1$s log file.
Check to see if " +"file %1$s exist and is readable." +msgstr "" -#: src/Module/Admin/Logs/View.php:44 +#: src/Module/Admin/Logs/View.php:79 #, php-format msgid "" -"Couldn't open %1$s log file.\\r\\n
Check to see if file" -" %1$s is readable." -msgstr "Couldn't open %1$s log file.\\r\\n
Check if file %1$s is readable." +"Couldn't open %1$s log file.
Check to see if file %1$s " +"is readable." +msgstr "" -#: src/Module/Admin/Logs/View.php:65 src/Module/BaseAdmin.php:109 +#: src/Module/Admin/Logs/View.php:84 src/Module/BaseAdmin.php:110 msgid "View Logs" msgstr "View logs" +#: src/Module/Admin/Logs/View.php:87 +msgid "Search in logs" +msgstr "" + +#: src/Module/Admin/Logs/View.php:88 +#: src/Module/Notifications/Notifications.php:126 +msgid "Show all" +msgstr "Show all" + +#: src/Module/Admin/Logs/View.php:89 +msgid "Date" +msgstr "" + +#: src/Module/Admin/Logs/View.php:90 +msgid "Level" +msgstr "" + +#: src/Module/Admin/Logs/View.php:91 +msgid "Context" +msgstr "" + +#: src/Module/Admin/Logs/View.php:93 +msgid "ALL" +msgstr "" + +#: src/Module/Admin/Logs/View.php:94 +msgid "View details" +msgstr "" + +#: src/Module/Admin/Logs/View.php:95 +msgid "Click to view details" +msgstr "" + +#: src/Module/Admin/Logs/View.php:97 +msgid "Data" +msgstr "" + +#: src/Module/Admin/Logs/View.php:99 +msgid "File" +msgstr "" + +#: src/Module/Admin/Logs/View.php:100 +msgid "Line" +msgstr "" + +#: src/Module/Admin/Logs/View.php:101 +msgid "Function" +msgstr "" + +#: src/Module/Admin/Logs/View.php:102 +msgid "UID" +msgstr "" + +#: src/Module/Admin/Logs/View.php:103 +msgid "Process ID" +msgstr "" + +#: src/Module/Admin/Logs/View.php:104 +msgid "Close" +msgstr "" + #: src/Module/Admin/Queue.php:50 msgid "Inspect Deferred Worker Queue" msgstr "Inspect Deferred Worker Queue" @@ -5759,479 +5317,472 @@ msgid "ID" msgstr "ID" #: src/Module/Admin/Queue.php:76 +msgid "Command" +msgstr "" + +#: src/Module/Admin/Queue.php:77 msgid "Job Parameters" msgstr "Job Parameters" -#: src/Module/Admin/Queue.php:77 -msgid "Created" -msgstr "Created" - -#: src/Module/Admin/Queue.php:78 +#: src/Module/Admin/Queue.php:79 msgid "Priority" msgstr "Priority" -#: src/Module/Admin/Site.php:69 +#: src/Module/Admin/Site.php:70 msgid "Can not parse base url. Must have at least ://" msgstr "Can not parse base URL. Must have at least ://" -#: src/Module/Admin/Site.php:123 +#: src/Module/Admin/Site.php:124 msgid "Relocation started. Could take a while to complete." msgstr "" -#: src/Module/Admin/Site.php:249 -msgid "Invalid storage backend setting value." -msgstr "Invalid storage backend settings." - -#: src/Module/Admin/Site.php:449 src/Module/Settings/Display.php:134 +#: src/Module/Admin/Site.php:404 src/Module/Settings/Display.php:139 msgid "No special theme for mobile devices" msgstr "No special theme for mobile devices" -#: src/Module/Admin/Site.php:466 src/Module/Settings/Display.php:144 +#: src/Module/Admin/Site.php:421 src/Module/Settings/Display.php:149 #, php-format msgid "%s - (Experimental)" msgstr "%s - (Experimental)" -#: src/Module/Admin/Site.php:478 +#: src/Module/Admin/Site.php:433 msgid "No community page for local users" msgstr "No community page for local users" -#: src/Module/Admin/Site.php:479 +#: src/Module/Admin/Site.php:434 msgid "No community page" msgstr "No community page" -#: src/Module/Admin/Site.php:480 +#: src/Module/Admin/Site.php:435 msgid "Public postings from users of this site" msgstr "Public postings from users of this site" -#: src/Module/Admin/Site.php:481 +#: src/Module/Admin/Site.php:436 msgid "Public postings from the federated network" msgstr "Public postings from the federated network" -#: src/Module/Admin/Site.php:482 +#: src/Module/Admin/Site.php:437 msgid "Public postings from local users and the federated network" msgstr "Public postings from local users and the federated network" -#: src/Module/Admin/Site.php:488 +#: src/Module/Admin/Site.php:443 msgid "Multi user instance" msgstr "Multi user instance" -#: src/Module/Admin/Site.php:516 +#: src/Module/Admin/Site.php:470 msgid "Closed" msgstr "Closed" -#: src/Module/Admin/Site.php:517 +#: src/Module/Admin/Site.php:471 msgid "Requires approval" msgstr "Requires approval" -#: src/Module/Admin/Site.php:518 +#: src/Module/Admin/Site.php:472 msgid "Open" msgstr "Open" -#: src/Module/Admin/Site.php:522 src/Module/Install.php:215 +#: src/Module/Admin/Site.php:476 src/Module/Install.php:215 msgid "No SSL policy, links will track page SSL state" msgstr "No SSL policy, links will track page SSL state" -#: src/Module/Admin/Site.php:523 src/Module/Install.php:216 +#: src/Module/Admin/Site.php:477 src/Module/Install.php:216 msgid "Force all links to use SSL" msgstr "Force all links to use SSL" -#: src/Module/Admin/Site.php:524 src/Module/Install.php:217 +#: src/Module/Admin/Site.php:478 src/Module/Install.php:217 msgid "Self-signed certificate, use SSL for local links only (discouraged)" msgstr "Self-signed certificate, use SSL for local links only (discouraged)" -#: src/Module/Admin/Site.php:528 +#: src/Module/Admin/Site.php:482 msgid "Don't check" msgstr "Don't check" -#: src/Module/Admin/Site.php:529 +#: src/Module/Admin/Site.php:483 msgid "check the stable version" msgstr "check for stable version updates" -#: src/Module/Admin/Site.php:530 +#: src/Module/Admin/Site.php:484 msgid "check the development version" msgstr "check for development version updates" -#: src/Module/Admin/Site.php:534 +#: src/Module/Admin/Site.php:488 msgid "none" msgstr "none" -#: src/Module/Admin/Site.php:535 +#: src/Module/Admin/Site.php:489 msgid "Local contacts" msgstr "" -#: src/Module/Admin/Site.php:536 +#: src/Module/Admin/Site.php:490 msgid "Interactors" msgstr "" -#: src/Module/Admin/Site.php:549 -msgid "Database (legacy)" -msgstr "Database (legacy)" - -#: src/Module/Admin/Site.php:580 src/Module/BaseAdmin.php:90 +#: src/Module/Admin/Site.php:500 src/Module/BaseAdmin.php:90 msgid "Site" msgstr "Site" -#: src/Module/Admin/Site.php:581 +#: src/Module/Admin/Site.php:501 msgid "General Information" msgstr "" -#: src/Module/Admin/Site.php:583 +#: src/Module/Admin/Site.php:503 msgid "Republish users to directory" msgstr "Republish users to directory" -#: src/Module/Admin/Site.php:584 src/Module/Register.php:139 +#: src/Module/Admin/Site.php:504 src/Module/Register.php:141 msgid "Registration" msgstr "Join this Friendica Node Today" -#: src/Module/Admin/Site.php:585 +#: src/Module/Admin/Site.php:505 msgid "File upload" msgstr "File upload" -#: src/Module/Admin/Site.php:586 +#: src/Module/Admin/Site.php:506 msgid "Policies" msgstr "Policies" -#: src/Module/Admin/Site.php:588 +#: src/Module/Admin/Site.php:508 msgid "Auto Discovered Contact Directory" msgstr "Auto-discovered contact directory" -#: src/Module/Admin/Site.php:589 +#: src/Module/Admin/Site.php:509 msgid "Performance" msgstr "Performance" -#: src/Module/Admin/Site.php:590 +#: src/Module/Admin/Site.php:510 msgid "Worker" msgstr "Worker" -#: src/Module/Admin/Site.php:591 +#: src/Module/Admin/Site.php:511 msgid "Message Relay" msgstr "Message relay" -#: src/Module/Admin/Site.php:592 +#: src/Module/Admin/Site.php:512 +msgid "" +"Use the command \"console relay\" in the command line to add or remove " +"relays." +msgstr "" + +#: src/Module/Admin/Site.php:513 +msgid "The system is not subscribed to any relays at the moment." +msgstr "" + +#: src/Module/Admin/Site.php:514 +msgid "The system is currently subscribed to the following relays:" +msgstr "" + +#: src/Module/Admin/Site.php:516 msgid "Relocate Instance" msgstr "Relocate Instance" -#: src/Module/Admin/Site.php:593 +#: src/Module/Admin/Site.php:517 msgid "" "Warning! Advanced function. Could make this server " "unreachable." msgstr "Warning! Advanced function. Could make this server unreachable." -#: src/Module/Admin/Site.php:597 +#: src/Module/Admin/Site.php:521 msgid "Site name" msgstr "Site name" -#: src/Module/Admin/Site.php:598 +#: src/Module/Admin/Site.php:522 msgid "Sender Email" msgstr "Sender email" -#: src/Module/Admin/Site.php:598 +#: src/Module/Admin/Site.php:522 msgid "" "The email address your server shall use to send notification emails from." msgstr "The email address your server shall use to send notification emails from." -#: src/Module/Admin/Site.php:599 +#: src/Module/Admin/Site.php:523 msgid "Name of the system actor" msgstr "" -#: src/Module/Admin/Site.php:599 +#: src/Module/Admin/Site.php:523 msgid "" "Name of the internal system account that is used to perform ActivityPub " "requests. This must be an unused username. If set, this can't be changed " "again." msgstr "" -#: src/Module/Admin/Site.php:600 +#: src/Module/Admin/Site.php:524 msgid "Banner/Logo" msgstr "Banner/Logo" -#: src/Module/Admin/Site.php:601 +#: src/Module/Admin/Site.php:525 msgid "Email Banner/Logo" msgstr "Email Banner/Logo" -#: src/Module/Admin/Site.php:602 +#: src/Module/Admin/Site.php:526 msgid "Shortcut icon" msgstr "Shortcut icon" -#: src/Module/Admin/Site.php:602 +#: src/Module/Admin/Site.php:526 msgid "Link to an icon that will be used for browsers." msgstr "Link to an icon that will be used for browsers." -#: src/Module/Admin/Site.php:603 +#: src/Module/Admin/Site.php:527 msgid "Touch icon" msgstr "Touch icon" -#: src/Module/Admin/Site.php:603 +#: src/Module/Admin/Site.php:527 msgid "Link to an icon that will be used for tablets and mobiles." msgstr "Link to an icon that will be used for tablets and mobiles." -#: src/Module/Admin/Site.php:604 +#: src/Module/Admin/Site.php:528 msgid "Additional Info" msgstr "Additional Info" -#: src/Module/Admin/Site.php:604 +#: src/Module/Admin/Site.php:528 #, php-format msgid "" "For public servers: you can add additional information here that will be " "listed at %s/servers." msgstr "For public servers: You can add additional information here that will be listed at %s/servers." -#: src/Module/Admin/Site.php:605 +#: src/Module/Admin/Site.php:529 msgid "System language" msgstr "System language" -#: src/Module/Admin/Site.php:606 +#: src/Module/Admin/Site.php:530 msgid "System theme" msgstr "System theme" -#: src/Module/Admin/Site.php:606 +#: src/Module/Admin/Site.php:530 msgid "" "Default system theme - may be over-ridden by user profiles - Change default theme settings" msgstr "Default system theme - may be over-ridden by user profiles - Change default theme settings" -#: src/Module/Admin/Site.php:607 +#: src/Module/Admin/Site.php:531 msgid "Mobile system theme" msgstr "Mobile system theme" -#: src/Module/Admin/Site.php:607 +#: src/Module/Admin/Site.php:531 msgid "Theme for mobile devices" msgstr "Theme for mobile devices" -#: src/Module/Admin/Site.php:608 src/Module/Install.php:225 +#: src/Module/Admin/Site.php:532 src/Module/Install.php:225 msgid "SSL link policy" msgstr "SSL link policy" -#: src/Module/Admin/Site.php:608 src/Module/Install.php:227 +#: src/Module/Admin/Site.php:532 src/Module/Install.php:227 msgid "Determines whether generated links should be forced to use SSL" msgstr "Determines whether generated links should be forced to use SSL" -#: src/Module/Admin/Site.php:609 +#: src/Module/Admin/Site.php:533 msgid "Force SSL" msgstr "Force SSL" -#: src/Module/Admin/Site.php:609 +#: src/Module/Admin/Site.php:533 msgid "" "Force all Non-SSL requests to SSL - Attention: on some systems it could lead" " to endless loops." msgstr "Force all Non-SSL requests to SSL - Attention: on some systems it could lead to endless loops." -#: src/Module/Admin/Site.php:610 -msgid "Hide help entry from navigation menu" -msgstr "Hide help entry from navigation menu" +#: src/Module/Admin/Site.php:534 +msgid "Show help entry from navigation menu" +msgstr "" -#: src/Module/Admin/Site.php:610 +#: src/Module/Admin/Site.php:534 msgid "" -"Hides the menu entry for the Help pages from the navigation menu. You can " -"still access it calling /help directly." -msgstr "Hides the menu entry for the Help pages from the navigation menu. Help pages can still be accessed by calling ../help directly via its URL." +"Displays the menu entry for the Help pages from the navigation menu. It is " +"always accessible by calling /help directly." +msgstr "" -#: src/Module/Admin/Site.php:611 +#: src/Module/Admin/Site.php:535 msgid "Single user instance" msgstr "Single user instance" -#: src/Module/Admin/Site.php:611 +#: src/Module/Admin/Site.php:535 msgid "Make this instance multi-user or single-user for the named user" msgstr "Make this instance multi-user or single-user for the named user" -#: src/Module/Admin/Site.php:613 -msgid "File storage backend" -msgstr "File storage backend" - -#: src/Module/Admin/Site.php:613 -msgid "" -"The backend used to store uploaded data. If you change the storage backend, " -"you can manually move the existing files. If you do not do so, the files " -"uploaded before the change will still be available at the old backend. " -"Please see the settings documentation" -" for more information about the choices and the moving procedure." -msgstr "The backend used to store uploaded data. If you change the storage backend, you can manually move the existing files. If you don't do so, the files uploaded before the change will still be available at the old backend. Please see the settings documentation for more information about the choices and the moving procedure." - -#: src/Module/Admin/Site.php:615 +#: src/Module/Admin/Site.php:537 msgid "Maximum image size" msgstr "Maximum image size" -#: src/Module/Admin/Site.php:615 +#: src/Module/Admin/Site.php:537 msgid "" "Maximum size in bytes of uploaded images. Default is 0, which means no " "limits." msgstr "Maximum size in bytes of uploaded images. Default is 0, which means no limits." -#: src/Module/Admin/Site.php:616 +#: src/Module/Admin/Site.php:538 msgid "Maximum image length" msgstr "Maximum image length" -#: src/Module/Admin/Site.php:616 +#: src/Module/Admin/Site.php:538 msgid "" "Maximum length in pixels of the longest side of uploaded images. Default is " "-1, which means no limits." msgstr "Maximum length in pixels of the longest side of uploaded images. Default is -1, which means no limits." -#: src/Module/Admin/Site.php:617 +#: src/Module/Admin/Site.php:539 msgid "JPEG image quality" msgstr "JPEG image quality" -#: src/Module/Admin/Site.php:617 +#: src/Module/Admin/Site.php:539 msgid "" "Uploaded JPEGS will be saved at this quality setting [0-100]. Default is " "100, which is full quality." msgstr "Uploaded JPEGS will be saved at this quality setting [0-100]. Default is 100, which is the original quality level." -#: src/Module/Admin/Site.php:619 +#: src/Module/Admin/Site.php:541 msgid "Register policy" msgstr "Registration policy" -#: src/Module/Admin/Site.php:620 +#: src/Module/Admin/Site.php:542 msgid "Maximum Daily Registrations" msgstr "Maximum daily registrations" -#: src/Module/Admin/Site.php:620 +#: src/Module/Admin/Site.php:542 msgid "" "If registration is permitted above, this sets the maximum number of new user" " registrations to accept per day. If register is set to closed, this " "setting has no effect." msgstr "If open registration is permitted, this sets the maximum number of new registrations per day. This setting has no effect for registrations by approval." -#: src/Module/Admin/Site.php:621 +#: src/Module/Admin/Site.php:543 msgid "Register text" msgstr "Registration text" -#: src/Module/Admin/Site.php:621 +#: src/Module/Admin/Site.php:543 msgid "" "Will be displayed prominently on the registration page. You can use BBCode " "here." msgstr "Will be displayed prominently on the registration page. You may use BBCode here." -#: src/Module/Admin/Site.php:622 +#: src/Module/Admin/Site.php:544 msgid "Forbidden Nicknames" msgstr "Forbidden Nicknames" -#: src/Module/Admin/Site.php:622 +#: src/Module/Admin/Site.php:544 msgid "" "Comma separated list of nicknames that are forbidden from registration. " "Preset is a list of role names according RFC 2142." msgstr "Comma separated list of nicknames that are forbidden from registration. Preset is a list of role names according RFC 2142." -#: src/Module/Admin/Site.php:623 +#: src/Module/Admin/Site.php:545 msgid "Accounts abandoned after x days" msgstr "Accounts abandoned after so many days" -#: src/Module/Admin/Site.php:623 +#: src/Module/Admin/Site.php:545 msgid "" "Will not waste system resources polling external sites for abandonded " "accounts. Enter 0 for no time limit." msgstr "Will not waste system resources polling external sites for abandoned accounts. Enter 0 for no time limit." -#: src/Module/Admin/Site.php:624 +#: src/Module/Admin/Site.php:546 msgid "Allowed friend domains" msgstr "Allowed friend domains" -#: src/Module/Admin/Site.php:624 +#: src/Module/Admin/Site.php:546 msgid "" "Comma separated list of domains which are allowed to establish friendships " "with this site. Wildcards are accepted. Empty to allow any domains" msgstr "Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Leave empty to allow any domains" -#: src/Module/Admin/Site.php:625 +#: src/Module/Admin/Site.php:547 msgid "Allowed email domains" msgstr "Allowed email domains" -#: src/Module/Admin/Site.php:625 +#: src/Module/Admin/Site.php:547 msgid "" "Comma separated list of domains which are allowed in email addresses for " "registrations to this site. Wildcards are accepted. Empty to allow any " "domains" msgstr "Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Leave empty to allow any domains" -#: src/Module/Admin/Site.php:626 +#: src/Module/Admin/Site.php:548 msgid "No OEmbed rich content" msgstr "No OEmbed rich content" -#: src/Module/Admin/Site.php:626 +#: src/Module/Admin/Site.php:548 msgid "" "Don't show the rich content (e.g. embedded PDF), except from the domains " "listed below." msgstr "Don't show rich content (e.g. embedded PDF), except from the domains listed below." -#: src/Module/Admin/Site.php:627 +#: src/Module/Admin/Site.php:549 msgid "Trusted third-party domains" msgstr "" -#: src/Module/Admin/Site.php:627 +#: src/Module/Admin/Site.php:549 msgid "" "Comma separated list of domains from which content is allowed to be embedded" " in posts like with OEmbed. All sub-domains of the listed domains are " "allowed as well." msgstr "" -#: src/Module/Admin/Site.php:628 +#: src/Module/Admin/Site.php:550 msgid "Block public" msgstr "Block public" -#: src/Module/Admin/Site.php:628 +#: src/Module/Admin/Site.php:550 msgid "" "Check to block public access to all otherwise public personal pages on this " "site unless you are currently logged in." msgstr "Block public access to all otherwise public personal pages on this site, except for local users when logged in." -#: src/Module/Admin/Site.php:629 +#: src/Module/Admin/Site.php:551 msgid "Force publish" msgstr "Mandatory directory listing" -#: src/Module/Admin/Site.php:629 +#: src/Module/Admin/Site.php:551 msgid "" "Check to force all profiles on this site to be listed in the site directory." msgstr "Force all profiles on this site to be listed in the site directory." -#: src/Module/Admin/Site.php:629 +#: src/Module/Admin/Site.php:551 msgid "Enabling this may violate privacy laws like the GDPR" msgstr "Enabling this may violate privacy laws like the GDPR" -#: src/Module/Admin/Site.php:630 +#: src/Module/Admin/Site.php:552 msgid "Global directory URL" msgstr "Global directory URL" -#: src/Module/Admin/Site.php:630 +#: src/Module/Admin/Site.php:552 msgid "" "URL to the global directory. If this is not set, the global directory is " "completely unavailable to the application." msgstr "URL to the global directory: If this is not set, the global directory is completely unavailable to the application." -#: src/Module/Admin/Site.php:631 +#: src/Module/Admin/Site.php:553 msgid "Private posts by default for new users" msgstr "Private posts by default for new users" -#: src/Module/Admin/Site.php:631 +#: src/Module/Admin/Site.php:553 msgid "" "Set default post permissions for all new members to the default privacy " "group rather than public." msgstr "Set default post permissions for all new members to the default privacy group rather than public." -#: src/Module/Admin/Site.php:632 +#: src/Module/Admin/Site.php:554 msgid "Don't include post content in email notifications" msgstr "Don't include post content in email notifications" -#: src/Module/Admin/Site.php:632 +#: src/Module/Admin/Site.php:554 msgid "" "Don't include the content of a post/comment/private message/etc. in the " "email notifications that are sent out from this site, as a privacy measure." msgstr "Don't include the content of a post/comment/private message in the email notifications sent from this site, as a privacy measure." -#: src/Module/Admin/Site.php:633 +#: src/Module/Admin/Site.php:555 msgid "Disallow public access to addons listed in the apps menu." msgstr "Disallow public access to addons listed in the apps menu." -#: src/Module/Admin/Site.php:633 +#: src/Module/Admin/Site.php:555 msgid "" "Checking this box will restrict addons listed in the apps menu to members " "only." msgstr "Checking this box will restrict addons listed in the apps menu to members only." -#: src/Module/Admin/Site.php:634 +#: src/Module/Admin/Site.php:556 msgid "Don't embed private images in posts" msgstr "Don't embed private images in posts" -#: src/Module/Admin/Site.php:634 +#: src/Module/Admin/Site.php:556 msgid "" "Don't replace locally-hosted private photos in posts with an embedded copy " "of the image. This means that contacts who receive posts containing private " @@ -6239,11 +5790,11 @@ msgid "" "while." msgstr "Don't replace locally-hosted private photos in posts with an embedded copy of the image. This means that contacts who receive posts containing private photos will have to authenticate and load each image, which may take a while." -#: src/Module/Admin/Site.php:635 +#: src/Module/Admin/Site.php:557 msgid "Explicit Content" msgstr "Explicit Content" -#: src/Module/Admin/Site.php:635 +#: src/Module/Admin/Site.php:557 msgid "" "Set this to announce that your node is used mostly for explicit content that" " might not be suited for minors. This information will be published in the " @@ -6252,234 +5803,255 @@ msgid "" "will be shown at the user registration page." msgstr "Set this to announce that your node is used mostly for explicit content that might not be suited for minors. This information will be published in the node information and might be used, e.g. by the global directory, to filter your node from listings of nodes to join. Additionally a note about this will be shown at the user registration page." -#: src/Module/Admin/Site.php:636 +#: src/Module/Admin/Site.php:558 +msgid "Proxify external content" +msgstr "" + +#: src/Module/Admin/Site.php:558 +msgid "" +"Route external content via the proxy functionality. This is used for example" +" for some OEmbed accesses and in some other rare cases." +msgstr "" + +#: src/Module/Admin/Site.php:559 +msgid "Cache contact avatars" +msgstr "" + +#: src/Module/Admin/Site.php:559 +msgid "" +"Locally store the avatar pictures of the contacts. This uses a lot of " +"storage space but it increases the performance." +msgstr "" + +#: src/Module/Admin/Site.php:560 msgid "Allow Users to set remote_self" msgstr "Allow users to set \"Remote self\"" -#: src/Module/Admin/Site.php:636 +#: src/Module/Admin/Site.php:560 msgid "" "With checking this, every user is allowed to mark every contact as a " "remote_self in the repair contact dialog. Setting this flag on a contact " "causes mirroring every posting of that contact in the users stream." msgstr "This allows every user to mark contacts as a \"Remote self\" in the repair contact dialogue. Setting this flag on a contact will mirror every posting of that contact in the users stream." -#: src/Module/Admin/Site.php:637 -msgid "Block multiple registrations" -msgstr "Block multiple registrations" +#: src/Module/Admin/Site.php:561 +msgid "Enable multiple registrations" +msgstr "" -#: src/Module/Admin/Site.php:637 -msgid "Disallow users to register additional accounts for use as pages." -msgstr "Disallow users to sign up for additional accounts." +#: src/Module/Admin/Site.php:561 +msgid "Enable users to register additional accounts for use as pages." +msgstr "" -#: src/Module/Admin/Site.php:638 -msgid "Disable OpenID" -msgstr "Disable OpenID" +#: src/Module/Admin/Site.php:562 +msgid "Enable OpenID" +msgstr "" -#: src/Module/Admin/Site.php:638 -msgid "Disable OpenID support for registration and logins." -msgstr "Disable OpenID support for registration and logins." +#: src/Module/Admin/Site.php:562 +msgid "Enable OpenID support for registration and logins." +msgstr "" -#: src/Module/Admin/Site.php:639 -msgid "No Fullname check" -msgstr "No full name check" +#: src/Module/Admin/Site.php:563 +msgid "Enable Fullname check" +msgstr "" -#: src/Module/Admin/Site.php:639 +#: src/Module/Admin/Site.php:563 msgid "" -"Allow users to register without a space between the first name and the last " -"name in their full name." -msgstr "Allow users to register without a space between the first name and the last name in their full name." +"Enable check to only allow users to register with a space between the first " +"name and the last name in their full name." +msgstr "" -#: src/Module/Admin/Site.php:640 +#: src/Module/Admin/Site.php:564 msgid "Community pages for visitors" msgstr "Community pages for visitors" -#: src/Module/Admin/Site.php:640 +#: src/Module/Admin/Site.php:564 msgid "" "Which community pages should be available for visitors. Local users always " "see both pages." msgstr "Community pages that should be available for visitors. Local users always see both pages." -#: src/Module/Admin/Site.php:641 +#: src/Module/Admin/Site.php:565 msgid "Posts per user on community page" msgstr "Posts per user on community page" -#: src/Module/Admin/Site.php:641 +#: src/Module/Admin/Site.php:565 msgid "" "The maximum number of posts per user on the community page. (Not valid for " "\"Global Community\")" msgstr "Maximum number of posts per user on the community page. (Not valid for \"Global Community\")" -#: src/Module/Admin/Site.php:642 -msgid "Disable OStatus support" -msgstr "Disable OStatus support" +#: src/Module/Admin/Site.php:567 +msgid "Enable Mail support" +msgstr "" -#: src/Module/Admin/Site.php:642 +#: src/Module/Admin/Site.php:567 msgid "" -"Disable built-in OStatus (StatusNet, GNU Social etc.) compatibility. All " -"communications in OStatus are public, so privacy warnings will be " -"occasionally displayed." -msgstr "Disable built-in OStatus (StatusNet, GNU Social etc.) compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed." +"Enable built-in mail support to poll IMAP folders and to reply via mail." +msgstr "" -#: src/Module/Admin/Site.php:643 -msgid "OStatus support can only be enabled if threading is enabled." -msgstr "OStatus support can only be enabled if threading is enabled." +#: src/Module/Admin/Site.php:568 +msgid "" +"Mail support can't be enabled because the PHP IMAP module is not installed." +msgstr "" -#: src/Module/Admin/Site.php:645 +#: src/Module/Admin/Site.php:569 +msgid "Enable OStatus support" +msgstr "" + +#: src/Module/Admin/Site.php:569 +msgid "" +"Enable built-in OStatus (StatusNet, GNU Social etc.) compatibility. All " +"communications in OStatus are public." +msgstr "" + +#: src/Module/Admin/Site.php:571 msgid "" "Diaspora support can't be enabled because Friendica was installed into a sub" " directory." msgstr "diaspora* support can't be enabled because Friendica was installed into a sub directory." -#: src/Module/Admin/Site.php:646 +#: src/Module/Admin/Site.php:572 msgid "Enable Diaspora support" msgstr "Enable diaspora* support" -#: src/Module/Admin/Site.php:646 -msgid "Provide built-in Diaspora network compatibility." -msgstr "Provide built-in diaspora* network compatibility." - -#: src/Module/Admin/Site.php:647 -msgid "Only allow Friendica contacts" -msgstr "Only allow Friendica contacts" - -#: src/Module/Admin/Site.php:647 +#: src/Module/Admin/Site.php:572 msgid "" -"All contacts must use Friendica protocols. All other built-in communication " -"protocols disabled." -msgstr "All contacts must use Friendica protocols. All other built-in communication protocols will be disabled." +"Enable built-in Diaspora network compatibility for communicating with " +"diaspora servers." +msgstr "" -#: src/Module/Admin/Site.php:648 +#: src/Module/Admin/Site.php:573 msgid "Verify SSL" msgstr "Verify SSL" -#: src/Module/Admin/Site.php:648 +#: src/Module/Admin/Site.php:573 msgid "" "If you wish, you can turn on strict certificate checking. This will mean you" " cannot connect (at all) to self-signed SSL sites." msgstr "If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites." -#: src/Module/Admin/Site.php:649 +#: src/Module/Admin/Site.php:574 msgid "Proxy user" msgstr "Proxy user" -#: src/Module/Admin/Site.php:650 +#: src/Module/Admin/Site.php:575 msgid "Proxy URL" msgstr "Proxy URL" -#: src/Module/Admin/Site.php:651 +#: src/Module/Admin/Site.php:576 msgid "Network timeout" msgstr "Network timeout" -#: src/Module/Admin/Site.php:651 +#: src/Module/Admin/Site.php:576 msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." msgstr "Value is in seconds. Set to 0 for unlimited (not recommended)." -#: src/Module/Admin/Site.php:652 +#: src/Module/Admin/Site.php:577 msgid "Maximum Load Average" msgstr "Maximum load average" -#: src/Module/Admin/Site.php:652 +#: src/Module/Admin/Site.php:577 #, php-format msgid "" "Maximum system load before delivery and poll processes are deferred - " "default %d." msgstr "Maximum system load before delivery and poll processes are deferred - default %d." -#: src/Module/Admin/Site.php:653 +#: src/Module/Admin/Site.php:578 msgid "Maximum Load Average (Frontend)" msgstr "Maximum load average (frontend)" -#: src/Module/Admin/Site.php:653 +#: src/Module/Admin/Site.php:578 msgid "Maximum system load before the frontend quits service - default 50." msgstr "Maximum system load before the frontend quits service (default 50)." -#: src/Module/Admin/Site.php:654 +#: src/Module/Admin/Site.php:579 msgid "Minimal Memory" msgstr "Minimal memory" -#: src/Module/Admin/Site.php:654 +#: src/Module/Admin/Site.php:579 msgid "" "Minimal free memory in MB for the worker. Needs access to /proc/meminfo - " "default 0 (deactivated)." msgstr "Minimal free memory in MB for the worker. Needs access to /proc/meminfo - default 0 (deactivated)." -#: src/Module/Admin/Site.php:655 +#: src/Module/Admin/Site.php:580 msgid "Periodically optimize tables" msgstr "" -#: src/Module/Admin/Site.php:655 +#: src/Module/Admin/Site.php:580 msgid "Periodically optimize tables like the cache and the workerqueue" msgstr "" -#: src/Module/Admin/Site.php:657 +#: src/Module/Admin/Site.php:582 msgid "Discover followers/followings from contacts" msgstr "" -#: src/Module/Admin/Site.php:657 +#: src/Module/Admin/Site.php:582 msgid "" "If enabled, contacts are checked for their followers and following contacts." msgstr "" -#: src/Module/Admin/Site.php:658 +#: src/Module/Admin/Site.php:583 msgid "None - deactivated" msgstr "" -#: src/Module/Admin/Site.php:659 +#: src/Module/Admin/Site.php:584 msgid "" "Local contacts - contacts of our local contacts are discovered for their " "followers/followings." msgstr "" -#: src/Module/Admin/Site.php:660 +#: src/Module/Admin/Site.php:585 msgid "" "Interactors - contacts of our local contacts and contacts who interacted on " "locally visible postings are discovered for their followers/followings." msgstr "" -#: src/Module/Admin/Site.php:662 +#: src/Module/Admin/Site.php:587 msgid "Synchronize the contacts with the directory server" msgstr "" -#: src/Module/Admin/Site.php:662 +#: src/Module/Admin/Site.php:587 msgid "" "if enabled, the system will check periodically for new contacts on the " "defined directory server." msgstr "" -#: src/Module/Admin/Site.php:664 +#: src/Module/Admin/Site.php:589 msgid "Days between requery" msgstr "Days between enquiry" -#: src/Module/Admin/Site.php:664 +#: src/Module/Admin/Site.php:589 msgid "Number of days after which a server is requeried for his contacts." msgstr "Number of days after which a server is required check contacts." -#: src/Module/Admin/Site.php:665 +#: src/Module/Admin/Site.php:590 msgid "Discover contacts from other servers" msgstr "Discover contacts from other servers" -#: src/Module/Admin/Site.php:665 +#: src/Module/Admin/Site.php:590 msgid "" "Periodically query other servers for contacts. The system queries Friendica," " Mastodon and Hubzilla servers." msgstr "" -#: src/Module/Admin/Site.php:666 +#: src/Module/Admin/Site.php:591 msgid "Search the local directory" msgstr "Search the local directory" -#: src/Module/Admin/Site.php:666 +#: src/Module/Admin/Site.php:591 msgid "" "Search the local directory instead of the global directory. When searching " "locally, every search will be executed on the global directory in the " "background. This improves the search results when the search is repeated." msgstr "Search the local directory instead of the global directory. When searching locally, every search will be executed on the global directory in the background. This improves the search results when the search is repeated." -#: src/Module/Admin/Site.php:668 +#: src/Module/Admin/Site.php:593 msgid "Publish server information" msgstr "Publish server information" -#: src/Module/Admin/Site.php:668 +#: src/Module/Admin/Site.php:593 msgid "" "If enabled, general server and usage data will be published. The data " "contains the name and version of the server, number of users with public " @@ -6487,50 +6059,50 @@ msgid "" " href=\"http://the-federation.info/\">the-federation.info for details." msgstr "If enabled, general server and usage data will be published. The data contains the name and version of the server, number of users with public profiles, number of posts and the activated protocols and connectors. See the-federation.info for details." -#: src/Module/Admin/Site.php:670 +#: src/Module/Admin/Site.php:595 msgid "Check upstream version" msgstr "Check upstream version" -#: src/Module/Admin/Site.php:670 +#: src/Module/Admin/Site.php:595 msgid "" "Enables checking for new Friendica versions at github. If there is a new " "version, you will be informed in the admin panel overview." msgstr "Enables checking for new Friendica versions at github. If there is a new version, you will be informed in the admin panel overview." -#: src/Module/Admin/Site.php:671 +#: src/Module/Admin/Site.php:596 msgid "Suppress Tags" msgstr "Suppress tags" -#: src/Module/Admin/Site.php:671 +#: src/Module/Admin/Site.php:596 msgid "Suppress showing a list of hashtags at the end of the posting." msgstr "Suppress listed hashtags at the end of posts." -#: src/Module/Admin/Site.php:672 +#: src/Module/Admin/Site.php:597 msgid "Clean database" msgstr "Clean database" -#: src/Module/Admin/Site.php:672 +#: src/Module/Admin/Site.php:597 msgid "" "Remove old remote items, orphaned database records and old content from some" " other helper tables." msgstr "Remove old remote items, orphaned database records and old content from some other helper tables." -#: src/Module/Admin/Site.php:673 +#: src/Module/Admin/Site.php:598 msgid "Lifespan of remote items" msgstr "Lifespan of remote items" -#: src/Module/Admin/Site.php:673 +#: src/Module/Admin/Site.php:598 msgid "" "When the database cleanup is enabled, this defines the days after which " "remote items will be deleted. Own items, and marked or filed items are " "always kept. 0 disables this behaviour." msgstr "If the database cleanup is enabled, this defines the days after which remote items will be deleted. Own items, and marked or filed items are always kept. 0 disables this behaviour." -#: src/Module/Admin/Site.php:674 +#: src/Module/Admin/Site.php:599 msgid "Lifespan of unclaimed items" msgstr "Lifespan of unclaimed items" -#: src/Module/Admin/Site.php:674 +#: src/Module/Admin/Site.php:599 msgid "" "When the database cleanup is enabled, this defines the days after which " "unclaimed remote items (mostly content from the relay) will be deleted. " @@ -6538,215 +6110,199 @@ msgid "" "items if set to 0." msgstr "If the database cleanup is enabled, this defines the days after which unclaimed remote items (mostly content from the relay) will be deleted. Default value is 90 days. Defaults to the general lifespan value of remote items if set to 0." -#: src/Module/Admin/Site.php:675 +#: src/Module/Admin/Site.php:600 msgid "Lifespan of raw conversation data" msgstr "Lifespan of raw conversation data" -#: src/Module/Admin/Site.php:675 +#: src/Module/Admin/Site.php:600 msgid "" "The conversation data is used for ActivityPub and OStatus, as well as for " "debug purposes. It should be safe to remove it after 14 days, default is 90 " "days." msgstr "The conversation data is used for ActivityPub and OStatus, as well as for debug purposes. It should be safe to remove it after 14 days, default is 90 days." -#: src/Module/Admin/Site.php:676 -msgid "Path to item cache" -msgstr "Path to item cache" - -#: src/Module/Admin/Site.php:676 -msgid "The item caches buffers generated bbcode and external images." -msgstr "The item caches buffers generated bbcode and external images." - -#: src/Module/Admin/Site.php:677 -msgid "Cache duration in seconds" -msgstr "Cache duration in seconds" - -#: src/Module/Admin/Site.php:677 -msgid "" -"How long should the cache files be hold? Default value is 86400 seconds (One" -" day). To disable the item cache, set the value to -1." -msgstr "How long should cache files be held? (Default 86400 seconds - one day; -1 disables item cache)" - -#: src/Module/Admin/Site.php:678 +#: src/Module/Admin/Site.php:601 msgid "Maximum numbers of comments per post" msgstr "Maximum numbers of comments per post" -#: src/Module/Admin/Site.php:678 +#: src/Module/Admin/Site.php:601 msgid "How much comments should be shown for each post? Default value is 100." msgstr "How many comments should be shown for each post? (Default 100)" -#: src/Module/Admin/Site.php:679 +#: src/Module/Admin/Site.php:602 msgid "Maximum numbers of comments per post on the display page" msgstr "" -#: src/Module/Admin/Site.php:679 +#: src/Module/Admin/Site.php:602 msgid "" "How many comments should be shown on the single view for each post? Default " "value is 1000." msgstr "" -#: src/Module/Admin/Site.php:680 +#: src/Module/Admin/Site.php:603 msgid "Temp path" msgstr "Temp path" -#: src/Module/Admin/Site.php:680 +#: src/Module/Admin/Site.php:603 msgid "" "If you have a restricted system where the webserver can't access the system " "temp path, enter another path here." msgstr "Enter a different tmp path, if your system restricts the webserver's access to the system temp path." -#: src/Module/Admin/Site.php:681 -msgid "Disable picture proxy" -msgstr "Disable picture proxy" - -#: src/Module/Admin/Site.php:681 -msgid "" -"The picture proxy increases performance and privacy. It shouldn't be used on" -" systems with very low bandwidth." -msgstr "The picture proxy increases performance and privacy. It shouldn't be used on systems with very low bandwidth." - -#: src/Module/Admin/Site.php:682 +#: src/Module/Admin/Site.php:604 msgid "Only search in tags" msgstr "Only search in tags" -#: src/Module/Admin/Site.php:682 +#: src/Module/Admin/Site.php:604 msgid "On large systems the text search can slow down the system extremely." msgstr "On large systems the text search can slow down the system significantly." -#: src/Module/Admin/Site.php:684 +#: src/Module/Admin/Site.php:606 msgid "New base url" msgstr "New base URL" -#: src/Module/Admin/Site.php:684 +#: src/Module/Admin/Site.php:606 msgid "" "Change base url for this server. Sends relocate message to all Friendica and" " Diaspora* contacts of all users." msgstr "Change base url for this server. Sends relocate message to all Friendica and diaspora* contacts of all users." -#: src/Module/Admin/Site.php:686 -msgid "RINO Encryption" -msgstr "RINO Encryption" - -#: src/Module/Admin/Site.php:686 -msgid "Encryption layer between nodes." -msgstr "Encryption layer between nodes." - -#: src/Module/Admin/Site.php:686 src/Module/Admin/Site.php:694 -#: src/Module/Contact.php:554 src/Module/Settings/TwoFactor/Index.php:118 -msgid "Disabled" -msgstr "Disabled" - -#: src/Module/Admin/Site.php:686 -msgid "Enabled" -msgstr "Enabled" - -#: src/Module/Admin/Site.php:688 +#: src/Module/Admin/Site.php:608 msgid "Maximum number of parallel workers" msgstr "Maximum number of parallel workers" -#: src/Module/Admin/Site.php:688 +#: src/Module/Admin/Site.php:608 #, php-format msgid "" "On shared hosters set this to %d. On larger systems, values of %d are great." " Default value is %d." msgstr "On shared hosters set this to %d. On larger systems, values of %d are great. Default value is %d." -#: src/Module/Admin/Site.php:689 +#: src/Module/Admin/Site.php:609 msgid "Enable fastlane" msgstr "Enable fast-lane" -#: src/Module/Admin/Site.php:689 +#: src/Module/Admin/Site.php:609 msgid "" "When enabed, the fastlane mechanism starts an additional worker if processes" " with higher priority are blocked by processes of lower priority." msgstr "The fast-lane mechanism starts an additional worker if processes with higher priority are blocked by processes of lower priority." -#: src/Module/Admin/Site.php:691 -msgid "Use relay servers" -msgstr "" - -#: src/Module/Admin/Site.php:691 -msgid "" -"Enables the receiving of public posts from relay servers. They will be " -"included in the search, subscribed tags and on the global community page." -msgstr "" - -#: src/Module/Admin/Site.php:692 -msgid "\"Social Relay\" server" -msgstr "" - -#: src/Module/Admin/Site.php:692 -#, php-format -msgid "" -"Address of the \"Social Relay\" server where public posts should be send to." -" For example %s. ActivityRelay servers are administrated via the \"console " -"relay\" command line command." -msgstr "" - -#: src/Module/Admin/Site.php:693 +#: src/Module/Admin/Site.php:611 msgid "Direct relay transfer" msgstr "Direct relay transfer" -#: src/Module/Admin/Site.php:693 +#: src/Module/Admin/Site.php:611 msgid "" "Enables the direct transfer to other servers without using the relay servers" msgstr "Enables direct transfer to other servers without using a relay server." -#: src/Module/Admin/Site.php:694 +#: src/Module/Admin/Site.php:612 msgid "Relay scope" msgstr "Relay scope" -#: src/Module/Admin/Site.php:694 +#: src/Module/Admin/Site.php:612 msgid "" "Can be \"all\" or \"tags\". \"all\" means that every public post should be " "received. \"tags\" means that only posts with selected tags should be " "received." msgstr "Can be \"all\" or \"tags\". \"all\" means that every public post should be received. \"tags\" means that only posts with selected tags should be received." -#: src/Module/Admin/Site.php:694 +#: src/Module/Admin/Site.php:612 src/Module/Contact.php:473 +#: src/Module/Settings/TwoFactor/Index.php:118 +msgid "Disabled" +msgstr "Disabled" + +#: src/Module/Admin/Site.php:612 msgid "all" msgstr "all" -#: src/Module/Admin/Site.php:694 +#: src/Module/Admin/Site.php:612 msgid "tags" msgstr "tags" -#: src/Module/Admin/Site.php:695 +#: src/Module/Admin/Site.php:613 msgid "Server tags" msgstr "Server tags" -#: src/Module/Admin/Site.php:695 +#: src/Module/Admin/Site.php:613 msgid "Comma separated list of tags for the \"tags\" subscription." msgstr "Comma separated list of tags for the \"tags\" subscription." -#: src/Module/Admin/Site.php:696 +#: src/Module/Admin/Site.php:614 msgid "Deny Server tags" msgstr "" -#: src/Module/Admin/Site.php:696 +#: src/Module/Admin/Site.php:614 msgid "Comma separated list of tags that are rejected." msgstr "" -#: src/Module/Admin/Site.php:697 +#: src/Module/Admin/Site.php:615 msgid "Allow user tags" msgstr "Allow user tags" -#: src/Module/Admin/Site.php:697 +#: src/Module/Admin/Site.php:615 msgid "" "If enabled, the tags from the saved searches will used for the \"tags\" " "subscription in addition to the \"relay_server_tags\"." msgstr "If enabled, the tags from the saved searches will be used for the \"tags\" subscription in addition to the \"relay_server_tags\"." -#: src/Module/Admin/Site.php:700 +#: src/Module/Admin/Site.php:618 msgid "Start Relocation" msgstr "Start relocation" -#: src/Module/Admin/Summary.php:53 +#: src/Module/Admin/Storage.php:46 +#, php-format +msgid "Storage backend, %s is invalid." +msgstr "" + +#: src/Module/Admin/Storage.php:73 +#, php-format +msgid "Storage backend %s error: %s" +msgstr "" + +#: src/Module/Admin/Storage.php:85 src/Module/Admin/Storage.php:88 +msgid "Invalid storage backend setting value." +msgstr "Invalid storage backend settings." + +#: src/Module/Admin/Storage.php:140 +msgid "Current Storage Backend" +msgstr "" + +#: src/Module/Admin/Storage.php:141 +msgid "Storage Configuration" +msgstr "" + +#: src/Module/Admin/Storage.php:142 src/Module/BaseAdmin.php:91 +msgid "Storage" +msgstr "" + +#: src/Module/Admin/Storage.php:144 +msgid "Save & Use storage backend" +msgstr "" + +#: src/Module/Admin/Storage.php:145 +msgid "Use storage backend" +msgstr "" + +#: src/Module/Admin/Storage.php:146 +msgid "Save & Reload" +msgstr "" + +#: src/Module/Admin/Storage.php:147 +msgid "This backend doesn't have custom settings" +msgstr "" + +#: src/Module/Admin/Storage.php:150 +msgid "Database (legacy)" +msgstr "Database (legacy)" + +#: src/Module/Admin/Summary.php:54 #, php-format msgid "Template engine (%s) error: %s" msgstr "" -#: src/Module/Admin/Summary.php:57 +#: src/Module/Admin/Summary.php:58 #, php-format msgid "" "Your DB still runs with MyISAM tables. You should change the engine type to " @@ -6757,7 +6313,7 @@ msgid "" " an automatic conversion.
" msgstr "Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See here for a guide that may be helpful converting the table engines. You may also use the command php bin/console.php dbstructure toinnodb of your Friendica installation for an automatic conversion.
" -#: src/Module/Admin/Summary.php:62 +#: src/Module/Admin/Summary.php:63 #, php-format msgid "" "Your DB still runs with InnoDB tables in the Antelope file format. You " @@ -6768,7 +6324,7 @@ msgid "" " installation for an automatic conversion.
" msgstr "Your DB still runs with InnoDB tables in the Antelope file format. You should change the file format to Barracuda. Friendica is using features that are not provided by the Antelope format. See here for a guide that may be helpful converting the table engines. You may also use the command php bin/console.php dbstructure toinnodb of your Friendica installation for an automatic conversion.
" -#: src/Module/Admin/Summary.php:72 +#: src/Module/Admin/Summary.php:73 #, php-format msgid "" "Your table_definition_cache is too low (%d). This can lead to the database " @@ -6776,39 +6332,39 @@ msgid "" " to %d. See here for more information.
" msgstr "" -#: src/Module/Admin/Summary.php:82 +#: src/Module/Admin/Summary.php:83 #, php-format msgid "" "There is a new version of Friendica available for download. Your current " "version is %1$s, upstream version is %2$s" msgstr "A new Friendica version is available now. Your current version is %1$s, upstream version is %2$s" -#: src/Module/Admin/Summary.php:91 +#: src/Module/Admin/Summary.php:92 msgid "" "The database update failed. Please run \"php bin/console.php dbstructure " "update\" from the command line and have a look at the errors that might " "appear." msgstr "The database update failed. Please run \"php bin/console.php dbstructure update\" from the command line and check for errors that may appear." -#: src/Module/Admin/Summary.php:95 +#: src/Module/Admin/Summary.php:96 msgid "" "The last update failed. Please run \"php bin/console.php dbstructure " "update\" from the command line and have a look at the errors that might " "appear. (Some of the errors are possibly inside the logfile.)" msgstr "The last update failed. Please run \"php bin/console.php dbstructure update\" from the command line and have a look at the errors that may appear at the standard output and logfile." -#: src/Module/Admin/Summary.php:100 +#: src/Module/Admin/Summary.php:101 msgid "The worker was never executed. Please check your database structure!" msgstr "The worker process has never been executed. Please check your database structure!" -#: src/Module/Admin/Summary.php:102 +#: src/Module/Admin/Summary.php:103 #, php-format msgid "" "The last worker execution was on %s UTC. This is older than one hour. Please" " check your crontab settings." msgstr "The last worker process started at %s UTC. This is more than one hour ago. Please adjust your crontab settings." -#: src/Module/Admin/Summary.php:107 +#: src/Module/Admin/Summary.php:108 #, php-format msgid "" "Friendica's configuration now is stored in config/local.config.php, please " @@ -6817,7 +6373,7 @@ msgid "" "help with the transition." msgstr "Friendica's configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your configuration from .htconfig.php. See the configuration help page for help with the transition." -#: src/Module/Admin/Summary.php:111 +#: src/Module/Admin/Summary.php:112 #, php-format msgid "" "Friendica's configuration now is stored in config/local.config.php, please " @@ -6826,7 +6382,7 @@ msgid "" "page for help with the transition." msgstr "Friendica's configuration is now stored in config/local.config.php; please copy config/local-sample.config.php and move your config from config/local.ini.php. See the Config help page for help with the transition." -#: src/Module/Admin/Summary.php:117 +#: src/Module/Admin/Summary.php:118 #, php-format msgid "" "%s is not reachable on your system. This is a severe " @@ -6834,87 +6390,83 @@ msgid "" "href=\"%s\">the installation page for help." msgstr "%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help." -#: src/Module/Admin/Summary.php:135 +#: src/Module/Admin/Summary.php:136 #, php-format msgid "The logfile '%s' is not usable. No logging possible (error: '%s')" msgstr "The logfile '%s' is not usable. No logging is possible (error: '%s')." -#: src/Module/Admin/Summary.php:149 +#: src/Module/Admin/Summary.php:150 #, php-format msgid "" "The debug logfile '%s' is not usable. No logging possible (error: '%s')" msgstr "The debug logfile '%s' is not usable. No logging is possible (error: '%s')." -#: src/Module/Admin/Summary.php:165 +#: src/Module/Admin/Summary.php:166 #, php-format msgid "" "Friendica's system.basepath was updated from '%s' to '%s'. Please remove the" " system.basepath from your db to avoid differences." msgstr "The system.basepath was updated from '%s' to '%s'. Please remove the system.basepath from your db to avoid differences." -#: src/Module/Admin/Summary.php:173 +#: src/Module/Admin/Summary.php:174 #, php-format msgid "" "Friendica's current system.basepath '%s' is wrong and the config file '%s' " "isn't used." msgstr "The current system.basepath '%s' is wrong and the config file '%s' isn't used." -#: src/Module/Admin/Summary.php:181 +#: src/Module/Admin/Summary.php:182 #, php-format msgid "" "Friendica's current system.basepath '%s' is not equal to the config file " "'%s'. Please fix your configuration." msgstr "The current system.basepath '%s' is not equal to the config file '%s'. Please fix your configuration." -#: src/Module/Admin/Summary.php:188 +#: src/Module/Admin/Summary.php:189 msgid "Normal Account" msgstr "Standard account" -#: src/Module/Admin/Summary.php:189 +#: src/Module/Admin/Summary.php:190 msgid "Automatic Follower Account" msgstr "Automatic follower account" -#: src/Module/Admin/Summary.php:190 +#: src/Module/Admin/Summary.php:191 msgid "Public Forum Account" msgstr "Public forum account" -#: src/Module/Admin/Summary.php:191 +#: src/Module/Admin/Summary.php:192 msgid "Automatic Friend Account" msgstr "Automatic friend account" -#: src/Module/Admin/Summary.php:192 +#: src/Module/Admin/Summary.php:193 msgid "Blog Account" msgstr "Blog account" -#: src/Module/Admin/Summary.php:193 +#: src/Module/Admin/Summary.php:194 msgid "Private Forum Account" msgstr "Private forum account" -#: src/Module/Admin/Summary.php:213 +#: src/Module/Admin/Summary.php:214 msgid "Message queues" msgstr "Message queues" -#: src/Module/Admin/Summary.php:219 +#: src/Module/Admin/Summary.php:220 msgid "Server Settings" msgstr "Server Settings" -#: src/Module/Admin/Summary.php:233 src/Repository/ProfileField.php:285 -msgid "Summary" -msgstr "Summary" - -#: src/Module/Admin/Summary.php:235 +#: src/Module/Admin/Summary.php:236 msgid "Registered users" msgstr "Registered users" -#: src/Module/Admin/Summary.php:237 +#: src/Module/Admin/Summary.php:238 msgid "Pending registrations" msgstr "Pending registrations" -#: src/Module/Admin/Summary.php:238 +#: src/Module/Admin/Summary.php:239 msgid "Version" msgstr "Version" -#: src/Module/Admin/Summary.php:242 +#: src/Module/Admin/Summary.php:243 msgid "Active addons" msgstr "Active addons" @@ -6938,7 +6490,7 @@ msgid "Screenshot" msgstr "Screenshot" #: src/Module/Admin/Themes/Details.php:91 -#: src/Module/Admin/Themes/Index.php:112 src/Module/BaseAdmin.php:93 +#: src/Module/Admin/Themes/Index.php:112 src/Module/BaseAdmin.php:94 msgid "Themes" msgstr "Theme selection" @@ -7142,7 +6694,7 @@ msgid "Permanent deletion" msgstr "Permanent deletion" #: src/Module/Admin/Users/Index.php:150 src/Module/Admin/Users/Index.php:160 -#: src/Module/BaseAdmin.php:91 +#: src/Module/BaseAdmin.php:92 msgid "Users" msgstr "Users" @@ -7192,21 +6744,47 @@ msgstr "Note from the user" msgid "Deny" msgstr "Deny" -#: src/Module/Api/Mastodon/Unimplemented.php:42 +#: src/Module/Api/Mastodon/Apps.php:58 +msgid "Missing parameters" +msgstr "" + +#: src/Module/Api/Mastodon/Statuses/Bookmark.php:51 +msgid "Only starting posts can be bookmarked" +msgstr "" + +#: src/Module/Api/Mastodon/Statuses/Mute.php:50 +msgid "Only starting posts can be muted" +msgstr "" + +#: src/Module/Api/Mastodon/Statuses/Pin.php:50 +#: src/Module/Api/Mastodon/Statuses/Unpin.php:50 +msgid "Only starting posts can be pinned" +msgstr "" + +#: src/Module/Api/Mastodon/Statuses/Reblog.php:53 #, php-format -msgid "API endpoint \"%s\" is not implemented" +msgid "Posts from %s can't be shared" msgstr "" -#: src/Module/Api/Mastodon/Unimplemented.php:43 -msgid "" -"The API endpoint is currently not implemented but might be in the future." +#: src/Module/Api/Mastodon/Statuses/Unbookmark.php:51 +msgid "Only starting posts can be unbookmarked" msgstr "" -#: src/Module/Api/Twitter/ContactEndpoint.php:65 src/Module/Contact.php:400 +#: src/Module/Api/Mastodon/Statuses/Unmute.php:50 +msgid "Only starting posts can be unmuted" +msgstr "" + +#: src/Module/Api/Mastodon/Statuses/Unreblog.php:53 +#, php-format +msgid "Posts from %s can't be unshared" +msgstr "" + +#: src/Module/Api/Twitter/ContactEndpoint.php:63 src/Module/Contact.php:343 +#: src/Module/Contact.php:358 msgid "Contact not found" msgstr "Contact not found" -#: src/Module/Api/Twitter/ContactEndpoint.php:135 +#: src/Module/Api/Twitter/ContactEndpoint.php:133 msgid "Profile not found" msgstr "" @@ -7218,10 +6796,14 @@ msgstr "No installed applications." msgid "Applications" msgstr "Applications" -#: src/Module/Attach.php:50 src/Module/Attach.php:62 +#: src/Module/Attach.php:49 src/Module/Attach.php:61 msgid "Item was not found." msgstr "Item was not found." +#: src/Module/BaseAdmin.php:54 src/Module/BaseAdmin.php:58 +msgid "Please login to continue." +msgstr "Please login to continue." + #: src/Module/BaseAdmin.php:63 msgid "You don't have access to administration pages." msgstr "" @@ -7240,79 +6822,102 @@ msgstr "Overview" msgid "Configuration" msgstr "Configuration" -#: src/Module/BaseAdmin.php:94 src/Module/BaseSettings.php:65 +#: src/Module/BaseAdmin.php:95 src/Module/BaseSettings.php:65 msgid "Additional features" msgstr "Additional features" -#: src/Module/BaseAdmin.php:97 +#: src/Module/BaseAdmin.php:98 msgid "Database" msgstr "Database" -#: src/Module/BaseAdmin.php:98 +#: src/Module/BaseAdmin.php:99 msgid "DB updates" msgstr "DB updates" -#: src/Module/BaseAdmin.php:99 +#: src/Module/BaseAdmin.php:100 msgid "Inspect Deferred Workers" msgstr "Inspect deferred workers" -#: src/Module/BaseAdmin.php:100 +#: src/Module/BaseAdmin.php:101 msgid "Inspect worker Queue" msgstr "Inspect worker queue" -#: src/Module/BaseAdmin.php:102 +#: src/Module/BaseAdmin.php:103 msgid "Tools" msgstr "Tools" -#: src/Module/BaseAdmin.php:103 +#: src/Module/BaseAdmin.php:104 msgid "Contact Blocklist" msgstr "Contact block-list" -#: src/Module/BaseAdmin.php:104 +#: src/Module/BaseAdmin.php:105 msgid "Server Blocklist" msgstr "Server block-list" -#: src/Module/BaseAdmin.php:111 +#: src/Module/BaseAdmin.php:112 msgid "Diagnostics" msgstr "Diagnostics" -#: src/Module/BaseAdmin.php:112 +#: src/Module/BaseAdmin.php:113 msgid "PHP Info" msgstr "PHP info" -#: src/Module/BaseAdmin.php:113 +#: src/Module/BaseAdmin.php:114 msgid "probe address" msgstr "Probe address" -#: src/Module/BaseAdmin.php:114 +#: src/Module/BaseAdmin.php:115 msgid "check webfinger" msgstr "Check WebFinger" -#: src/Module/BaseAdmin.php:116 +#: src/Module/BaseAdmin.php:117 msgid "Babel" msgstr "Babel" -#: src/Module/BaseAdmin.php:117 src/Module/Debug/ActivityPubConversion.php:138 +#: src/Module/BaseAdmin.php:118 src/Module/Debug/ActivityPubConversion.php:138 msgid "ActivityPub Conversion" msgstr "" -#: src/Module/BaseAdmin.php:126 +#: src/Module/BaseAdmin.php:127 msgid "Addon Features" msgstr "Addon features" -#: src/Module/BaseAdmin.php:127 +#: src/Module/BaseAdmin.php:128 msgid "User registrations waiting for confirmation" msgstr "User registrations awaiting confirmation" -#: src/Module/BaseProfile.php:55 src/Module/Contact.php:939 +#: src/Module/BaseApi.php:120 +#, php-format +msgid "API endpoint %s %s is not implemented" +msgstr "" + +#: src/Module/BaseApi.php:121 +msgid "" +"The API endpoint is currently not implemented but might be in the future." +msgstr "" + +#: src/Module/BaseApi.php:293 src/Module/BaseApi.php:309 +#: src/Module/BaseApi.php:325 +msgid "Too Many Requests" +msgstr "" + +#: src/Module/BaseProfile.php:51 src/Module/Contact.php:849 msgid "Profile Details" msgstr "Profile Details" -#: src/Module/BaseProfile.php:113 +#: src/Module/BaseProfile.php:109 msgid "Only You Can See This" msgstr "Only you can see this." -#: src/Module/BaseProfile.php:132 src/Module/BaseProfile.php:135 +#: src/Module/BaseProfile.php:114 src/Module/Profile/Schedule.php:82 +msgid "Scheduled Posts" +msgstr "" + +#: src/Module/BaseProfile.php:117 +msgid "Posts that are scheduled for publishing" +msgstr "" + +#: src/Module/BaseProfile.php:136 src/Module/BaseProfile.php:139 msgid "Tips for New Members" msgstr "Tips for New Members" @@ -7330,7 +6935,7 @@ msgstr "Forum search - %s" msgid "Account" msgstr "Account" -#: src/Module/BaseSettings.php:50 src/Module/Security/TwoFactor/Verify.php:94 +#: src/Module/BaseSettings.php:50 src/Module/Security/TwoFactor/Verify.php:95 #: src/Module/Settings/TwoFactor/Index.php:110 msgid "Two-factor authentication" msgstr "Two-factor authentication" @@ -7347,7 +6952,7 @@ msgstr "Manage Accounts" msgid "Connected apps" msgstr "Connected apps" -#: src/Module/BaseSettings.php:108 src/Module/Settings/UserExport.php:77 +#: src/Module/BaseSettings.php:108 src/Module/Settings/UserExport.php:76 msgid "Export personal data" msgstr "Export personal data" @@ -7355,71 +6960,424 @@ msgstr "Export personal data" msgid "Remove account" msgstr "Remove account" -#: src/Module/Bookmarklet.php:56 +#: src/Module/Bookmarklet.php:54 msgid "This page is missing a url parameter." msgstr "This page is missing a URL parameter." -#: src/Module/Bookmarklet.php:78 +#: src/Module/Bookmarklet.php:66 msgid "The post was created" msgstr "The post was created" -#: src/Module/Contact/Advanced.php:92 +#: src/Module/Contact.php:93 +#, php-format +msgid "%d contact edited." +msgid_plural "%d contacts edited." +msgstr[0] "%d contact edited." +msgstr[1] "%d contacts edited." + +#: src/Module/Contact.php:118 +msgid "Could not access contact record." +msgstr "Could not access contact record." + +#: src/Module/Contact.php:154 +msgid "Failed to update contact record." +msgstr "Failed to update contact record." + +#: src/Module/Contact.php:375 +msgid "You can't block yourself" +msgstr "" + +#: src/Module/Contact.php:381 +msgid "Contact has been blocked" +msgstr "Contact has been blocked" + +#: src/Module/Contact.php:381 +msgid "Contact has been unblocked" +msgstr "Contact has been unblocked" + +#: src/Module/Contact.php:389 +msgid "You can't ignore yourself" +msgstr "" + +#: src/Module/Contact.php:395 +msgid "Contact has been ignored" +msgstr "Contact has been ignored" + +#: src/Module/Contact.php:395 +msgid "Contact has been unignored" +msgstr "Contact has been unignored" + +#: src/Module/Contact.php:415 +#, php-format +msgid "You are mutual friends with %s" +msgstr "You are mutual friends with %s" + +#: src/Module/Contact.php:419 +#, php-format +msgid "You are sharing with %s" +msgstr "You are sharing with %s" + +#: src/Module/Contact.php:423 +#, php-format +msgid "%s is sharing with you" +msgstr "%s is sharing with you" + +#: src/Module/Contact.php:447 +msgid "Private communications are not available for this contact." +msgstr "Private communications are not available for this contact." + +#: src/Module/Contact.php:449 +msgid "Never" +msgstr "Never" + +#: src/Module/Contact.php:452 +msgid "(Update was not successful)" +msgstr "(Update was not successful)" + +#: src/Module/Contact.php:452 +msgid "(Update was successful)" +msgstr "(Update was successful)" + +#: src/Module/Contact.php:454 src/Module/Contact.php:1035 +msgid "Suggest friends" +msgstr "Suggest friends" + +#: src/Module/Contact.php:458 +#, php-format +msgid "Network type: %s" +msgstr "Network type: %s" + +#: src/Module/Contact.php:463 +msgid "Communications lost with this contact!" +msgstr "Communications lost with this contact!" + +#: src/Module/Contact.php:469 +msgid "Fetch further information for feeds" +msgstr "Fetch further information for feeds" + +#: src/Module/Contact.php:471 +msgid "" +"Fetch information like preview pictures, title and teaser from the feed " +"item. You can activate this if the feed doesn't contain much text. Keywords " +"are taken from the meta header in the feed item and are posted as hash tags." +msgstr "Fetch information like preview pictures, title and teaser from the feed item. You can activate this if the feed doesn't contain much text. Keywords are taken from the meta header in the feed item and are posted as hash tags." + +#: src/Module/Contact.php:474 +msgid "Fetch information" +msgstr "Fetch information" + +#: src/Module/Contact.php:475 +msgid "Fetch keywords" +msgstr "Fetch keywords" + +#: src/Module/Contact.php:476 +msgid "Fetch information and keywords" +msgstr "Fetch information and keywords" + +#: src/Module/Contact.php:488 src/Module/Contact.php:492 +#: src/Module/Contact.php:495 src/Module/Contact.php:499 +msgid "No mirroring" +msgstr "No mirroring" + +#: src/Module/Contact.php:489 +msgid "Mirror as forwarded posting" +msgstr "Mirror as forwarded posting" + +#: src/Module/Contact.php:490 src/Module/Contact.php:496 +#: src/Module/Contact.php:500 +msgid "Mirror as my own posting" +msgstr "Mirror as my own posting" + +#: src/Module/Contact.php:493 src/Module/Contact.php:497 +msgid "Native reshare" +msgstr "" + +#: src/Module/Contact.php:512 +msgid "Contact Information / Notes" +msgstr "Personal note" + +#: src/Module/Contact.php:513 +msgid "Contact Settings" +msgstr "Notification and privacy " + +#: src/Module/Contact.php:521 +msgid "Contact" +msgstr "Contact" + +#: src/Module/Contact.php:525 +msgid "Their personal note" +msgstr "Their personal note" + +#: src/Module/Contact.php:527 +msgid "Edit contact notes" +msgstr "Edit contact notes" + +#: src/Module/Contact.php:530 src/Module/Contact.php:1001 +#, php-format +msgid "Visit %s's profile [%s]" +msgstr "Visit %s's profile [%s]" + +#: src/Module/Contact.php:531 +msgid "Block/Unblock contact" +msgstr "Block/Unblock contact" + +#: src/Module/Contact.php:532 +msgid "Ignore contact" +msgstr "Ignore contact" + +#: src/Module/Contact.php:533 +msgid "View conversations" +msgstr "View conversations" + +#: src/Module/Contact.php:538 +msgid "Last update:" +msgstr "Last update:" + +#: src/Module/Contact.php:540 +msgid "Update public posts" +msgstr "Update public posts" + +#: src/Module/Contact.php:542 src/Module/Contact.php:1045 +msgid "Update now" +msgstr "Update now" + +#: src/Module/Contact.php:545 src/Module/Contact.php:788 +#: src/Module/Contact.php:1072 +msgid "Unignore" +msgstr "Unignore" + +#: src/Module/Contact.php:549 +msgid "Currently blocked" +msgstr "Currently blocked" + +#: src/Module/Contact.php:550 +msgid "Currently ignored" +msgstr "Currently ignored" + +#: src/Module/Contact.php:551 +msgid "Currently archived" +msgstr "Currently archived" + +#: src/Module/Contact.php:552 +msgid "Awaiting connection acknowledge" +msgstr "Awaiting connection acknowledgement " + +#: src/Module/Contact.php:553 src/Module/Notifications/Introductions.php:170 +msgid "Hide this contact from others" +msgstr "Hide this contact from others" + +#: src/Module/Contact.php:553 +msgid "" +"Replies/likes to your public posts may still be visible" +msgstr "Replies/Likes to your public posts may still be visible" + +#: src/Module/Contact.php:554 +msgid "Notification for new posts" +msgstr "Notification for new posts" + +#: src/Module/Contact.php:554 +msgid "Send a notification of every new post of this contact" +msgstr "Send notification for every new post from this contact" + +#: src/Module/Contact.php:556 +msgid "Keyword Deny List" +msgstr "" + +#: src/Module/Contact.php:556 +msgid "" +"Comma separated list of keywords that should not be converted to hashtags, " +"when \"Fetch information and keywords\" is selected" +msgstr "Comma separated list of keywords that should not be converted to hashtags, when \"Fetch information and keywords\" is selected" + +#: src/Module/Contact.php:574 src/Module/Settings/TwoFactor/Index.php:132 +msgid "Actions" +msgstr "Actions" + +#: src/Module/Contact.php:581 +msgid "Mirror postings from this contact" +msgstr "Mirror postings from this contact:" + +#: src/Module/Contact.php:583 +msgid "" +"Mark this contact as remote_self, this will cause friendica to repost new " +"entries from this contact." +msgstr "This will cause Friendica to repost new entries from this contact." + +#: src/Module/Contact.php:698 +msgid "Show all contacts" +msgstr "Show all contacts" + +#: src/Module/Contact.php:706 +msgid "Only show pending contacts" +msgstr "Only show pending contacts" + +#: src/Module/Contact.php:714 +msgid "Only show blocked contacts" +msgstr "Only show blocked contacts" + +#: src/Module/Contact.php:719 src/Module/Contact.php:766 +#: src/Object/Post.php:309 +msgid "Ignored" +msgstr "Ignored" + +#: src/Module/Contact.php:722 +msgid "Only show ignored contacts" +msgstr "Only show ignored contacts" + +#: src/Module/Contact.php:727 src/Module/Contact.php:767 +msgid "Archived" +msgstr "Archived" + +#: src/Module/Contact.php:730 +msgid "Only show archived contacts" +msgstr "Only show archived contacts" + +#: src/Module/Contact.php:735 src/Module/Contact.php:765 +msgid "Hidden" +msgstr "Hidden" + +#: src/Module/Contact.php:738 +msgid "Only show hidden contacts" +msgstr "Only show hidden contacts" + +#: src/Module/Contact.php:746 +msgid "Organize your contact groups" +msgstr "Organise your contact groups" + +#: src/Module/Contact.php:778 +msgid "Search your contacts" +msgstr "Search your contacts" + +#: src/Module/Contact.php:779 src/Module/Search/Index.php:194 +#, php-format +msgid "Results for: %s" +msgstr "Results for: %s" + +#: src/Module/Contact.php:786 +msgid "Update" +msgstr "Update" + +#: src/Module/Contact.php:790 +msgid "Batch Actions" +msgstr "Batch actions" + +#: src/Module/Contact.php:825 +msgid "Conversations started by this contact" +msgstr "Conversations started by this contact" + +#: src/Module/Contact.php:830 +msgid "Posts and Comments" +msgstr "Posts and Comments" + +#: src/Module/Contact.php:841 +msgid "Posts containing media objects" +msgstr "" + +#: src/Module/Contact.php:856 +msgid "View all known contacts" +msgstr "" + +#: src/Module/Contact.php:866 +msgid "Advanced Contact Settings" +msgstr "Advanced contact settings" + +#: src/Module/Contact.php:960 +msgid "Mutual Friendship" +msgstr "Mutual friendship" + +#: src/Module/Contact.php:964 +msgid "is a fan of yours" +msgstr "is a fan of yours" + +#: src/Module/Contact.php:968 +msgid "you are a fan of" +msgstr "I follow them" + +#: src/Module/Contact.php:986 +msgid "Pending outgoing contact request" +msgstr "Pending outgoing contact request" + +#: src/Module/Contact.php:988 +msgid "Pending incoming contact request" +msgstr "Pending incoming contact request" + +#: src/Module/Contact.php:1055 +msgid "Refetch contact data" +msgstr "Re-fetch contact data." + +#: src/Module/Contact.php:1066 +msgid "Toggle Blocked status" +msgstr "Toggle blocked status" + +#: src/Module/Contact.php:1074 +msgid "Toggle Ignored status" +msgstr "Toggle ignored status" + +#: src/Module/Contact.php:1081 src/Module/Contact/Revoke.php:96 +msgid "Revoke Follow" +msgstr "" + +#: src/Module/Contact.php:1083 +msgid "Revoke the follow from this contact" +msgstr "" + +#: src/Module/Contact/Advanced.php:93 msgid "Contact update failed." msgstr "Contact update failed." -#: src/Module/Contact/Advanced.php:109 +#: src/Module/Contact/Advanced.php:110 msgid "" "WARNING: This is highly advanced and if you enter incorrect" " information your communications with this contact may stop working." msgstr "Warning: These are highly advanced settings. If you enter incorrect information your communications with this contact may not working." -#: src/Module/Contact/Advanced.php:110 +#: src/Module/Contact/Advanced.php:111 msgid "" "Please use your browser 'Back' button now if you are " "uncertain what to do on this page." msgstr "Please use your browser 'Back' button now if you are uncertain what to do on this page." -#: src/Module/Contact/Advanced.php:130 +#: src/Module/Contact/Advanced.php:131 msgid "Return to contact editor" msgstr "Return to contact editor" -#: src/Module/Contact/Advanced.php:135 +#: src/Module/Contact/Advanced.php:136 msgid "Account Nickname" msgstr "Account nickname:" -#: src/Module/Contact/Advanced.php:136 +#: src/Module/Contact/Advanced.php:137 msgid "@Tagname - overrides Name/Nickname" msgstr "@Tag name - overrides name/nickname:" -#: src/Module/Contact/Advanced.php:137 +#: src/Module/Contact/Advanced.php:138 msgid "Account URL" msgstr "Account URL:" -#: src/Module/Contact/Advanced.php:138 +#: src/Module/Contact/Advanced.php:139 msgid "Account URL Alias" msgstr "Account URL alias" -#: src/Module/Contact/Advanced.php:139 +#: src/Module/Contact/Advanced.php:140 msgid "Friend Request URL" msgstr "Friend request URL:" -#: src/Module/Contact/Advanced.php:140 +#: src/Module/Contact/Advanced.php:141 msgid "Friend Confirm URL" msgstr "Friend confirm URL:" -#: src/Module/Contact/Advanced.php:141 +#: src/Module/Contact/Advanced.php:142 msgid "Notification Endpoint URL" msgstr "Notification endpoint URL" -#: src/Module/Contact/Advanced.php:142 +#: src/Module/Contact/Advanced.php:143 msgid "Poll/Feed URL" msgstr "Poll/Feed URL:" -#: src/Module/Contact/Advanced.php:143 +#: src/Module/Contact/Advanced.php:144 msgid "New photo from this URL" msgstr "New photo from this URL:" -#: src/Module/Contact/Contacts.php:31 src/Module/Conversation/Network.php:175 +#: src/Module/Contact/Contacts.php:31 src/Module/Conversation/Network.php:168 msgid "Invalid contact." msgstr "Invalid contact." @@ -7427,527 +7385,207 @@ msgstr "Invalid contact." msgid "No known contacts." msgstr "" -#: src/Module/Contact/Contacts.php:68 src/Module/Profile/Common.php:99 +#: src/Module/Contact/Contacts.php:68 src/Module/Profile/Common.php:98 msgid "No common contacts." msgstr "" -#: src/Module/Contact/Contacts.php:80 src/Module/Profile/Contacts.php:97 +#: src/Module/Contact/Contacts.php:80 src/Module/Profile/Contacts.php:96 #, php-format msgid "Follower (%s)" msgid_plural "Followers (%s)" msgstr[0] "Follower (%s)" msgstr[1] "Followers (%s)" -#: src/Module/Contact/Contacts.php:84 src/Module/Profile/Contacts.php:100 +#: src/Module/Contact/Contacts.php:84 src/Module/Profile/Contacts.php:99 #, php-format msgid "Following (%s)" msgid_plural "Following (%s)" msgstr[0] "Following (%s)" msgstr[1] "Following (%s)" -#: src/Module/Contact/Contacts.php:88 src/Module/Profile/Contacts.php:103 +#: src/Module/Contact/Contacts.php:88 src/Module/Profile/Contacts.php:102 #, php-format msgid "Mutual friend (%s)" msgid_plural "Mutual friends (%s)" msgstr[0] "Mutual friend (%s)" msgstr[1] "Mutual friends (%s)" -#: src/Module/Contact/Contacts.php:90 src/Module/Profile/Contacts.php:105 +#: src/Module/Contact/Contacts.php:90 src/Module/Profile/Contacts.php:104 #, php-format msgid "These contacts both follow and are followed by %s." msgstr "" -#: src/Module/Contact/Contacts.php:96 src/Module/Profile/Common.php:87 +#: src/Module/Contact/Contacts.php:96 src/Module/Profile/Common.php:86 #, php-format msgid "Common contact (%s)" msgid_plural "Common contacts (%s)" msgstr[0] "" msgstr[1] "" -#: src/Module/Contact/Contacts.php:98 src/Module/Profile/Common.php:89 +#: src/Module/Contact/Contacts.php:98 src/Module/Profile/Common.php:88 #, php-format msgid "" "Both %s and yourself have publicly interacted with these " "contacts (follow, comment or likes on public posts)." msgstr "" -#: src/Module/Contact/Contacts.php:104 src/Module/Profile/Contacts.php:111 +#: src/Module/Contact/Contacts.php:104 src/Module/Profile/Contacts.php:110 #, php-format msgid "Contact (%s)" msgid_plural "Contacts (%s)" msgstr[0] "Contact (%s)" msgstr[1] "Contacts (%s)" -#: src/Module/Contact.php:94 -#, php-format -msgid "%d contact edited." -msgid_plural "%d contacts edited." -msgstr[0] "%d contact edited." -msgstr[1] "%d contacts edited." - -#: src/Module/Contact.php:121 -msgid "Could not access contact record." -msgstr "Could not access contact record." - -#: src/Module/Contact.php:419 -msgid "Contact has been blocked" -msgstr "Contact has been blocked" - -#: src/Module/Contact.php:419 -msgid "Contact has been unblocked" -msgstr "Contact has been unblocked" - -#: src/Module/Contact.php:429 -msgid "Contact has been ignored" -msgstr "Contact has been ignored" - -#: src/Module/Contact.php:429 -msgid "Contact has been unignored" -msgstr "Contact has been unignored" - -#: src/Module/Contact.php:439 -msgid "Contact has been archived" -msgstr "Contact has been archived" - -#: src/Module/Contact.php:439 -msgid "Contact has been unarchived" -msgstr "Contact has been unarchived" - -#: src/Module/Contact.php:452 -msgid "Drop contact" -msgstr "Drop contact" - -#: src/Module/Contact.php:455 src/Module/Contact.php:879 -msgid "Do you really want to delete this contact?" -msgstr "Do you really want to delete this contact?" - -#: src/Module/Contact.php:468 -msgid "Contact has been removed." -msgstr "Contact has been removed." - -#: src/Module/Contact.php:496 -#, php-format -msgid "You are mutual friends with %s" -msgstr "You are mutual friends with %s" - -#: src/Module/Contact.php:500 -#, php-format -msgid "You are sharing with %s" -msgstr "You are sharing with %s" - -#: src/Module/Contact.php:504 -#, php-format -msgid "%s is sharing with you" -msgstr "%s is sharing with you" - -#: src/Module/Contact.php:528 -msgid "Private communications are not available for this contact." -msgstr "Private communications are not available for this contact." - -#: src/Module/Contact.php:530 -msgid "Never" -msgstr "Never" - -#: src/Module/Contact.php:533 -msgid "(Update was not successful)" -msgstr "(Update was not successful)" - -#: src/Module/Contact.php:533 -msgid "(Update was successful)" -msgstr "(Update was successful)" - -#: src/Module/Contact.php:535 src/Module/Contact.php:1136 -msgid "Suggest friends" -msgstr "Suggest friends" - -#: src/Module/Contact.php:539 -#, php-format -msgid "Network type: %s" -msgstr "Network type: %s" - -#: src/Module/Contact.php:544 -msgid "Communications lost with this contact!" -msgstr "Communications lost with this contact!" - -#: src/Module/Contact.php:550 -msgid "Fetch further information for feeds" -msgstr "Fetch further information for feeds" - -#: src/Module/Contact.php:552 -msgid "" -"Fetch information like preview pictures, title and teaser from the feed " -"item. You can activate this if the feed doesn't contain much text. Keywords " -"are taken from the meta header in the feed item and are posted as hash tags." -msgstr "Fetch information like preview pictures, title and teaser from the feed item. You can activate this if the feed doesn't contain much text. Keywords are taken from the meta header in the feed item and are posted as hash tags." - -#: src/Module/Contact.php:555 -msgid "Fetch information" -msgstr "Fetch information" - -#: src/Module/Contact.php:556 -msgid "Fetch keywords" -msgstr "Fetch keywords" - -#: src/Module/Contact.php:557 -msgid "Fetch information and keywords" -msgstr "Fetch information and keywords" - -#: src/Module/Contact.php:569 src/Module/Contact.php:573 -#: src/Module/Contact.php:576 src/Module/Contact.php:580 -msgid "No mirroring" -msgstr "No mirroring" - -#: src/Module/Contact.php:570 -msgid "Mirror as forwarded posting" -msgstr "Mirror as forwarded posting" - -#: src/Module/Contact.php:571 src/Module/Contact.php:577 -#: src/Module/Contact.php:581 -msgid "Mirror as my own posting" -msgstr "Mirror as my own posting" - -#: src/Module/Contact.php:574 src/Module/Contact.php:578 -msgid "Native reshare" -msgstr "" - -#: src/Module/Contact.php:593 -msgid "Contact Information / Notes" -msgstr "Personal note" - -#: src/Module/Contact.php:594 -msgid "Contact Settings" -msgstr "Notification and privacy " - -#: src/Module/Contact.php:602 -msgid "Contact" -msgstr "Contact" - -#: src/Module/Contact.php:606 -msgid "Their personal note" -msgstr "Their personal note" - -#: src/Module/Contact.php:608 -msgid "Edit contact notes" -msgstr "Edit contact notes" - -#: src/Module/Contact.php:611 src/Module/Contact.php:1104 -#, php-format -msgid "Visit %s's profile [%s]" -msgstr "Visit %s's profile [%s]" - -#: src/Module/Contact.php:612 -msgid "Block/Unblock contact" -msgstr "Block/Unblock contact" - -#: src/Module/Contact.php:613 -msgid "Ignore contact" -msgstr "Ignore contact" - -#: src/Module/Contact.php:614 -msgid "View conversations" -msgstr "View conversations" - -#: src/Module/Contact.php:619 -msgid "Last update:" -msgstr "Last update:" - -#: src/Module/Contact.php:621 -msgid "Update public posts" -msgstr "Update public posts" - -#: src/Module/Contact.php:623 src/Module/Contact.php:1146 -msgid "Update now" -msgstr "Update now" - -#: src/Module/Contact.php:626 src/Module/Contact.php:884 -#: src/Module/Contact.php:1173 -msgid "Unignore" -msgstr "Unignore" - -#: src/Module/Contact.php:630 -msgid "Currently blocked" -msgstr "Currently blocked" - -#: src/Module/Contact.php:631 -msgid "Currently ignored" -msgstr "Currently ignored" - -#: src/Module/Contact.php:632 -msgid "Currently archived" -msgstr "Currently archived" - -#: src/Module/Contact.php:633 -msgid "Awaiting connection acknowledge" -msgstr "Awaiting connection acknowledgement " - -#: src/Module/Contact.php:634 src/Module/Notifications/Introductions.php:177 -msgid "Hide this contact from others" -msgstr "Hide this contact from others" - -#: src/Module/Contact.php:634 -msgid "" -"Replies/likes to your public posts may still be visible" -msgstr "Replies/Likes to your public posts may still be visible" - -#: src/Module/Contact.php:635 -msgid "Notification for new posts" -msgstr "Notification for new posts" - -#: src/Module/Contact.php:635 -msgid "Send a notification of every new post of this contact" -msgstr "Send notification for every new post from this contact" - -#: src/Module/Contact.php:637 -msgid "Keyword Deny List" -msgstr "" - -#: src/Module/Contact.php:637 -msgid "" -"Comma separated list of keywords that should not be converted to hashtags, " -"when \"Fetch information and keywords\" is selected" -msgstr "Comma separated list of keywords that should not be converted to hashtags, when \"Fetch information and keywords\" is selected" - -#: src/Module/Contact.php:653 src/Module/Settings/TwoFactor/Index.php:132 -msgid "Actions" -msgstr "Actions" - -#: src/Module/Contact.php:660 -msgid "Mirror postings from this contact" -msgstr "Mirror postings from this contact:" - -#: src/Module/Contact.php:662 -msgid "" -"Mark this contact as remote_self, this will cause friendica to repost new " -"entries from this contact." -msgstr "This will cause Friendica to repost new entries from this contact." - -#: src/Module/Contact.php:794 -msgid "Show all contacts" -msgstr "Show all contacts" - -#: src/Module/Contact.php:802 -msgid "Only show pending contacts" -msgstr "Only show pending contacts" - -#: src/Module/Contact.php:810 -msgid "Only show blocked contacts" -msgstr "Only show blocked contacts" - -#: src/Module/Contact.php:815 src/Module/Contact.php:862 -msgid "Ignored" -msgstr "Ignored" - -#: src/Module/Contact.php:818 -msgid "Only show ignored contacts" -msgstr "Only show ignored contacts" - -#: src/Module/Contact.php:823 src/Module/Contact.php:863 -msgid "Archived" -msgstr "Archived" - -#: src/Module/Contact.php:826 -msgid "Only show archived contacts" -msgstr "Only show archived contacts" - -#: src/Module/Contact.php:831 src/Module/Contact.php:861 -msgid "Hidden" -msgstr "Hidden" - -#: src/Module/Contact.php:834 -msgid "Only show hidden contacts" -msgstr "Only show hidden contacts" - -#: src/Module/Contact.php:842 -msgid "Organize your contact groups" -msgstr "Organise your contact groups" - -#: src/Module/Contact.php:874 -msgid "Search your contacts" -msgstr "Search your contacts" - -#: src/Module/Contact.php:875 src/Module/Search/Index.php:193 -#, php-format -msgid "Results for: %s" -msgstr "Results for: %s" - -#: src/Module/Contact.php:885 src/Module/Contact.php:1182 -msgid "Archive" -msgstr "Archive" - -#: src/Module/Contact.php:885 src/Module/Contact.php:1182 -msgid "Unarchive" -msgstr "Unarchive" - -#: src/Module/Contact.php:888 -msgid "Batch Actions" -msgstr "Batch actions" - -#: src/Module/Contact.php:923 -msgid "Conversations started by this contact" -msgstr "Conversations started by this contact" - -#: src/Module/Contact.php:928 -msgid "Posts and Comments" -msgstr "Posts and Comments" - -#: src/Module/Contact.php:946 -msgid "View all known contacts" -msgstr "" - -#: src/Module/Contact.php:956 -msgid "Advanced Contact Settings" -msgstr "Advanced contact settings" - -#: src/Module/Contact.php:1063 -msgid "Mutual Friendship" -msgstr "Mutual friendship" - -#: src/Module/Contact.php:1067 -msgid "is a fan of yours" -msgstr "is a fan of yours" - -#: src/Module/Contact.php:1071 -msgid "you are a fan of" -msgstr "I follow them" - -#: src/Module/Contact.php:1089 -msgid "Pending outgoing contact request" -msgstr "Pending outgoing contact request" - -#: src/Module/Contact.php:1091 -msgid "Pending incoming contact request" -msgstr "Pending incoming contact request" - -#: src/Module/Contact.php:1156 -msgid "Refetch contact data" -msgstr "Re-fetch contact data." - -#: src/Module/Contact.php:1167 -msgid "Toggle Blocked status" -msgstr "Toggle blocked status" - -#: src/Module/Contact.php:1175 -msgid "Toggle Ignored status" -msgstr "Toggle ignored status" - -#: src/Module/Contact.php:1184 -msgid "Toggle Archive status" -msgstr "Toggle archive status" - -#: src/Module/Contact.php:1192 -msgid "Delete contact" -msgstr "Delete contact" - -#: src/Module/Contact/Poke.php:113 +#: src/Module/Contact/Poke.php:116 msgid "Error while sending poke, please retry." msgstr "" -#: src/Module/Contact/Poke.php:126 src/Module/Search/Acl.php:55 +#: src/Module/Contact/Poke.php:129 src/Module/Search/Acl.php:55 msgid "You must be logged in to use this module." msgstr "You must be logged in to use this module." -#: src/Module/Contact/Poke.php:149 +#: src/Module/Contact/Poke.php:152 msgid "Poke/Prod" msgstr "Poke/Prod" -#: src/Module/Contact/Poke.php:150 +#: src/Module/Contact/Poke.php:153 msgid "poke, prod or do other things to somebody" msgstr "Poke, prod or do other things to somebody" -#: src/Module/Contact/Poke.php:152 +#: src/Module/Contact/Poke.php:155 msgid "Choose what you wish to do to recipient" msgstr "Choose what you wish to do:" -#: src/Module/Contact/Poke.php:153 +#: src/Module/Contact/Poke.php:156 msgid "Make this post private" msgstr "Make this post private" -#: src/Module/Conversation/Community.php:69 +#: src/Module/Contact/Revoke.php:48 +msgid "Unknown contact." +msgstr "" + +#: src/Module/Contact/Revoke.php:58 src/Module/Group.php:109 +msgid "Contact is deleted." +msgstr "Contact is deleted." + +#: src/Module/Contact/Revoke.php:62 +msgid "Contact is being deleted." +msgstr "" + +#: src/Module/Contact/Revoke.php:76 +msgid "Follow was successfully revoked." +msgstr "" + +#: src/Module/Contact/Revoke.php:78 +msgid "" +"Follow was successfully revoked, however the remote contact won't be aware " +"of this revokation." +msgstr "" + +#: src/Module/Contact/Revoke.php:80 +msgid "" +"Unable to revoke follow, please try again later or contact the " +"administrator." +msgstr "" + +#: src/Module/Contact/Revoke.php:97 +msgid "" +"Do you really want to revoke this contact's follow? This cannot be undone " +"and they will have to manually follow you back again." +msgstr "" + +#: src/Module/Contact/Revoke.php:98 +#: src/Module/Notifications/Introductions.php:122 +#: src/Module/OAuth/Acknowledge.php:47 src/Module/Register.php:117 +msgid "Yes" +msgstr "Yes" + +#: src/Module/Conversation/Community.php:68 msgid "Local Community" msgstr "Local community" -#: src/Module/Conversation/Community.php:72 +#: src/Module/Conversation/Community.php:71 msgid "Posts from local users on this server" msgstr "Posts from local users on this server" -#: src/Module/Conversation/Community.php:80 +#: src/Module/Conversation/Community.php:79 msgid "Global Community" msgstr "Global community" -#: src/Module/Conversation/Community.php:83 +#: src/Module/Conversation/Community.php:82 msgid "Posts from users of the whole federated network" msgstr "Posts from users of the whole federated network" -#: src/Module/Conversation/Community.php:116 +#: src/Module/Conversation/Community.php:115 msgid "Own Contacts" msgstr "" -#: src/Module/Conversation/Community.php:120 +#: src/Module/Conversation/Community.php:119 msgid "Include" msgstr "" -#: src/Module/Conversation/Community.php:121 +#: src/Module/Conversation/Community.php:120 msgid "Hide" msgstr "" -#: src/Module/Conversation/Community.php:149 src/Module/Search/Index.php:140 -#: src/Module/Search/Index.php:180 +#: src/Module/Conversation/Community.php:137 src/Module/Search/Index.php:139 +#: src/Module/Search/Index.php:181 msgid "No results." msgstr "No results." -#: src/Module/Conversation/Community.php:174 +#: src/Module/Conversation/Community.php:162 msgid "" "This community stream shows all public posts received by this node. They may" " not reflect the opinions of this node’s users." msgstr "This community stream shows all public posts received by this node. They may not reflect the opinions of this node’s users." -#: src/Module/Conversation/Community.php:212 +#: src/Module/Conversation/Community.php:200 msgid "Community option not available." msgstr "Community option not available." -#: src/Module/Conversation/Community.php:228 +#: src/Module/Conversation/Community.php:216 msgid "Not available." msgstr "Not available." -#: src/Module/Conversation/Network.php:161 +#: src/Module/Conversation/Network.php:154 msgid "No such group" msgstr "No such group" -#: src/Module/Conversation/Network.php:165 +#: src/Module/Conversation/Network.php:158 #, php-format msgid "Group: %s" msgstr "Group: %s" -#: src/Module/Conversation/Network.php:241 +#: src/Module/Conversation/Network.php:234 msgid "Latest Activity" msgstr "Latest activity" -#: src/Module/Conversation/Network.php:244 +#: src/Module/Conversation/Network.php:237 msgid "Sort by latest activity" msgstr "Sort by latest activity" -#: src/Module/Conversation/Network.php:249 +#: src/Module/Conversation/Network.php:242 msgid "Latest Posts" msgstr "Latest posts" -#: src/Module/Conversation/Network.php:252 +#: src/Module/Conversation/Network.php:245 msgid "Sort by post received date" msgstr "Sort by post received date" -#: src/Module/Conversation/Network.php:257 -#: src/Module/Settings/Profile/Index.php:242 +#: src/Module/Conversation/Network.php:250 +#: src/Module/Settings/Profile/Index.php:228 msgid "Personal" msgstr "Personal" -#: src/Module/Conversation/Network.php:260 +#: src/Module/Conversation/Network.php:253 msgid "Posts that mention or involve you" msgstr "Posts mentioning or involving me" -#: src/Module/Conversation/Network.php:265 +#: src/Module/Conversation/Network.php:258 src/Object/Post.php:321 msgid "Starred" msgstr "Starred" -#: src/Module/Conversation/Network.php:268 +#: src/Module/Conversation/Network.php:261 msgid "Favourite Posts" msgstr "My favourite posts" @@ -8159,7 +7797,7 @@ msgid "Twitter Source / Tweet URL (requires API key)" msgstr "" #: src/Module/Debug/Feed.php:38 src/Module/Filer/SaveTag.php:40 -#: src/Module/Settings/Profile/Index.php:158 +#: src/Module/Settings/Profile/Index.php:142 msgid "You must be logged in to use this module" msgstr "You must be logged in to use this module" @@ -8200,15 +7838,15 @@ msgstr "Please select your time zone:" msgid "Only logged in users are permitted to perform a probing." msgstr "Only logged in users are permitted to perform a probing." -#: src/Module/Debug/Probe.php:53 +#: src/Module/Debug/Probe.php:54 msgid "Probe Diagnostic" msgstr "" -#: src/Module/Debug/Probe.php:54 +#: src/Module/Debug/Probe.php:55 msgid "Output" msgstr "" -#: src/Module/Debug/Probe.php:57 +#: src/Module/Debug/Probe.php:58 msgid "Lookup address" msgstr "Lookup address" @@ -8220,21 +7858,21 @@ msgstr "" msgid "Lookup address:" msgstr "" -#: src/Module/Delegation.php:147 +#: src/Module/Delegation.php:142 msgid "Switch between your accounts" msgstr "" -#: src/Module/Delegation.php:148 +#: src/Module/Delegation.php:143 msgid "Manage your accounts" msgstr "" -#: src/Module/Delegation.php:149 +#: src/Module/Delegation.php:144 msgid "" "Toggle between different identities or community/group pages which share " "your account details or which you have been granted \"manage\" permissions" msgstr "Accounts that I manage or own." -#: src/Module/Delegation.php:150 +#: src/Module/Delegation.php:145 msgid "Select an identity to manage: " msgstr "Select identity:" @@ -8242,89 +7880,89 @@ msgstr "Select identity:" msgid "No entries (some entries may be hidden)." msgstr "No entries (entries may be hidden)." -#: src/Module/Directory.php:99 +#: src/Module/Directory.php:93 msgid "Find on this site" msgstr "Find on this site" -#: src/Module/Directory.php:101 +#: src/Module/Directory.php:95 msgid "Results for:" msgstr "Results for:" -#: src/Module/Directory.php:103 +#: src/Module/Directory.php:97 msgid "Site Directory" msgstr "Site directory" -#: src/Module/Filer/RemoveTag.php:69 +#: src/Module/Filer/RemoveTag.php:68 msgid "Item was not removed" msgstr "" -#: src/Module/Filer/RemoveTag.php:72 +#: src/Module/Filer/RemoveTag.php:71 msgid "Item was not deleted" msgstr "" -#: src/Module/Filer/SaveTag.php:69 +#: src/Module/Filer/SaveTag.php:68 msgid "- select -" msgstr "- select -" -#: src/Module/Friendica.php:61 +#: src/Module/FriendSuggest.php:65 +msgid "Suggested contact not found." +msgstr "Suggested contact not found." + +#: src/Module/FriendSuggest.php:83 +msgid "Friend suggestion sent." +msgstr "Friend suggestion sent" + +#: src/Module/FriendSuggest.php:120 +msgid "Suggest Friends" +msgstr "Suggest friends" + +#: src/Module/FriendSuggest.php:123 +#, php-format +msgid "Suggest a friend for %s" +msgstr "Suggest a friend for %s" + +#: src/Module/Friendica.php:62 msgid "Installed addons/apps:" msgstr "Installed addons/apps:" -#: src/Module/Friendica.php:66 +#: src/Module/Friendica.php:67 msgid "No installed addons/apps" msgstr "No installed addons/apps" -#: src/Module/Friendica.php:71 +#: src/Module/Friendica.php:72 #, php-format msgid "Read about the Terms of Service of this node." msgstr "Read about the Terms of Service of this node." -#: src/Module/Friendica.php:78 +#: src/Module/Friendica.php:79 msgid "On this server the following remote servers are blocked." msgstr "On this server the following remote servers are blocked." -#: src/Module/Friendica.php:96 +#: src/Module/Friendica.php:97 #, php-format msgid "" "This is Friendica, version %s that is running at the web location %s. The " "database version is %s, the post update version is %s." msgstr "This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s." -#: src/Module/Friendica.php:101 +#: src/Module/Friendica.php:102 msgid "" "Please visit Friendi.ca to learn more " "about the Friendica project." msgstr "Please visit Friendi.ca to learn more about the Friendica project." -#: src/Module/Friendica.php:102 +#: src/Module/Friendica.php:103 msgid "Bug reports and issues: please visit" msgstr "Bug reports and issues: please visit" -#: src/Module/Friendica.php:102 +#: src/Module/Friendica.php:103 msgid "the bugtracker at github" msgstr "the bugtracker at github" -#: src/Module/Friendica.php:103 +#: src/Module/Friendica.php:104 msgid "Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca" msgstr "Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca" -#: src/Module/FriendSuggest.php:65 -msgid "Suggested contact not found." -msgstr "Suggested contact not found." - -#: src/Module/FriendSuggest.php:84 -msgid "Friend suggestion sent." -msgstr "Friend suggestion sent" - -#: src/Module/FriendSuggest.php:121 -msgid "Suggest Friends" -msgstr "Suggest friends" - -#: src/Module/FriendSuggest.php:124 -#, php-format -msgid "Suggest a friend for %s" -msgstr "Suggest a friend for %s" - #: src/Module/Group.php:61 msgid "Could not create group." msgstr "Could not create group." @@ -8341,10 +7979,6 @@ msgstr "" msgid "Unknown group." msgstr "Unknown group." -#: src/Module/Group.php:109 -msgid "Contact is deleted." -msgstr "Contact is deleted." - #: src/Module/Group.php:115 msgid "Unable to add the contact to the group." msgstr "Unable to add contact to group." @@ -8413,6 +8047,14 @@ msgstr "Click on a contact to add or remove it." msgid "Add contact to group" msgstr "Add contact to group" +#: src/Module/HCard.php:46 +msgid "No profile" +msgstr "No profile" + +#: src/Module/HTTPException/MethodNotAllowed.php:32 +msgid "Method Not Allowed." +msgstr "Method not allowed." + #: src/Module/Help.php:62 msgid "Help:" msgstr "Help:" @@ -8422,14 +8064,6 @@ msgstr "Help:" msgid "Welcome to %s" msgstr "Welcome to %s" -#: src/Module/HoverCard.php:47 -msgid "No profile" -msgstr "No profile" - -#: src/Module/HTTPException/MethodNotAllowed.php:32 -msgid "Method Not Allowed." -msgstr "Method not allowed." - #: src/Module/Install.php:188 msgid "Friendica Communications Server - Setup" msgstr "Friendica Communications Server - Setup" @@ -8587,40 +8221,40 @@ msgid "" " administrator email. This will allow you to enter the site admin panel." msgstr "Go to your new Friendica node registration page and register as new user. Remember to use the same email you have entered as administrator email. This will allow you to enter the site admin panel." -#: src/Module/Invite.php:55 +#: src/Module/Invite.php:56 msgid "Total invitation limit exceeded." msgstr "Total invitation limit exceeded" -#: src/Module/Invite.php:78 +#: src/Module/Invite.php:81 #, php-format msgid "%s : Not a valid email address." msgstr "%s : Not a valid email address" -#: src/Module/Invite.php:104 +#: src/Module/Invite.php:107 msgid "Please join us on Friendica" msgstr "Please join us on Friendica." -#: src/Module/Invite.php:113 +#: src/Module/Invite.php:116 msgid "Invitation limit exceeded. Please contact your site administrator." msgstr "Invitation limit is exceeded. Please contact your site administrator." -#: src/Module/Invite.php:117 +#: src/Module/Invite.php:120 #, php-format msgid "%s : Message delivery failed." msgstr "%s : Message delivery failed" -#: src/Module/Invite.php:121 +#: src/Module/Invite.php:124 #, php-format msgid "%d message sent." msgid_plural "%d messages sent." msgstr[0] "%d message sent." msgstr[1] "%d messages sent." -#: src/Module/Invite.php:139 +#: src/Module/Invite.php:142 msgid "You have no more invitations available" msgstr "You have no more invitations available." -#: src/Module/Invite.php:146 +#: src/Module/Invite.php:149 #, php-format msgid "" "Visit %s for a list of public sites that you can join. Friendica members on " @@ -8628,14 +8262,14 @@ msgid "" " other social networks." msgstr "Visit %s for a list of public sites that you can join. Friendica members on other sites can all connect with each other, as well as with members of many other social networks." -#: src/Module/Invite.php:148 +#: src/Module/Invite.php:151 #, php-format msgid "" "To accept this invitation, please visit and register at %s or any other " "public Friendica website." msgstr "To accept this invitation, please sign up at %s or any other public Friendica website." -#: src/Module/Invite.php:149 +#: src/Module/Invite.php:152 #, php-format msgid "" "Friendica sites all inter-connect to create a huge privacy-enhanced social " @@ -8644,82 +8278,82 @@ msgid "" "sites you can join." msgstr "Friendica sites are all inter-connect to create a large privacy-enhanced social web that is owned and controlled by its members. They can also connect with many traditional social networks. See %s for a list of alternate Friendica sites you can join." -#: src/Module/Invite.php:153 +#: src/Module/Invite.php:156 msgid "" "Our apologies. This system is not currently configured to connect with other" " public sites or invite members." msgstr "Our apologies. This system is not currently configured to connect with other public sites or invite members." -#: src/Module/Invite.php:156 +#: src/Module/Invite.php:159 msgid "" "Friendica sites all inter-connect to create a huge privacy-enhanced social " "web that is owned and controlled by its members. They can also connect with " "many traditional social networks." msgstr "Friendica sites are all inter-connect to create a huge privacy-enhanced social web that is owned and controlled by its members. Each site can also connect with many traditional social networks." -#: src/Module/Invite.php:155 +#: src/Module/Invite.php:158 #, php-format msgid "To accept this invitation, please visit and register at %s." msgstr "To accept this invitation, please visit and register at %s." -#: src/Module/Invite.php:163 +#: src/Module/Invite.php:166 msgid "Send invitations" msgstr "Send invitations" -#: src/Module/Invite.php:164 +#: src/Module/Invite.php:167 msgid "Enter email addresses, one per line:" msgstr "Enter email addresses, one per line:" -#: src/Module/Invite.php:168 +#: src/Module/Invite.php:171 msgid "" "You are cordially invited to join me and other close friends on Friendica - " "and help us to create a better social web." msgstr "You are cordially invited to join me and other close friends on Friendica - and help us to create a better social web." -#: src/Module/Invite.php:170 +#: src/Module/Invite.php:173 msgid "You will need to supply this invitation code: $invite_code" msgstr "You will need to supply this invitation code: $invite_code" -#: src/Module/Invite.php:170 +#: src/Module/Invite.php:173 msgid "" "Once you have registered, please connect with me via my profile page at:" msgstr "Once you have signed up, please connect with me via my profile page at:" -#: src/Module/Invite.php:172 +#: src/Module/Invite.php:175 msgid "" "For more information about the Friendica project and why we feel it is " "important, please visit http://friendi.ca" msgstr "For more information about the Friendica project and why we feel it is important, please visit http://friendi.ca" -#: src/Module/Item/Compose.php:46 +#: src/Module/Item/Compose.php:50 msgid "Please enter a post body." msgstr "Please enter a post body." -#: src/Module/Item/Compose.php:59 +#: src/Module/Item/Compose.php:63 msgid "This feature is only available with the frio theme." msgstr "This feature is only available with the Frio theme." -#: src/Module/Item/Compose.php:86 +#: src/Module/Item/Compose.php:90 msgid "Compose new personal note" msgstr "Compose new personal note" -#: src/Module/Item/Compose.php:95 +#: src/Module/Item/Compose.php:99 msgid "Compose new post" msgstr "Compose new post" -#: src/Module/Item/Compose.php:135 +#: src/Module/Item/Compose.php:141 msgid "Visibility" msgstr "Visibility" -#: src/Module/Item/Compose.php:156 +#: src/Module/Item/Compose.php:162 msgid "Clear the location" msgstr "Clear location" -#: src/Module/Item/Compose.php:157 +#: src/Module/Item/Compose.php:163 msgid "Location services are unavailable on your device" msgstr "Location services are unavailable on your device" -#: src/Module/Item/Compose.php:158 +#: src/Module/Item/Compose.php:164 msgid "" "Location services are disabled. Please check the website's permissions on " "your device" @@ -8744,68 +8378,73 @@ msgstr "" msgid "A Decentralized Social Network" msgstr "A Decentralized Social Network" -#: src/Module/Notifications/Introductions.php:78 +#: src/Module/Notifications/Introductions.php:77 msgid "Show Ignored Requests" msgstr "Show ignored requests." -#: src/Module/Notifications/Introductions.php:78 +#: src/Module/Notifications/Introductions.php:77 msgid "Hide Ignored Requests" msgstr "Hide ignored requests" -#: src/Module/Notifications/Introductions.php:94 -#: src/Module/Notifications/Introductions.php:163 +#: src/Module/Notifications/Introductions.php:93 +#: src/Module/Notifications/Introductions.php:156 msgid "Notification type:" msgstr "Notification type:" -#: src/Module/Notifications/Introductions.php:97 +#: src/Module/Notifications/Introductions.php:96 msgid "Suggested by:" msgstr "Suggested by:" -#: src/Module/Notifications/Introductions.php:122 +#: src/Module/Notifications/Introductions.php:121 msgid "Claims to be known to you: " msgstr "Says they know me:" -#: src/Module/Notifications/Introductions.php:131 +#: src/Module/Notifications/Introductions.php:122 +#: src/Module/OAuth/Acknowledge.php:48 src/Module/Register.php:118 +msgid "No" +msgstr "No" + +#: src/Module/Notifications/Introductions.php:130 msgid "Shall your connection be bidirectional or not?" msgstr "Shall your connection be in both directions or not?" -#: src/Module/Notifications/Introductions.php:132 +#: src/Module/Notifications/Introductions.php:131 #, 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 "Accepting %s as a friend allows %s to subscribe to your posts; you will also receive updates from them in your news feed." -#: src/Module/Notifications/Introductions.php:133 +#: src/Module/Notifications/Introductions.php:132 #, 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 "Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed." -#: src/Module/Notifications/Introductions.php:135 +#: src/Module/Notifications/Introductions.php:134 msgid "Friend" msgstr "Friend" -#: src/Module/Notifications/Introductions.php:136 +#: src/Module/Notifications/Introductions.php:135 msgid "Subscriber" msgstr "Subscriber" -#: src/Module/Notifications/Introductions.php:201 +#: src/Module/Notifications/Introductions.php:194 msgid "No introductions." msgstr "No introductions." -#: src/Module/Notifications/Introductions.php:202 -#: src/Module/Notifications/Notifications.php:133 +#: src/Module/Notifications/Introductions.php:195 +#: src/Module/Notifications/Notifications.php:121 #, php-format msgid "No more %s notifications." msgstr "No more %s notifications." -#: src/Module/Notifications/Notification.php:103 +#: src/Module/Notifications/Notification.php:107 msgid "You must be logged in to show this page." msgstr "You must be logged in to show this page." -#: src/Module/Notifications/Notifications.php:50 +#: src/Module/Notifications/Notifications.php:52 msgid "Network Notifications" msgstr "Network notifications" @@ -8813,53 +8452,91 @@ msgstr "Network notifications" msgid "System Notifications" msgstr "System notifications" -#: src/Module/Notifications/Notifications.php:66 +#: src/Module/Notifications/Notifications.php:64 msgid "Personal Notifications" msgstr "Personal notifications" -#: src/Module/Notifications/Notifications.php:74 +#: src/Module/Notifications/Notifications.php:70 msgid "Home Notifications" msgstr "Home notifications" -#: src/Module/Notifications/Notifications.php:138 +#: src/Module/Notifications/Notifications.php:126 msgid "Show unread" msgstr "Show unread" -#: src/Module/Notifications/Notifications.php:138 -msgid "Show all" -msgstr "Show all" +#: src/Module/OAuth/Acknowledge.php:44 +msgid "Authorize application connection" +msgstr "Authorise application connection" + +#: src/Module/OAuth/Acknowledge.php:46 +msgid "" +"Do you want to authorize this application to access your posts and contacts," +" and/or create new posts for you?" +msgstr "Do you want to authorise this application to access your posts and contacts and create new posts for you?" + +#: src/Module/OAuth/Authorize.php:55 +msgid "Unsupported or missing response type" +msgstr "" + +#: src/Module/OAuth/Authorize.php:60 src/Module/OAuth/Token.php:65 +msgid "Incomplete request data" +msgstr "" + +#: src/Module/OAuth/Authorize.php:107 +#, php-format +msgid "" +"Please copy the following authentication code into your application and " +"close this window: %s" +msgstr "" + +#: src/Module/OAuth/Token.php:89 +msgid "Unsupported or missing grant type" +msgstr "" #: src/Module/PermissionTooltip.php:25 #, php-format msgid "Wrong type \"%s\", expected one of: %s" msgstr "" -#: src/Module/PermissionTooltip.php:38 +#: src/Module/PermissionTooltip.php:42 msgid "Model not found" msgstr "" -#: src/Module/PermissionTooltip.php:60 +#: src/Module/PermissionTooltip.php:64 msgid "Remote privacy information not available." msgstr "Remote privacy information not available." -#: src/Module/PermissionTooltip.php:71 +#: src/Module/PermissionTooltip.php:73 msgid "Visible to:" msgstr "Visible to:" -#: src/Module/Photo.php:93 +#: src/Module/Photo.php:123 +msgid "The Photo is not available." +msgstr "" + +#: src/Module/Photo.php:136 #, php-format msgid "The Photo with id %s is not available." msgstr "The Photo with id %s is not available." -#: src/Module/Photo.php:111 +#: src/Module/Photo.php:169 +#, php-format +msgid "Invalid external resource with url %s." +msgstr "" + +#: src/Module/Photo.php:171 #, php-format msgid "Invalid photo with id %s." msgstr "Invalid photo with id %s." -#: src/Module/Profile/Contacts.php:121 +#: src/Module/Profile/Contacts.php:120 msgid "No contacts." msgstr "No contacts." +#: src/Module/Profile/Profile.php:82 +msgid "Profile not found." +msgstr "Profile not found." + #: src/Module/Profile/Profile.php:135 #, php-format msgid "" @@ -8884,188 +8561,218 @@ msgid "Birthday:" msgstr "Birthday:" #: src/Module/Profile/Profile.php:167 -#: src/Module/Settings/Profile/Index.php:260 src/Util/Temporal.php:165 +#: src/Module/Settings/Profile/Index.php:246 src/Util/Temporal.php:165 msgid "Age: " msgstr "Age: " #: src/Module/Profile/Profile.php:167 -#: src/Module/Settings/Profile/Index.php:260 src/Util/Temporal.php:165 +#: src/Module/Settings/Profile/Index.php:246 src/Util/Temporal.php:165 #, php-format msgid "%d year old" msgid_plural "%d years old" msgstr[0] "%d year old" msgstr[1] "%d years old" -#: src/Module/Profile/Profile.php:230 +#: src/Module/Profile/Profile.php:234 msgid "Forums:" msgstr "Forums:" -#: src/Module/Profile/Profile.php:242 +#: src/Module/Profile/Profile.php:246 msgid "View profile as:" msgstr "View profile as:" -#: src/Module/Profile/Profile.php:259 +#: src/Module/Profile/Profile.php:263 msgid "View as" msgstr "" -#: src/Module/Profile/Profile.php:322 src/Module/Profile/Profile.php:325 +#: src/Module/Profile/Profile.php:326 src/Module/Profile/Profile.php:329 #: src/Module/Profile/Status.php:65 src/Module/Profile/Status.php:68 -#: src/Protocol/Feed.php:945 src/Protocol/OStatus.php:1258 +#: src/Protocol/Feed.php:953 src/Protocol/OStatus.php:1242 #, php-format msgid "%s's timeline" msgstr "%s's timeline" -#: src/Module/Profile/Profile.php:323 src/Module/Profile/Status.php:66 -#: src/Protocol/Feed.php:949 src/Protocol/OStatus.php:1262 +#: src/Module/Profile/Profile.php:327 src/Module/Profile/Status.php:66 +#: src/Protocol/Feed.php:957 src/Protocol/OStatus.php:1246 #, php-format msgid "%s's posts" msgstr "%s's posts" -#: src/Module/Profile/Profile.php:324 src/Module/Profile/Status.php:67 -#: src/Protocol/Feed.php:952 src/Protocol/OStatus.php:1265 +#: src/Module/Profile/Profile.php:328 src/Module/Profile/Status.php:67 +#: src/Protocol/Feed.php:960 src/Protocol/OStatus.php:1249 #, php-format msgid "%s's comments" msgstr "%s's comments" -#: src/Module/Register.php:69 +#: src/Module/Profile/Schedule.php:84 +msgid "Scheduled" +msgstr "" + +#: src/Module/Profile/Schedule.php:85 +msgid "Content" +msgstr "" + +#: src/Module/Profile/Schedule.php:86 +msgid "Remove post" +msgstr "" + +#: src/Module/Register.php:71 msgid "Only parent users can create additional accounts." msgstr "Only parent users can create additional accounts." -#: src/Module/Register.php:101 +#: src/Module/Register.php:103 msgid "" "You may (optionally) fill in this form via OpenID by supplying your OpenID " "and clicking \"Register\"." msgstr "You may (optionally) fill in this form via OpenID by supplying your OpenID and clicking \"Register\"." -#: src/Module/Register.php:102 +#: src/Module/Register.php:104 msgid "" "If you are not familiar with OpenID, please leave that field blank and fill " "in the rest of the items." msgstr "If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items." -#: src/Module/Register.php:103 +#: src/Module/Register.php:105 msgid "Your OpenID (optional): " msgstr "Your OpenID (optional): " -#: src/Module/Register.php:112 +#: src/Module/Register.php:114 msgid "Include your profile in member directory?" msgstr "Include your profile in member directory?" -#: src/Module/Register.php:135 +#: src/Module/Register.php:137 msgid "Note for the admin" msgstr "Note for the admin" -#: src/Module/Register.php:135 +#: src/Module/Register.php:137 msgid "Leave a message for the admin, why you want to join this node" msgstr "Leave a message for the admin, why you want to join this node." -#: src/Module/Register.php:136 +#: src/Module/Register.php:138 msgid "Membership on this site is by invitation only." msgstr "Membership on this site is by invitation only." -#: src/Module/Register.php:137 +#: src/Module/Register.php:139 msgid "Your invitation code: " msgstr "Your invitation code: " -#: src/Module/Register.php:145 +#: src/Module/Register.php:147 msgid "Your Full Name (e.g. Joe Smith, real or real-looking): " msgstr "Your full name: " -#: src/Module/Register.php:146 +#: src/Module/Register.php:148 msgid "" "Your Email Address: (Initial information will be send there, so this has to " "be an existing address.)" msgstr "Your Email Address: (Initial information will be send there; so this must be an existing address.)" -#: src/Module/Register.php:147 +#: src/Module/Register.php:149 msgid "Please repeat your e-mail address:" msgstr "Please repeat your e-mail address:" -#: src/Module/Register.php:149 +#: src/Module/Register.php:151 msgid "Leave empty for an auto generated password." msgstr "Leave empty for an auto generated password." -#: src/Module/Register.php:151 +#: src/Module/Register.php:153 #, php-format msgid "" "Choose a profile nickname. This must begin with a text character. Your " "profile address on this site will then be \"nickname@%s\"." msgstr "Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be \"nickname@%s\"." -#: src/Module/Register.php:152 +#: src/Module/Register.php:154 msgid "Choose a nickname: " msgstr "Choose a nickname: " -#: src/Module/Register.php:161 +#: src/Module/Register.php:163 msgid "Import your profile to this friendica instance" msgstr "Import an existing Friendica profile to this node." -#: src/Module/Register.php:168 +#: src/Module/Register.php:170 msgid "Note: This node explicitly contains adult content" msgstr "Note: This node explicitly contains adult content" -#: src/Module/Register.php:170 src/Module/Settings/Delegation.php:155 +#: src/Module/Register.php:172 src/Module/Settings/Delegation.php:155 msgid "Parent Password:" msgstr "Parent password:" -#: src/Module/Register.php:170 src/Module/Settings/Delegation.php:155 +#: src/Module/Register.php:172 src/Module/Settings/Delegation.php:155 msgid "" "Please enter the password of the parent account to legitimize your request." msgstr "Please enter the password of the parent account to authorise this request." -#: src/Module/Register.php:199 +#: src/Module/Register.php:201 msgid "Password doesn't match." msgstr "Password doesn't match." -#: src/Module/Register.php:205 +#: src/Module/Register.php:207 msgid "Please enter your password." msgstr "Please enter your password." -#: src/Module/Register.php:247 +#: src/Module/Register.php:249 msgid "You have entered too much information." msgstr "You have entered too much information." -#: src/Module/Register.php:271 +#: src/Module/Register.php:272 msgid "Please enter the identical mail address in the second field." msgstr "Please enter the identical mail address in the second field." -#: src/Module/Register.php:298 +#: src/Module/Register.php:299 msgid "The additional account was created." msgstr "The additional account was created." -#: src/Module/Register.php:323 +#: src/Module/Register.php:324 msgid "" "Registration successful. Please check your email for further instructions." msgstr "Registration successful. Please check your email for further instructions." -#: src/Module/Register.php:327 +#: src/Module/Register.php:328 #, php-format msgid "" "Failed to send email message. Here your accout details:
login: %s
" "password: %s

You can change your password after login." msgstr "Failed to send email message. Here your account details:
login: %s
password: %s

You can change your password after login." -#: src/Module/Register.php:333 +#: src/Module/Register.php:334 msgid "Registration successful." msgstr "Registration successful." -#: src/Module/Register.php:338 src/Module/Register.php:345 +#: src/Module/Register.php:339 src/Module/Register.php:346 msgid "Your registration can not be processed." msgstr "Your registration cannot be processed." -#: src/Module/Register.php:344 +#: src/Module/Register.php:345 msgid "You have to leave a request note for the admin." msgstr "You have to leave a request note for the admin." -#: src/Module/Register.php:390 +#: src/Module/Register.php:391 msgid "Your registration is pending approval by the site owner." msgstr "Your registration is pending approval by the site administrator." -#: src/Module/RemoteFollow.php:67 +#: src/Module/RemoteFollow.php:62 +msgid "Profile unavailable." +msgstr "Profile unavailable." + +#: src/Module/RemoteFollow.php:68 +msgid "Invalid locator" +msgstr "Invalid locator" + +#: src/Module/RemoteFollow.php:75 msgid "The provided profile link doesn't seem to be valid" msgstr "The provided profile link doesn't seem to be valid" -#: src/Module/RemoteFollow.php:105 +#: src/Module/RemoteFollow.php:80 +msgid "" +"Remote subscription can't be done for your network. Please subscribe " +"directly on your system." +msgstr "Remote subscription can't be done for your network. Please subscribe directly on your system." + +#: src/Module/RemoteFollow.php:110 +msgid "Friend/Connection Request" +msgstr "Friend/Connection request" + +#: src/Module/RemoteFollow.php:111 #, php-format msgid "" "Enter your Webfinger address (user@domain.tld) or profile URL here. If this " @@ -9073,15 +8780,26 @@ msgid "" " or %s directly on your system." msgstr "Enter your WebFinger address (user@domain.tld) or profile URL here. If this isn't supported by your system, you have to subscribe to %s or %s directly on your system." -#: src/Module/Search/Index.php:55 +#: src/Module/RemoteFollow.php:112 +#, php-format +msgid "" +"If you are not yet a member of the free social web, follow " +"this link to find a public Friendica node and join us today." +msgstr "If you are not yet a member of the free social web, follow this link to find a public Friendica node and join us today." + +#: src/Module/RemoteFollow.php:113 +msgid "Your Webfinger address or profile URL:" +msgstr "Your WebFinger address or profile URL:" + +#: src/Module/Search/Index.php:54 msgid "Only logged in users are permitted to perform a search." msgstr "Only logged in users are permitted to perform a search." -#: src/Module/Search/Index.php:77 +#: src/Module/Search/Index.php:76 msgid "Only one search per minute is permitted for not logged in users." msgstr "Only one search per minute is permitted for not logged in users." -#: src/Module/Search/Index.php:191 +#: src/Module/Search/Index.php:192 #, php-format msgid "Items tagged with: %s" msgstr "Items tagged with: %s" @@ -9098,49 +8816,49 @@ msgstr "Search term already saved." msgid "Search term was not removed." msgstr "" -#: src/Module/Security/Login.php:101 +#: src/Module/Security/Login.php:105 msgid "Create a New Account" msgstr "Create a new account" -#: src/Module/Security/Login.php:126 +#: src/Module/Security/Login.php:130 msgid "Your OpenID: " msgstr "Your OpenID: " -#: src/Module/Security/Login.php:129 +#: src/Module/Security/Login.php:133 msgid "" "Please enter your username and password to add the OpenID to your existing " "account." msgstr "Please enter your username and password to add the OpenID to your existing account." -#: src/Module/Security/Login.php:131 +#: src/Module/Security/Login.php:135 msgid "Or login using OpenID: " msgstr "Or login with OpenID: " -#: src/Module/Security/Login.php:145 +#: src/Module/Security/Login.php:149 msgid "Password: " msgstr "Password: " -#: src/Module/Security/Login.php:146 +#: src/Module/Security/Login.php:150 msgid "Remember me" msgstr "Remember me" -#: src/Module/Security/Login.php:155 +#: src/Module/Security/Login.php:159 msgid "Forgot your password?" msgstr "Forgot your password?" -#: src/Module/Security/Login.php:158 +#: src/Module/Security/Login.php:162 msgid "Website Terms of Service" msgstr "Website Terms of Service" -#: src/Module/Security/Login.php:159 +#: src/Module/Security/Login.php:163 msgid "terms of service" msgstr "Terms of service" -#: src/Module/Security/Login.php:161 +#: src/Module/Security/Login.php:165 msgid "Website Privacy Policy" msgstr "Website Privacy Policy" -#: src/Module/Security/Login.php:162 +#: src/Module/Security/Login.php:166 msgid "privacy policy" msgstr "Privacy policy" @@ -9164,57 +8882,57 @@ msgid "" "account to add the OpenID to it." msgstr "Account not found. Please register a new account or login to your existing account to add the OpenID." -#: src/Module/Security/TwoFactor/Recovery.php:60 +#: src/Module/Security/TwoFactor/Recovery.php:61 #, php-format msgid "Remaining recovery codes: %d" msgstr "Remaining recovery codes: %d" -#: src/Module/Security/TwoFactor/Recovery.php:64 -#: src/Module/Security/TwoFactor/Verify.php:75 +#: src/Module/Security/TwoFactor/Recovery.php:65 +#: src/Module/Security/TwoFactor/Verify.php:76 #: src/Module/Settings/TwoFactor/Verify.php:82 msgid "Invalid code, please retry." msgstr "Invalid code, please try again." -#: src/Module/Security/TwoFactor/Recovery.php:83 +#: src/Module/Security/TwoFactor/Recovery.php:84 msgid "Two-factor recovery" msgstr "Two-factor recovery" -#: src/Module/Security/TwoFactor/Recovery.php:84 +#: src/Module/Security/TwoFactor/Recovery.php:85 msgid "" "

You can enter one of your one-time recovery codes in case you lost access" " to your mobile device.

" msgstr "

You can enter one of your one-time recovery codes in case you lost access to your mobile device.

" -#: src/Module/Security/TwoFactor/Recovery.php:85 -#: src/Module/Security/TwoFactor/Verify.php:98 +#: src/Module/Security/TwoFactor/Recovery.php:86 +#: src/Module/Security/TwoFactor/Verify.php:99 #, php-format msgid "Don’t have your phone? Enter a two-factor recovery code" msgstr "Don’t have your phone? Enter a two-factor recovery code" -#: src/Module/Security/TwoFactor/Recovery.php:86 +#: src/Module/Security/TwoFactor/Recovery.php:87 msgid "Please enter a recovery code" msgstr "Please enter a recovery code" -#: src/Module/Security/TwoFactor/Recovery.php:87 +#: src/Module/Security/TwoFactor/Recovery.php:88 msgid "Submit recovery code and complete login" msgstr "Submit recovery code and complete login" -#: src/Module/Security/TwoFactor/Verify.php:95 +#: src/Module/Security/TwoFactor/Verify.php:96 msgid "" "

Open the two-factor authentication app on your device to get an " "authentication code and verify your identity.

" msgstr "

Open the two-factor authentication app on your device to get an authentication code and verify your identity.

" -#: src/Module/Security/TwoFactor/Verify.php:99 +#: src/Module/Security/TwoFactor/Verify.php:100 #: src/Module/Settings/TwoFactor/Verify.php:141 msgid "Please enter a code from your authentication app" msgstr "Please enter a code from your authentication app" -#: src/Module/Security/TwoFactor/Verify.php:100 +#: src/Module/Security/TwoFactor/Verify.php:101 msgid "This is my two-factor authenticator app device" msgstr "" -#: src/Module/Security/TwoFactor/Verify.php:101 +#: src/Module/Security/TwoFactor/Verify.php:102 msgid "Verify code and complete login" msgstr "Verify code and complete login" @@ -9296,254 +9014,261 @@ msgstr "Add" msgid "No entries." msgstr "No entries." -#: src/Module/Settings/Display.php:105 +#: src/Module/Settings/Display.php:108 msgid "The theme you chose isn't available." msgstr "The chosen theme isn't available." -#: src/Module/Settings/Display.php:142 +#: src/Module/Settings/Display.php:147 #, php-format msgid "%s - (Unsupported)" msgstr "%s - (Unsupported)" -#: src/Module/Settings/Display.php:188 +#: src/Module/Settings/Display.php:193 msgid "Display Settings" msgstr "Display Settings" -#: src/Module/Settings/Display.php:190 +#: src/Module/Settings/Display.php:195 msgid "General Theme Settings" msgstr "Themes" -#: src/Module/Settings/Display.php:191 +#: src/Module/Settings/Display.php:196 msgid "Custom Theme Settings" msgstr "Theme customisation" -#: src/Module/Settings/Display.php:192 +#: src/Module/Settings/Display.php:197 msgid "Content Settings" msgstr "Content/Layout" -#: src/Module/Settings/Display.php:193 view/theme/duepuntozero/config.php:70 +#: src/Module/Settings/Display.php:198 view/theme/duepuntozero/config.php:70 #: view/theme/frio/config.php:161 view/theme/quattro/config.php:72 #: view/theme/vier/config.php:120 msgid "Theme settings" msgstr "Theme settings" -#: src/Module/Settings/Display.php:194 +#: src/Module/Settings/Display.php:199 msgid "Calendar" msgstr "Calendar" -#: src/Module/Settings/Display.php:200 +#: src/Module/Settings/Display.php:205 msgid "Display Theme:" msgstr "Display theme:" -#: src/Module/Settings/Display.php:201 +#: src/Module/Settings/Display.php:206 msgid "Mobile Theme:" msgstr "Mobile theme:" -#: src/Module/Settings/Display.php:204 +#: src/Module/Settings/Display.php:209 msgid "Number of items to display per page:" msgstr "Number of items displayed per page:" -#: src/Module/Settings/Display.php:204 src/Module/Settings/Display.php:205 +#: src/Module/Settings/Display.php:209 src/Module/Settings/Display.php:210 msgid "Maximum of 100 items" msgstr "Maximum of 100 items" -#: src/Module/Settings/Display.php:205 +#: src/Module/Settings/Display.php:210 msgid "Number of items to display per page when viewed from mobile device:" msgstr "Number of items displayed per page on mobile devices:" -#: src/Module/Settings/Display.php:206 +#: src/Module/Settings/Display.php:211 msgid "Update browser every xx seconds" msgstr "Update browser every so many seconds:" -#: src/Module/Settings/Display.php:206 +#: src/Module/Settings/Display.php:211 msgid "Minimum of 10 seconds. Enter -1 to disable it." msgstr "Minimum 10 seconds; to disable -1." -#: src/Module/Settings/Display.php:207 +#: src/Module/Settings/Display.php:212 msgid "Automatic updates only at the top of the post stream pages" msgstr "Automatic updates only at the top of the post stream pages" -#: src/Module/Settings/Display.php:207 +#: src/Module/Settings/Display.php:212 msgid "" "Auto update may add new posts at the top of the post stream pages, which can" " affect the scroll position and perturb normal reading if it happens " "anywhere else the top of the page." msgstr "Auto update may add new posts at the top of the post stream pages. This can affect the scroll position and perturb normal reading if something happens anywhere else the top of the page." -#: src/Module/Settings/Display.php:208 -msgid "Don't show emoticons" -msgstr "Don't show emoticons" +#: src/Module/Settings/Display.php:213 +msgid "Display emoticons" +msgstr "" -#: src/Module/Settings/Display.php:208 -msgid "" -"Normally emoticons are replaced with matching symbols. This setting disables" -" this behaviour." -msgstr "Normally emoticons are replaced with matching symbols. This setting disables this behaviour." +#: src/Module/Settings/Display.php:213 +msgid "When enabled, emoticons are replaced with matching symbols." +msgstr "" -#: src/Module/Settings/Display.php:209 +#: src/Module/Settings/Display.php:214 msgid "Infinite scroll" msgstr "Infinite scroll" -#: src/Module/Settings/Display.php:209 +#: src/Module/Settings/Display.php:214 msgid "Automatic fetch new items when reaching the page end." msgstr "Automatic fetch new items when reaching the page end." -#: src/Module/Settings/Display.php:210 -msgid "Disable Smart Threading" -msgstr "Disable smart threading" - -#: src/Module/Settings/Display.php:210 -msgid "Disable the automatic suppression of extraneous thread indentation." -msgstr "Disable the automatic suppression of extraneous thread indentation." - -#: src/Module/Settings/Display.php:211 -msgid "Hide the Dislike feature" -msgstr "Hide the Dislike feature" - -#: src/Module/Settings/Display.php:211 -msgid "Hides the Dislike button and dislike reactions on posts and comments." -msgstr "Hides the Dislike button and Dislike reactions on posts and comments." - -#: src/Module/Settings/Display.php:212 -msgid "Display the resharer" -msgstr "" - -#: src/Module/Settings/Display.php:212 -msgid "Display the first resharer as icon and text on a reshared item." -msgstr "" - -#: src/Module/Settings/Display.php:213 -msgid "Stay local" -msgstr "" - -#: src/Module/Settings/Display.php:213 -msgid "Don't go to a remote system when following a contact link." +#: src/Module/Settings/Display.php:215 +msgid "Enable Smart Threading" msgstr "" #: src/Module/Settings/Display.php:215 +msgid "Enable the automatic suppression of extraneous thread indentation." +msgstr "" + +#: src/Module/Settings/Display.php:216 +msgid "Display the Dislike feature" +msgstr "" + +#: src/Module/Settings/Display.php:216 +msgid "" +"Display the Dislike button and dislike reactions on posts and comments." +msgstr "" + +#: src/Module/Settings/Display.php:217 +msgid "Display the resharer" +msgstr "" + +#: src/Module/Settings/Display.php:217 +msgid "Display the first resharer as icon and text on a reshared item." +msgstr "" + +#: src/Module/Settings/Display.php:218 +msgid "Stay local" +msgstr "" + +#: src/Module/Settings/Display.php:218 +msgid "Don't go to a remote system when following a contact link." +msgstr "" + +#: src/Module/Settings/Display.php:220 msgid "Beginning of week:" msgstr "Week begins: " -#: src/Module/Settings/Profile/Index.php:85 +#: src/Module/Settings/Profile/Index.php:84 msgid "Profile Name is required." msgstr "Profile name is required." -#: src/Module/Settings/Profile/Index.php:137 +#: src/Module/Settings/Profile/Index.php:132 msgid "Profile couldn't be updated." msgstr "Profile couldn't be updated." -#: src/Module/Settings/Profile/Index.php:187 -#: src/Module/Settings/Profile/Index.php:207 +#: src/Module/Settings/Profile/Index.php:173 +#: src/Module/Settings/Profile/Index.php:193 msgid "Label:" msgstr "Label:" -#: src/Module/Settings/Profile/Index.php:188 -#: src/Module/Settings/Profile/Index.php:208 +#: src/Module/Settings/Profile/Index.php:174 +#: src/Module/Settings/Profile/Index.php:194 msgid "Value:" msgstr "Value:" -#: src/Module/Settings/Profile/Index.php:198 -#: src/Module/Settings/Profile/Index.php:218 +#: src/Module/Settings/Profile/Index.php:184 +#: src/Module/Settings/Profile/Index.php:204 msgid "Field Permissions" msgstr "Field Permissions" -#: src/Module/Settings/Profile/Index.php:199 -#: src/Module/Settings/Profile/Index.php:219 +#: src/Module/Settings/Profile/Index.php:185 +#: src/Module/Settings/Profile/Index.php:205 msgid "(click to open/close)" msgstr "(reveal/hide)" -#: src/Module/Settings/Profile/Index.php:205 +#: src/Module/Settings/Profile/Index.php:191 msgid "Add a new profile field" msgstr "Add a new profile field" -#: src/Module/Settings/Profile/Index.php:235 +#: src/Module/Settings/Profile/Index.php:221 msgid "Profile Actions" msgstr "Profile actions" -#: src/Module/Settings/Profile/Index.php:236 +#: src/Module/Settings/Profile/Index.php:222 msgid "Edit Profile Details" msgstr "Edit Profile Details" -#: src/Module/Settings/Profile/Index.php:238 +#: src/Module/Settings/Profile/Index.php:224 msgid "Change Profile Photo" msgstr "Change profile photo" -#: src/Module/Settings/Profile/Index.php:243 +#: src/Module/Settings/Profile/Index.php:229 msgid "Profile picture" msgstr "Profile picture" -#: src/Module/Settings/Profile/Index.php:244 +#: src/Module/Settings/Profile/Index.php:230 msgid "Location" msgstr "Location" -#: src/Module/Settings/Profile/Index.php:245 src/Util/Temporal.php:93 +#: src/Module/Settings/Profile/Index.php:231 src/Util/Temporal.php:93 #: src/Util/Temporal.php:95 msgid "Miscellaneous" msgstr "Miscellaneous" -#: src/Module/Settings/Profile/Index.php:246 +#: src/Module/Settings/Profile/Index.php:232 msgid "Custom Profile Fields" msgstr "Custom Profile Fields" -#: src/Module/Settings/Profile/Index.php:248 src/Module/Welcome.php:58 +#: src/Module/Settings/Profile/Index.php:234 src/Module/Welcome.php:58 msgid "Upload Profile Photo" msgstr "Upload profile photo" -#: src/Module/Settings/Profile/Index.php:252 +#: src/Module/Settings/Profile/Index.php:238 msgid "Display name:" msgstr "Display name:" -#: src/Module/Settings/Profile/Index.php:255 +#: src/Module/Settings/Profile/Index.php:241 msgid "Street Address:" msgstr "Street address:" -#: src/Module/Settings/Profile/Index.php:256 +#: src/Module/Settings/Profile/Index.php:242 msgid "Locality/City:" msgstr "Locality/City:" -#: src/Module/Settings/Profile/Index.php:257 +#: src/Module/Settings/Profile/Index.php:243 msgid "Region/State:" msgstr "Region/State:" -#: src/Module/Settings/Profile/Index.php:258 +#: src/Module/Settings/Profile/Index.php:244 msgid "Postal/Zip Code:" msgstr "Postcode:" -#: src/Module/Settings/Profile/Index.php:259 +#: src/Module/Settings/Profile/Index.php:245 msgid "Country:" msgstr "Country:" -#: src/Module/Settings/Profile/Index.php:261 +#: src/Module/Settings/Profile/Index.php:247 msgid "XMPP (Jabber) address:" msgstr "XMPP (Jabber) address:" -#: src/Module/Settings/Profile/Index.php:261 +#: src/Module/Settings/Profile/Index.php:247 msgid "" -"The XMPP address will be propagated to your contacts so that they can follow" -" you." -msgstr "The XMPP address will be propagated to your contacts so that they can follow you." +"The XMPP address will be published so that people can follow you there." +msgstr "" -#: src/Module/Settings/Profile/Index.php:262 +#: src/Module/Settings/Profile/Index.php:248 +msgid "Matrix (Element) address:" +msgstr "" + +#: src/Module/Settings/Profile/Index.php:248 +msgid "" +"The Matrix address will be published so that people can follow you there." +msgstr "" + +#: src/Module/Settings/Profile/Index.php:249 msgid "Homepage URL:" msgstr "Homepage URL:" -#: src/Module/Settings/Profile/Index.php:263 +#: src/Module/Settings/Profile/Index.php:250 msgid "Public Keywords:" msgstr "Public keywords:" -#: src/Module/Settings/Profile/Index.php:263 +#: src/Module/Settings/Profile/Index.php:250 msgid "(Used for suggesting potential friends, can be seen by others)" msgstr "Used for suggesting potential friends, can be seen by others." -#: src/Module/Settings/Profile/Index.php:264 +#: src/Module/Settings/Profile/Index.php:251 msgid "Private Keywords:" msgstr "Private keywords:" -#: src/Module/Settings/Profile/Index.php:264 +#: src/Module/Settings/Profile/Index.php:251 msgid "(Used for searching profiles, never shown to others)" msgstr "Used for searching profiles, never shown to others." -#: src/Module/Settings/Profile/Index.php:265 +#: src/Module/Settings/Profile/Index.php:252 #, php-format msgid "" "

Custom fields appear on your profile page.

\n" @@ -9553,74 +9278,74 @@ msgid "" "\t\t\t\t

Non-public fields can only be seen by the selected Friendica contacts or the Friendica contacts in the selected groups.

" msgstr "

Custom fields appear on your profile page.

\n\t\t\t\t

You can use BBCodes in the field values.

\n\t\t\t\t

Reorder by dragging the field title.

\n\t\t\t\t

Empty the label field to remove a custom field.

\n\t\t\t\t

Non-public fields can only be seen by the selected Friendica contacts or the Friendica contacts in the selected groups.

" -#: src/Module/Settings/Profile/Photo/Crop.php:102 -#: src/Module/Settings/Profile/Photo/Crop.php:118 -#: src/Module/Settings/Profile/Photo/Crop.php:134 -#: src/Module/Settings/Profile/Photo/Index.php:103 +#: src/Module/Settings/Profile/Photo/Crop.php:108 +#: src/Module/Settings/Profile/Photo/Crop.php:126 +#: src/Module/Settings/Profile/Photo/Crop.php:144 +#: src/Module/Settings/Profile/Photo/Index.php:102 #, php-format msgid "Image size reduction [%s] failed." msgstr "Image size reduction [%s] failed." -#: src/Module/Settings/Profile/Photo/Crop.php:139 +#: src/Module/Settings/Profile/Photo/Crop.php:151 msgid "" "Shift-reload the page or clear browser cache if the new photo does not " "display immediately." msgstr "Shift-reload the page or clear browser cache if the new photo does not display immediately." -#: src/Module/Settings/Profile/Photo/Crop.php:147 +#: src/Module/Settings/Profile/Photo/Crop.php:156 msgid "Unable to process image" msgstr "Unable to process image" -#: src/Module/Settings/Profile/Photo/Crop.php:166 +#: src/Module/Settings/Profile/Photo/Crop.php:175 msgid "Photo not found." msgstr "Photo not found." -#: src/Module/Settings/Profile/Photo/Crop.php:190 +#: src/Module/Settings/Profile/Photo/Crop.php:197 msgid "Profile picture successfully updated." msgstr "Profile picture successfully updated." -#: src/Module/Settings/Profile/Photo/Crop.php:213 -#: src/Module/Settings/Profile/Photo/Crop.php:217 +#: src/Module/Settings/Profile/Photo/Crop.php:223 +#: src/Module/Settings/Profile/Photo/Crop.php:227 msgid "Crop Image" msgstr "Crop Image" -#: src/Module/Settings/Profile/Photo/Crop.php:214 +#: src/Module/Settings/Profile/Photo/Crop.php:224 msgid "Please adjust the image cropping for optimum viewing." msgstr "Please adjust the image cropping for optimum viewing." -#: src/Module/Settings/Profile/Photo/Crop.php:216 +#: src/Module/Settings/Profile/Photo/Crop.php:226 msgid "Use Image As Is" msgstr "Use image as it is." -#: src/Module/Settings/Profile/Photo/Index.php:47 +#: src/Module/Settings/Profile/Photo/Index.php:46 msgid "Missing uploaded image." msgstr "Missing uploaded image." -#: src/Module/Settings/Profile/Photo/Index.php:126 +#: src/Module/Settings/Profile/Photo/Index.php:125 msgid "Profile Picture Settings" msgstr "Profile Picture Settings" -#: src/Module/Settings/Profile/Photo/Index.php:127 +#: src/Module/Settings/Profile/Photo/Index.php:126 msgid "Current Profile Picture" msgstr "Current Profile Picture" -#: src/Module/Settings/Profile/Photo/Index.php:128 +#: src/Module/Settings/Profile/Photo/Index.php:127 msgid "Upload Profile Picture" msgstr "Upload Profile Picture" -#: src/Module/Settings/Profile/Photo/Index.php:129 +#: src/Module/Settings/Profile/Photo/Index.php:128 msgid "Upload Picture:" msgstr "Upload Picture:" -#: src/Module/Settings/Profile/Photo/Index.php:134 +#: src/Module/Settings/Profile/Photo/Index.php:133 msgid "or" msgstr "or" -#: src/Module/Settings/Profile/Photo/Index.php:136 +#: src/Module/Settings/Profile/Photo/Index.php:135 msgid "skip this step" msgstr "skip this step" -#: src/Module/Settings/Profile/Photo/Index.php:138 +#: src/Module/Settings/Profile/Photo/Index.php:137 msgid "select a photo from your photo albums" msgstr "select a photo from your photo albums" @@ -9914,32 +9639,32 @@ msgstr "" msgid "Verify code and enable two-factor authentication" msgstr "Verify code and enable two-factor authentication" -#: src/Module/Settings/UserExport.php:69 +#: src/Module/Settings/UserExport.php:68 msgid "Export account" msgstr "Export account" -#: src/Module/Settings/UserExport.php:69 +#: src/Module/Settings/UserExport.php:68 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 "Export your account info and contacts. Use this to backup your account or to move it to another server." -#: src/Module/Settings/UserExport.php:70 +#: src/Module/Settings/UserExport.php:69 msgid "Export all" msgstr "Export all" -#: src/Module/Settings/UserExport.php:70 +#: src/Module/Settings/UserExport.php:69 msgid "" "Export your account 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 "Export your account 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)" -#: src/Module/Settings/UserExport.php:71 +#: src/Module/Settings/UserExport.php:70 msgid "Export Contacts to CSV" msgstr "Export contacts to CSV" -#: src/Module/Settings/UserExport.php:71 +#: src/Module/Settings/UserExport.php:70 msgid "" "Export the list of the accounts you are following as CSV file. Compatible to" " e.g. Mastodon." @@ -9949,10 +9674,6 @@ msgstr "Export the list of the accounts you are following as CSV file. Compatibl msgid "Bad Request" msgstr "Bad Request" -#: src/Module/Special/HTTPException.php:50 -msgid "Unauthorized" -msgstr "Unauthorized" - #: src/Module/Special/HTTPException.php:51 msgid "Forbidden" msgstr "Forbidden" @@ -9961,10 +9682,6 @@ msgstr "Forbidden" msgid "Not Found" msgstr "Not found" -#: src/Module/Special/HTTPException.php:53 -msgid "Internal Server Error" -msgstr "Internal Server Error" - #: src/Module/Special/HTTPException.php:54 msgid "Service Unavailable" msgstr "Service Unavailable" @@ -10213,250 +9930,657 @@ msgid "" " features and resources." msgstr "Our help pages may be consulted for detail on other program features and resources." -#: src/Object/EMail/ItemCCEMail.php:39 +#: src/Navigation/Notifications/Factory/FormattedNotification.php:89 +#, php-format +msgid "%s liked %s's post" +msgstr "%s liked %s's post" + +#: src/Navigation/Notifications/Factory/FormattedNotification.php:101 +#, php-format +msgid "%s disliked %s's post" +msgstr "%s disliked %s's post" + +#: src/Navigation/Notifications/Factory/FormattedNotification.php:113 +#, php-format +msgid "%s is attending %s's event" +msgstr "%s is going to %s's event" + +#: src/Navigation/Notifications/Factory/FormattedNotification.php:125 +#, php-format +msgid "%s is not attending %s's event" +msgstr "%s is not going to %s's event" + +#: src/Navigation/Notifications/Factory/FormattedNotification.php:137 +#, php-format +msgid "%s may attending %s's event" +msgstr "%s may attending %s's event" + +#: src/Navigation/Notifications/Factory/FormattedNotification.php:167 +#, php-format +msgid "%s is now friends with %s" +msgstr "%s is now friends with %s" + +#: src/Navigation/Notifications/Factory/FormattedNotification.php:334 +#: src/Navigation/Notifications/Factory/FormattedNotification.php:372 +#, php-format +msgid "%s commented on %s's post" +msgstr "%s commented on %s's post" + +#: src/Navigation/Notifications/Factory/FormattedNotification.php:371 +#, php-format +msgid "%s created a new post" +msgstr "%s posted something new" + +#: src/Navigation/Notifications/Factory/Introduction.php:133 +msgid "Friend Suggestion" +msgstr "Friend suggestion" + +#: src/Navigation/Notifications/Factory/Introduction.php:159 +msgid "Friend/Connect Request" +msgstr "Friend/Contact request" + +#: src/Navigation/Notifications/Factory/Introduction.php:159 +msgid "New Follower" +msgstr "New follower" + +#: src/Navigation/Notifications/Factory/Notification.php:74 +#, php-format +msgid "%1$s wants to follow you" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:76 +#, php-format +msgid "%1$s had started following you" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:141 +#, php-format +msgid "%1$s liked your comment %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:144 +#, php-format +msgid "%1$s liked your post %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:151 +#, php-format +msgid "%1$s disliked your comment %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:154 +#, php-format +msgid "%1$s disliked your post %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:161 +#, php-format +msgid "%1$s shared your comment %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:164 +#, php-format +msgid "%1$s shared your post %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:171 +#, php-format +msgid "%1$s tagged you on %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:175 +#, php-format +msgid "%1$s replied to you on %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:179 +#, php-format +msgid "%1$s commented in your thread %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:183 +#, php-format +msgid "%1$s commented on your comment %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:189 +#, php-format +msgid "%1$s commented in their thread %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:191 +#, php-format +msgid "%1$s commented in their thread" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:193 +#, php-format +msgid "%1$s commented in the thread %2$s from %3$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:195 +#, php-format +msgid "%1$s commented in the thread from %3$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:200 +#, php-format +msgid "%1$s commented on your thread %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:205 +#, php-format +msgid "%1$s shared the post %2$s from %3$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:207 +#, php-format +msgid "%1$s shared a post from %3$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:209 +#, php-format +msgid "%1$s shared the post %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:211 +#, php-format +msgid "%1$s shared a post" +msgstr "" + +#: src/Navigation/Notifications/Repository/Notify.php:192 +#: src/Navigation/Notifications/Repository/Notify.php:675 +msgid "[Friendica:Notify]" +msgstr "[Friendica:Notify]" + +#: src/Navigation/Notifications/Repository/Notify.php:256 +#, php-format +msgid "%s New mail received at %s" +msgstr "%s New mail received at %s" + +#: src/Navigation/Notifications/Repository/Notify.php:258 +#, php-format +msgid "%1$s sent you a new private message at %2$s." +msgstr "%1$s sent you a new private message at %2$s." + +#: src/Navigation/Notifications/Repository/Notify.php:259 +msgid "a private message" +msgstr "a private message" + +#: src/Navigation/Notifications/Repository/Notify.php:259 +#, php-format +msgid "%1$s sent you %2$s." +msgstr "%1$s sent you %2$s." + +#: src/Navigation/Notifications/Repository/Notify.php:261 +#, php-format +msgid "Please visit %s to view and/or reply to your private messages." +msgstr "Please visit %s to view or reply to your private messages." + +#: src/Navigation/Notifications/Repository/Notify.php:292 +#, php-format +msgid "%1$s commented on %2$s's %3$s %4$s" +msgstr "%1$s commented on %2$s's %3$s %4$s" + +#: src/Navigation/Notifications/Repository/Notify.php:297 +#, php-format +msgid "%1$s commented on your %2$s %3$s" +msgstr "%1$s commented on your %2$s %3$s" + +#: src/Navigation/Notifications/Repository/Notify.php:301 +#, php-format +msgid "%1$s commented on their %2$s %3$s" +msgstr "%1$s commented on their %2$s %3$s" + +#: src/Navigation/Notifications/Repository/Notify.php:305 +#: src/Navigation/Notifications/Repository/Notify.php:710 +#, php-format +msgid "%1$s Comment to conversation #%2$d by %3$s" +msgstr "%1$s Comment to conversation #%2$d by %3$s" + +#: src/Navigation/Notifications/Repository/Notify.php:307 +#, php-format +msgid "%s commented on an item/conversation you have been following." +msgstr "%s commented on an item/conversation you have been following." + +#: src/Navigation/Notifications/Repository/Notify.php:311 +#: src/Navigation/Notifications/Repository/Notify.php:326 +#: src/Navigation/Notifications/Repository/Notify.php:345 +#: src/Navigation/Notifications/Repository/Notify.php:725 +#, php-format +msgid "Please visit %s to view and/or reply to the conversation." +msgstr "Please visit %s to view or reply to the conversation." + +#: src/Navigation/Notifications/Repository/Notify.php:318 +#, php-format +msgid "%s %s posted to your profile wall" +msgstr "%s %s posted to your profile wall" + +#: src/Navigation/Notifications/Repository/Notify.php:320 +#, php-format +msgid "%1$s posted to your profile wall at %2$s" +msgstr "%1$s posted to your profile wall at %2$s" + +#: src/Navigation/Notifications/Repository/Notify.php:321 +#, php-format +msgid "%1$s posted to [url=%2$s]your wall[/url]" +msgstr "%1$s posted to [url=%2$s]your wall[/url]" + +#: src/Navigation/Notifications/Repository/Notify.php:333 +#, php-format +msgid "%1$s %2$s poked you" +msgstr "%1$s %2$s poked you" + +#: src/Navigation/Notifications/Repository/Notify.php:335 +#, php-format +msgid "%1$s poked you at %2$s" +msgstr "%1$s poked you at %2$s" + +#: src/Navigation/Notifications/Repository/Notify.php:336 +#, php-format +msgid "%1$s [url=%2$s]poked you[/url]." +msgstr "%1$s [url=%2$s]poked you[/url]." + +#: src/Navigation/Notifications/Repository/Notify.php:353 +#, php-format +msgid "%s Introduction received" +msgstr "%s Introduction received" + +#: src/Navigation/Notifications/Repository/Notify.php:355 +#, php-format +msgid "You've received an introduction from '%1$s' at %2$s" +msgstr "You've received an introduction from '%1$s' at %2$s" + +#: src/Navigation/Notifications/Repository/Notify.php:356 +#, php-format +msgid "You've received [url=%1$s]an introduction[/url] from %2$s." +msgstr "You've received [url=%1$s]an introduction[/url] from %2$s." + +#: src/Navigation/Notifications/Repository/Notify.php:361 +#: src/Navigation/Notifications/Repository/Notify.php:407 +#, php-format +msgid "You may visit their profile at %s" +msgstr "You may visit their profile at %s" + +#: src/Navigation/Notifications/Repository/Notify.php:363 +#, php-format +msgid "Please visit %s to approve or reject the introduction." +msgstr "Please visit %s to approve or reject the introduction." + +#: src/Navigation/Notifications/Repository/Notify.php:370 +#, php-format +msgid "%s A new person is sharing with you" +msgstr "%s A new person is sharing with you" + +#: src/Navigation/Notifications/Repository/Notify.php:372 +#: src/Navigation/Notifications/Repository/Notify.php:373 +#, php-format +msgid "%1$s is sharing with you at %2$s" +msgstr "%1$s is sharing with you at %2$s" + +#: src/Navigation/Notifications/Repository/Notify.php:380 +#, php-format +msgid "%s You have a new follower" +msgstr "%s You have a new follower" + +#: src/Navigation/Notifications/Repository/Notify.php:382 +#: src/Navigation/Notifications/Repository/Notify.php:383 +#, php-format +msgid "You have a new follower at %2$s : %1$s" +msgstr "You have a new follower at %2$s : %1$s" + +#: src/Navigation/Notifications/Repository/Notify.php:396 +#, php-format +msgid "%s Friend suggestion received" +msgstr "%s Friend suggestion received" + +#: src/Navigation/Notifications/Repository/Notify.php:398 +#, php-format +msgid "You've received a friend suggestion from '%1$s' at %2$s" +msgstr "You've received a friend suggestion from '%1$s' at %2$s" + +#: src/Navigation/Notifications/Repository/Notify.php:399 +#, php-format +msgid "" +"You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s." +msgstr "You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s." + +#: src/Navigation/Notifications/Repository/Notify.php:405 +msgid "Name:" +msgstr "Name:" + +#: src/Navigation/Notifications/Repository/Notify.php:406 +msgid "Photo:" +msgstr "Photo:" + +#: src/Navigation/Notifications/Repository/Notify.php:409 +#, php-format +msgid "Please visit %s to approve or reject the suggestion." +msgstr "Please visit %s to approve or reject the suggestion." + +#: src/Navigation/Notifications/Repository/Notify.php:417 +#: src/Navigation/Notifications/Repository/Notify.php:432 +#, php-format +msgid "%s Connection accepted" +msgstr "%s Connection accepted" + +#: src/Navigation/Notifications/Repository/Notify.php:419 +#: src/Navigation/Notifications/Repository/Notify.php:434 +#, php-format +msgid "'%1$s' has accepted your connection request at %2$s" +msgstr "'%1$s' has accepted your connection request at %2$s" + +#: src/Navigation/Notifications/Repository/Notify.php:420 +#: src/Navigation/Notifications/Repository/Notify.php:435 +#, php-format +msgid "%2$s has accepted your [url=%1$s]connection request[/url]." +msgstr "%2$s has accepted your [url=%1$s]connection request[/url]." + +#: src/Navigation/Notifications/Repository/Notify.php:425 +msgid "" +"You are now mutual friends and may exchange status updates, photos, and " +"email without restriction." +msgstr "You are now mutual friends and may exchange status updates, photos, and email without restriction." + +#: src/Navigation/Notifications/Repository/Notify.php:427 +#, php-format +msgid "Please visit %s if you wish to make any changes to this relationship." +msgstr "Please visit %s if you wish to make any changes to this relationship." + +#: src/Navigation/Notifications/Repository/Notify.php:440 +#, php-format +msgid "" +"'%1$s' has chosen to accept you a fan, which restricts some forms of " +"communication - such as private messaging and some profile interactions. If " +"this is a celebrity or community page, these settings were applied " +"automatically." +msgstr "'%1$s' has chosen to accept you as fan. This restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically." + +#: src/Navigation/Notifications/Repository/Notify.php:442 +#, php-format +msgid "" +"'%1$s' may choose to extend this into a two-way or more permissive " +"relationship in the future." +msgstr "'%1$s' may choose to extend this into a two-way or more permissive relationship in the future." + +#: src/Navigation/Notifications/Repository/Notify.php:444 +#, php-format +msgid "Please visit %s if you wish to make any changes to this relationship." +msgstr "Please visit %s if you wish to make any changes to this relationship." + +#: src/Navigation/Notifications/Repository/Notify.php:454 +msgid "registration request" +msgstr "registration request" + +#: src/Navigation/Notifications/Repository/Notify.php:456 +#, php-format +msgid "You've received a registration request from '%1$s' at %2$s" +msgstr "You've received a registration request from '%1$s' at %2$s." + +#: src/Navigation/Notifications/Repository/Notify.php:457 +#, php-format +msgid "You've received a [url=%1$s]registration request[/url] from %2$s." +msgstr "You've received a [url=%1$s]registration request[/url] from %2$s." + +#: src/Navigation/Notifications/Repository/Notify.php:462 +#, php-format +msgid "" +"Full Name:\t%s\n" +"Site Location:\t%s\n" +"Login Name:\t%s (%s)" +msgstr "Full Name:\t%s\nSite Location:\t%s\nLogin Name:\t%s (%s)" + +#: src/Navigation/Notifications/Repository/Notify.php:468 +#, php-format +msgid "Please visit %s to approve or reject the request." +msgstr "Please visit %s to approve or reject the request." + +#: src/Navigation/Notifications/Repository/Notify.php:704 +#, php-format +msgid "%s %s tagged you" +msgstr "%s %s tagged you" + +#: src/Navigation/Notifications/Repository/Notify.php:707 +#, php-format +msgid "%s %s shared a new post" +msgstr "%s %s shared a new post" + +#: src/Object/EMail/ItemCCEMail.php:42 #, php-format msgid "" "This message was sent to you by %s, a member of the Friendica social " "network." msgstr "This message was sent to you by %s, a member of the Friendica social network." -#: src/Object/EMail/ItemCCEMail.php:41 +#: src/Object/EMail/ItemCCEMail.php:44 #, php-format msgid "You may visit them online at %s" msgstr "You may visit them online at %s" -#: src/Object/EMail/ItemCCEMail.php:42 +#: src/Object/EMail/ItemCCEMail.php:45 msgid "" "Please contact the sender by replying to this post if you do not wish to " "receive these messages." msgstr "Please contact the sender by replying to this post if you do not wish to receive these messages." -#: src/Object/EMail/ItemCCEMail.php:46 +#: src/Object/EMail/ItemCCEMail.php:49 #, php-format msgid "%s posted an update." msgstr "%s posted an update." -#: src/Object/Post.php:148 +#: src/Object/Post.php:149 msgid "This entry was edited" msgstr "This entry was edited" -#: src/Object/Post.php:176 +#: src/Object/Post.php:177 msgid "Private Message" msgstr "Private message" -#: src/Object/Post.php:214 -msgid "pinned item" -msgstr "pinned item" +#: src/Object/Post.php:193 src/Object/Post.php:195 +msgid "Edit" +msgstr "Edit" -#: src/Object/Post.php:218 +#: src/Object/Post.php:215 +msgid "Pinned item" +msgstr "" + +#: src/Object/Post.php:219 msgid "Delete globally" msgstr "Delete globally" -#: src/Object/Post.php:218 +#: src/Object/Post.php:219 msgid "Remove locally" msgstr "Remove locally" -#: src/Object/Post.php:231 +#: src/Object/Post.php:235 #, php-format msgid "Block %s" msgstr "" -#: src/Object/Post.php:236 -msgid "save to folder" -msgstr "Save to folder" +#: src/Object/Post.php:240 +msgid "Save to folder" +msgstr "" -#: src/Object/Post.php:270 +#: src/Object/Post.php:274 msgid "I will attend" msgstr "I will attend" -#: src/Object/Post.php:270 +#: src/Object/Post.php:274 msgid "I will not attend" msgstr "I will not attend" -#: src/Object/Post.php:270 +#: src/Object/Post.php:274 msgid "I might attend" msgstr "I might attend" -#: src/Object/Post.php:300 -msgid "ignore thread" -msgstr "Ignore thread" +#: src/Object/Post.php:304 +msgid "Ignore thread" +msgstr "" -#: src/Object/Post.php:301 -msgid "unignore thread" -msgstr "Unignore thread" +#: src/Object/Post.php:305 +msgid "Unignore thread" +msgstr "" -#: src/Object/Post.php:302 -msgid "toggle ignore status" -msgstr "Toggle ignore status" - -#: src/Object/Post.php:314 -msgid "pin" -msgstr "pin" - -#: src/Object/Post.php:315 -msgid "unpin" -msgstr "unpin" +#: src/Object/Post.php:306 +msgid "Toggle ignore status" +msgstr "" #: src/Object/Post.php:316 -msgid "toggle pin status" -msgstr "toggle pin status" +msgid "Add star" +msgstr "" -#: src/Object/Post.php:319 -msgid "pinned" -msgstr "pinned" +#: src/Object/Post.php:317 +msgid "Remove star" +msgstr "" -#: src/Object/Post.php:326 -msgid "add star" -msgstr "Add star" +#: src/Object/Post.php:318 +msgid "Toggle star status" +msgstr "" -#: src/Object/Post.php:327 -msgid "remove star" -msgstr "Remove star" +#: src/Object/Post.php:329 +msgid "Pin" +msgstr "" -#: src/Object/Post.php:328 -msgid "toggle star status" -msgstr "Toggle star status" +#: src/Object/Post.php:330 +msgid "Unpin" +msgstr "" #: src/Object/Post.php:331 -msgid "starred" -msgstr "Starred" +msgid "Toggle pin status" +msgstr "" -#: src/Object/Post.php:335 -msgid "add tag" -msgstr "Add tag" +#: src/Object/Post.php:334 +msgid "Pinned" +msgstr "" -#: src/Object/Post.php:345 -msgid "like" -msgstr "Like" +#: src/Object/Post.php:339 +msgid "Add tag" +msgstr "" -#: src/Object/Post.php:346 -msgid "dislike" -msgstr "Dislike" - -#: src/Object/Post.php:348 +#: src/Object/Post.php:352 msgid "Quote share this" msgstr "" -#: src/Object/Post.php:348 +#: src/Object/Post.php:352 msgid "Quote Share" msgstr "" -#: src/Object/Post.php:351 +#: src/Object/Post.php:355 msgid "Reshare this" msgstr "" -#: src/Object/Post.php:351 +#: src/Object/Post.php:355 msgid "Reshare" msgstr "" -#: src/Object/Post.php:352 +#: src/Object/Post.php:356 msgid "Cancel your Reshare" msgstr "" -#: src/Object/Post.php:352 +#: src/Object/Post.php:356 msgid "Unshare" msgstr "" -#: src/Object/Post.php:397 +#: src/Object/Post.php:401 #, php-format msgid "%s (Received %s)" msgstr "%s (Received %s)" -#: src/Object/Post.php:402 +#: src/Object/Post.php:406 msgid "Comment this item on your system" msgstr "Comment this item on your system" -#: src/Object/Post.php:402 -msgid "remote comment" -msgstr "remote comment" +#: src/Object/Post.php:406 +msgid "Remote comment" +msgstr "" -#: src/Object/Post.php:414 +#: src/Object/Post.php:422 msgid "Pushed" msgstr "Pushed" -#: src/Object/Post.php:414 +#: src/Object/Post.php:422 msgid "Pulled" msgstr "Pulled" -#: src/Object/Post.php:446 +#: src/Object/Post.php:456 msgid "to" msgstr "to" -#: src/Object/Post.php:447 +#: src/Object/Post.php:457 msgid "via" msgstr "via" -#: src/Object/Post.php:448 +#: src/Object/Post.php:458 msgid "Wall-to-Wall" msgstr "Wall-to-wall" -#: src/Object/Post.php:449 +#: src/Object/Post.php:459 msgid "via Wall-To-Wall:" msgstr "via wall-to-wall:" -#: src/Object/Post.php:487 +#: src/Object/Post.php:497 #, php-format msgid "Reply to %s" msgstr "Reply to %s" -#: src/Object/Post.php:490 +#: src/Object/Post.php:500 msgid "More" msgstr "More" -#: src/Object/Post.php:508 +#: src/Object/Post.php:518 msgid "Notifier task is pending" msgstr "Notifier task is pending" -#: src/Object/Post.php:509 +#: src/Object/Post.php:519 msgid "Delivery to remote servers is pending" msgstr "Delivery to remote servers is pending" -#: src/Object/Post.php:510 +#: src/Object/Post.php:520 msgid "Delivery to remote servers is underway" msgstr "Delivery to remote servers is underway" -#: src/Object/Post.php:511 +#: src/Object/Post.php:521 msgid "Delivery to remote servers is mostly done" msgstr "Delivery to remote servers is mostly done" -#: src/Object/Post.php:512 +#: src/Object/Post.php:522 msgid "Delivery to remote servers is done" msgstr "Delivery to remote servers is done" -#: src/Object/Post.php:532 +#: src/Object/Post.php:542 #, php-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d comment" msgstr[1] "%d comments" -#: src/Object/Post.php:533 +#: src/Object/Post.php:543 msgid "Show more" msgstr "Show more" -#: src/Object/Post.php:534 +#: src/Object/Post.php:544 msgid "Show fewer" msgstr "Show fewer" -#: src/Protocol/Diaspora.php:3446 +#: src/Protocol/Diaspora.php:3414 msgid "Attachments:" msgstr "Attachments:" -#: src/Protocol/OStatus.php:1760 +#: src/Protocol/OStatus.php:1645 #, php-format msgid "%s is now following %s." msgstr "%s is now following %s." -#: src/Protocol/OStatus.php:1761 +#: src/Protocol/OStatus.php:1646 msgid "following" msgstr "following" -#: src/Protocol/OStatus.php:1764 +#: src/Protocol/OStatus.php:1649 #, php-format msgid "%s stopped following %s." msgstr "%s stopped following %s." -#: src/Protocol/OStatus.php:1765 +#: src/Protocol/OStatus.php:1650 msgid "stopped following" msgstr "stopped following" @@ -10464,96 +10588,20 @@ msgstr "stopped following" msgid "The folder view/smarty3/ must be writable by webserver." msgstr "" -#: src/Repository/ProfileField.php:275 -msgid "Hometown:" -msgstr "Home town:" - -#: src/Repository/ProfileField.php:276 -msgid "Marital Status:" -msgstr "Marital Status:" - -#: src/Repository/ProfileField.php:277 -msgid "With:" -msgstr "With:" - -#: src/Repository/ProfileField.php:278 -msgid "Since:" -msgstr "Since:" - -#: src/Repository/ProfileField.php:279 -msgid "Sexual Preference:" -msgstr "Sexual preference:" - -#: src/Repository/ProfileField.php:280 -msgid "Political Views:" -msgstr "Political views:" - -#: src/Repository/ProfileField.php:281 -msgid "Religious Views:" -msgstr "Religious views:" - -#: src/Repository/ProfileField.php:282 -msgid "Likes:" -msgstr "Likes:" - -#: src/Repository/ProfileField.php:283 -msgid "Dislikes:" -msgstr "Dislikes:" - -#: src/Repository/ProfileField.php:284 -msgid "Title/Description:" -msgstr "Title/Description:" - -#: src/Repository/ProfileField.php:286 -msgid "Musical interests" -msgstr "Music:" - -#: src/Repository/ProfileField.php:287 -msgid "Books, literature" -msgstr "Books, literature, poetry:" - -#: src/Repository/ProfileField.php:288 -msgid "Television" -msgstr "Television:" - -#: src/Repository/ProfileField.php:289 -msgid "Film/dance/culture/entertainment" -msgstr "Film, dance, culture, entertainment" - -#: src/Repository/ProfileField.php:290 -msgid "Hobbies/Interests" -msgstr "Hobbies/Interests:" - -#: src/Repository/ProfileField.php:291 -msgid "Love/romance" -msgstr "Love/Romance:" - -#: src/Repository/ProfileField.php:292 -msgid "Work/employment" -msgstr "Work/Employment:" - -#: src/Repository/ProfileField.php:293 -msgid "School/education" -msgstr "School/Education:" - -#: src/Repository/ProfileField.php:294 -msgid "Contact information and Social Networks" -msgstr "Contact information and other social networks:" - -#: src/Security/Authentication.php:209 src/Security/Authentication.php:261 +#: src/Security/Authentication.php:209 msgid "Login failed." msgstr "Login failed." -#: src/Security/Authentication.php:272 +#: src/Security/Authentication.php:250 msgid "Login failed. Please check your credentials." msgstr "Login failed. Please check your credentials." -#: src/Security/Authentication.php:391 +#: src/Security/Authentication.php:348 #, php-format msgid "Welcome %s" msgstr "Welcome %s" -#: src/Security/Authentication.php:392 +#: src/Security/Authentication.php:349 msgid "Please upload a profile photo." msgstr "Please upload a profile photo." @@ -10584,72 +10632,85 @@ msgstr "" msgid "YYYY-MM-DD or MM-DD" msgstr "" -#: src/Util/Temporal.php:314 +#: src/Util/Temporal.php:275 +#, php-format +msgid "Time zone: %s Change in Settings" +msgstr "" + +#: src/Util/Temporal.php:318 msgid "never" msgstr "" -#: src/Util/Temporal.php:321 +#: src/Util/Temporal.php:325 msgid "less than a second ago" msgstr "" -#: src/Util/Temporal.php:329 +#: src/Util/Temporal.php:333 msgid "year" msgstr "" -#: src/Util/Temporal.php:329 +#: src/Util/Temporal.php:333 msgid "years" msgstr "" -#: src/Util/Temporal.php:330 +#: src/Util/Temporal.php:334 msgid "months" msgstr "" -#: src/Util/Temporal.php:331 +#: src/Util/Temporal.php:335 msgid "weeks" msgstr "" -#: src/Util/Temporal.php:332 +#: src/Util/Temporal.php:336 msgid "days" msgstr "" -#: src/Util/Temporal.php:333 +#: src/Util/Temporal.php:337 msgid "hour" msgstr "" -#: src/Util/Temporal.php:333 +#: src/Util/Temporal.php:337 msgid "hours" msgstr "" -#: src/Util/Temporal.php:334 +#: src/Util/Temporal.php:338 msgid "minute" msgstr "" -#: src/Util/Temporal.php:334 +#: src/Util/Temporal.php:338 msgid "minutes" msgstr "" -#: src/Util/Temporal.php:335 +#: src/Util/Temporal.php:339 msgid "second" msgstr "" -#: src/Util/Temporal.php:335 +#: src/Util/Temporal.php:339 msgid "seconds" msgstr "" -#: src/Util/Temporal.php:345 +#: src/Util/Temporal.php:349 #, php-format msgid "in %1$d %2$s" msgstr "" -#: src/Util/Temporal.php:348 +#: src/Util/Temporal.php:352 #, php-format msgid "%1$d %2$s ago" msgstr "" -#: src/Worker/Delivery.php:570 +#: src/Worker/Delivery.php:525 msgid "(no subject)" msgstr "" +#: src/Worker/PushSubscription.php:103 +msgid "Notification from Friendica" +msgstr "" + +#: src/Worker/PushSubscription.php:104 +msgid "Empty Post" +msgstr "" + #: view/theme/duepuntozero/config.php:52 msgid "default" msgstr "" @@ -10792,14 +10853,6 @@ msgstr "" msgid "Leave background image and color empty for theme defaults" msgstr "" -#: view/theme/frio/php/default.php:81 view/theme/frio/php/standard.php:40 -msgid "Skip to main content" -msgstr "" - -#: view/theme/frio/php/default.php:152 view/theme/frio/php/standard.php:75 -msgid "Back to top" -msgstr "" - #: view/theme/frio/php/Image.php:40 msgid "Top Banner" msgstr "" @@ -10836,6 +10889,14 @@ msgstr "" msgid "Repeat image to fill the screen." msgstr "" +#: view/theme/frio/php/default.php:81 view/theme/frio/php/standard.php:40 +msgid "Skip to main content" +msgstr "" + +#: view/theme/frio/php/default.php:152 view/theme/frio/php/standard.php:75 +msgid "Back to top" +msgstr "" + #: view/theme/frio/theme.php:207 msgid "Guest" msgstr "" diff --git a/view/lang/en-gb/strings.php b/view/lang/en-gb/strings.php index add50d4c0..095bab5d8 100644 --- a/view/lang/en-gb/strings.php +++ b/view/lang/en-gb/strings.php @@ -14,170 +14,7 @@ $a->strings['Weekly posting limit of %d post reached. The post was rejected.'] = 1 => 'Weekly posting limit of %d posts are reached. This post was rejected.', ]; $a->strings['Monthly posting limit of %d post reached. The post was rejected.'] = 'Monthly posting limit of %d posts are reached. The post was rejected.'; -$a->strings['Profile Photos'] = 'Profile photos'; -$a->strings['%1$s poked %2$s'] = '%1$s poked %2$s'; -$a->strings['event'] = 'event'; -$a->strings['status'] = 'status'; -$a->strings['photo'] = 'photo'; -$a->strings['%1$s tagged %2$s\'s %3$s with %4$s'] = '%1$s tagged %2$s\'s %3$s with %4$s'; -$a->strings['Select'] = 'Select'; -$a->strings['Delete'] = 'Delete'; -$a->strings['View %s\'s profile @ %s'] = 'View %s\'s profile @ %s'; -$a->strings['Categories:'] = 'Categories:'; -$a->strings['Filed under:'] = 'Filed under:'; -$a->strings['%s from %s'] = '%s from %s'; -$a->strings['View in context'] = 'View in context'; -$a->strings['Please wait'] = 'Please wait'; -$a->strings['remove'] = 'Remove'; -$a->strings['Delete Selected Items'] = 'Delete selected items'; -$a->strings['You are following %s.'] = 'You are following %s.'; -$a->strings['Tagged'] = 'Tagged'; -$a->strings['%s reshared this.'] = '%s reshared this.'; -$a->strings['Reshared'] = 'Reshared'; -$a->strings['Reshared by %s'] = 'Reshared by %s'; -$a->strings['Stored'] = 'Stored'; -$a->strings['Global'] = 'Global'; -$a->strings['Relayed'] = 'Relayed'; -$a->strings['Relayed by %s.'] = 'Relayed by %s.'; -$a->strings['Fetched'] = 'Fetched'; -$a->strings['Fetched because of %s'] = 'Fetched because of %s'; -$a->strings['Follow Thread'] = 'Follow thread'; -$a->strings['View Status'] = 'View status'; -$a->strings['View Profile'] = 'View profile'; -$a->strings['View Photos'] = 'View photos'; -$a->strings['Network Posts'] = 'Network posts'; -$a->strings['View Contact'] = 'View contact'; -$a->strings['Send PM'] = 'Send PM'; -$a->strings['Block'] = 'Block'; -$a->strings['Ignore'] = 'Ignore'; -$a->strings['Languages'] = 'Languages'; -$a->strings['Poke'] = 'Poke'; -$a->strings['Connect/Follow'] = 'Connect/Follow'; -$a->strings['%s likes this.'] = '%s likes this.'; -$a->strings['%s doesn\'t like this.'] = '%s doesn\'t like this.'; -$a->strings['%s attends.'] = '%s attends.'; -$a->strings['%s doesn\'t attend.'] = '%s doesn\'t attend.'; -$a->strings['%s attends maybe.'] = '%s may attend.'; -$a->strings['and'] = 'and'; -$a->strings['and %d other people'] = 'and %d other people'; -$a->strings['%2$d people like this'] = '%2$d people like this'; -$a->strings['%s like this.'] = '%s like this.'; -$a->strings['%2$d people don\'t like this'] = '%2$d people don\'t like this'; -$a->strings['%s don\'t like this.'] = '%s don\'t like this.'; -$a->strings['%2$d people attend'] = '%2$d people attend'; -$a->strings['%s attend.'] = '%s attend.'; -$a->strings['%2$d people don\'t attend'] = '%2$d people don\'t attend'; -$a->strings['%s don\'t attend.'] = '%s don\'t attend.'; -$a->strings['%2$d people attend maybe'] = '%2$d people attend maybe'; -$a->strings['%s attend maybe.'] = '%s may be attending.'; -$a->strings['%2$d people reshared this'] = '%2$d people reshared this'; -$a->strings['Visible to everybody'] = 'Visible to everybody'; -$a->strings['Please enter a image/video/audio/webpage URL:'] = 'Please enter an image/video/audio/webpage URL:'; -$a->strings['Tag term:'] = 'Tag term:'; -$a->strings['Save to Folder:'] = 'Save to folder:'; -$a->strings['Where are you right now?'] = 'Where are you right now?'; -$a->strings['Delete item(s)?'] = 'Delete item(s)?'; -$a->strings['New Post'] = 'New post'; -$a->strings['Share'] = 'Share'; -$a->strings['Loading...'] = 'Loading...'; -$a->strings['Upload photo'] = 'Upload photo'; -$a->strings['upload photo'] = 'upload photo'; -$a->strings['Attach file'] = 'Attach file'; -$a->strings['attach file'] = 'attach file'; -$a->strings['Bold'] = 'Bold'; -$a->strings['Italic'] = 'Italic'; -$a->strings['Underline'] = 'Underline'; -$a->strings['Quote'] = 'Quote'; -$a->strings['Code'] = 'Code'; -$a->strings['Image'] = 'Image'; -$a->strings['Link'] = 'Link'; -$a->strings['Link or Media'] = 'Link or media'; -$a->strings['Set your location'] = 'Set your location'; -$a->strings['set location'] = 'set location'; -$a->strings['Clear browser location'] = 'Clear browser location'; -$a->strings['clear location'] = 'clear location'; -$a->strings['Set title'] = 'Set title'; -$a->strings['Categories (comma-separated list)'] = 'Categories (comma-separated list)'; -$a->strings['Permission settings'] = 'Permission settings'; -$a->strings['Permissions'] = 'Permissions'; -$a->strings['Public post'] = 'Public post'; -$a->strings['Preview'] = 'Preview'; -$a->strings['Cancel'] = 'Cancel'; -$a->strings['Message'] = 'Message'; -$a->strings['Browser'] = 'Browser'; -$a->strings['Open Compose page'] = 'Open Compose page'; -$a->strings['[Friendica:Notify]'] = '[Friendica:Notify]'; -$a->strings['%s New mail received at %s'] = '%s New mail received at %s'; -$a->strings['%1$s sent you a new private message at %2$s.'] = '%1$s sent you a new private message at %2$s.'; -$a->strings['a private message'] = 'a private message'; -$a->strings['%1$s sent you %2$s.'] = '%1$s sent you %2$s.'; -$a->strings['Please visit %s to view and/or reply to your private messages.'] = 'Please visit %s to view or reply to your private messages.'; -$a->strings['%1$s replied to you on %2$s\'s %3$s %4$s'] = '%1$s replied to you on %2$s\'s %3$s %4$s'; -$a->strings['%1$s tagged you on %2$s\'s %3$s %4$s'] = '%1$s tagged you on %2$s\'s %3$s %4$s'; -$a->strings['%1$s commented on %2$s\'s %3$s %4$s'] = '%1$s commented on %2$s\'s %3$s %4$s'; -$a->strings['%1$s replied to you on your %2$s %3$s'] = '%1$s replied to you on your %2$s %3$s'; -$a->strings['%1$s tagged you on your %2$s %3$s'] = '%1$s tagged you on your %2$s %3$s'; -$a->strings['%1$s commented on your %2$s %3$s'] = '%1$s commented on your %2$s %3$s'; -$a->strings['%1$s replied to you on their %2$s %3$s'] = '%1$s replied to you on their %2$s %3$s'; -$a->strings['%1$s tagged you on their %2$s %3$s'] = '%1$s tagged you on their %2$s %3$s'; -$a->strings['%1$s commented on their %2$s %3$s'] = '%1$s commented on their %2$s %3$s'; -$a->strings['%s %s tagged you'] = '%s %s tagged you'; -$a->strings['%1$s tagged you at %2$s'] = '%1$s tagged you at %2$s'; -$a->strings['%1$s Comment to conversation #%2$d by %3$s'] = '%1$s Comment to conversation #%2$d by %3$s'; -$a->strings['%s commented on an item/conversation you have been following.'] = '%s commented on an item/conversation you have been following.'; -$a->strings['Please visit %s to view and/or reply to the conversation.'] = 'Please visit %s to view or reply to the conversation.'; -$a->strings['%s %s posted to your profile wall'] = '%s %s posted to your profile wall'; -$a->strings['%1$s posted to your profile wall at %2$s'] = '%1$s posted to your profile wall at %2$s'; -$a->strings['%1$s posted to [url=%2$s]your wall[/url]'] = '%1$s posted to [url=%2$s]your wall[/url]'; -$a->strings['%s %s shared a new post'] = '%s %s shared a new post'; -$a->strings['%1$s shared a new post at %2$s'] = '%1$s shared a new post at %2$s'; -$a->strings['%1$s [url=%2$s]shared a post[/url].'] = '%1$s [url=%2$s]shared a post[/url].'; -$a->strings['%1$s %2$s poked you'] = '%1$s %2$s poked you'; -$a->strings['%1$s poked you at %2$s'] = '%1$s poked you at %2$s'; -$a->strings['%1$s [url=%2$s]poked you[/url].'] = '%1$s [url=%2$s]poked you[/url].'; -$a->strings['%s %s tagged your post'] = '%s %s tagged your post'; -$a->strings['%1$s tagged your post at %2$s'] = '%1$s tagged your post at %2$s'; -$a->strings['%1$s tagged [url=%2$s]your post[/url]'] = '%1$s tagged [url=%2$s]your post[/url]'; -$a->strings['%s Introduction received'] = '%s Introduction received'; -$a->strings['You\'ve received an introduction from \'%1$s\' at %2$s'] = 'You\'ve received an introduction from \'%1$s\' at %2$s'; -$a->strings['You\'ve received [url=%1$s]an introduction[/url] from %2$s.'] = 'You\'ve received [url=%1$s]an introduction[/url] from %2$s.'; -$a->strings['You may visit their profile at %s'] = 'You may visit their profile at %s'; -$a->strings['Please visit %s to approve or reject the introduction.'] = 'Please visit %s to approve or reject the introduction.'; -$a->strings['%s A new person is sharing with you'] = '%s A new person is sharing with you'; -$a->strings['%1$s is sharing with you at %2$s'] = '%1$s is sharing with you at %2$s'; -$a->strings['%s You have a new follower'] = '%s You have a new follower'; -$a->strings['You have a new follower at %2$s : %1$s'] = 'You have a new follower at %2$s : %1$s'; -$a->strings['%s Friend suggestion received'] = '%s Friend suggestion received'; -$a->strings['You\'ve received a friend suggestion from \'%1$s\' at %2$s'] = 'You\'ve received a friend suggestion from \'%1$s\' at %2$s'; -$a->strings['You\'ve received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s.'] = 'You\'ve received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s.'; -$a->strings['Name:'] = 'Name:'; -$a->strings['Photo:'] = 'Photo:'; -$a->strings['Please visit %s to approve or reject the suggestion.'] = 'Please visit %s to approve or reject the suggestion.'; -$a->strings['%s Connection accepted'] = '%s Connection accepted'; -$a->strings['\'%1$s\' has accepted your connection request at %2$s'] = '\'%1$s\' has accepted your connection request at %2$s'; -$a->strings['%2$s has accepted your [url=%1$s]connection request[/url].'] = '%2$s has accepted your [url=%1$s]connection request[/url].'; -$a->strings['You are now mutual friends and may exchange status updates, photos, and email without restriction.'] = 'You are now mutual friends and may exchange status updates, photos, and email without restriction.'; -$a->strings['Please visit %s if you wish to make any changes to this relationship.'] = 'Please visit %s if you wish to make any changes to this relationship.'; -$a->strings['\'%1$s\' has chosen to accept you a fan, which restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically.'] = '\'%1$s\' has chosen to accept you as fan. This restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically.'; -$a->strings['\'%1$s\' may choose to extend this into a two-way or more permissive relationship in the future.'] = '\'%1$s\' may choose to extend this into a two-way or more permissive relationship in the future.'; -$a->strings['Please visit %s if you wish to make any changes to this relationship.'] = 'Please visit %s if you wish to make any changes to this relationship.'; -$a->strings['[Friendica System Notify]'] = '[Friendica System Notify]'; -$a->strings['registration request'] = 'registration request'; -$a->strings['You\'ve received a registration request from \'%1$s\' at %2$s'] = 'You\'ve received a registration request from \'%1$s\' at %2$s.'; -$a->strings['You\'ve received a [url=%1$s]registration request[/url] from %2$s.'] = 'You\'ve received a [url=%1$s]registration request[/url] from %2$s.'; -$a->strings['Full Name: %s -Site Location: %s -Login Name: %s (%s)'] = 'Full Name: %s -Site Location: %s -Login Name: %s (%s)'; -$a->strings['Please visit %s to approve or reject the request.'] = 'Please visit %s to approve or reject the request.'; $a->strings['Permission denied.'] = 'Permission denied.'; -$a->strings['Authorize application connection'] = 'Authorise application connection'; -$a->strings['Return to your app and insert this Securty Code:'] = 'Return to your app and insert this security code:'; -$a->strings['Please login to continue.'] = 'Please login to continue.'; -$a->strings['Do you want to authorize this application to access your posts and contacts, and/or create new posts for you?'] = 'Do you want to authorise this application to access your posts and contacts and create new posts for you?'; -$a->strings['Yes'] = 'Yes'; -$a->strings['No'] = 'No'; $a->strings['Access denied.'] = 'Access denied.'; $a->strings['User not found.'] = 'User not found.'; $a->strings['Access to this profile has been restricted.'] = 'Access to this profile has been restricted.'; @@ -194,75 +31,40 @@ $a->strings['User not found'] = 'User not found'; $a->strings['This calendar format is not supported'] = 'This calendar format is not supported'; $a->strings['No exportable data found'] = 'No exportable data found'; $a->strings['calendar'] = 'calendar'; -$a->strings['Profile not found.'] = 'Profile not found.'; -$a->strings['Contact not found.'] = 'Contact not found.'; -$a->strings['This may occasionally happen if contact was requested by both persons and it has already been approved.'] = 'This may occasionally happen if contact was requested by both persons and it has already been approved.'; -$a->strings['Response from remote site was not understood.'] = 'Response from remote site was not understood.'; -$a->strings['Unexpected response from remote site: '] = 'Unexpected response from remote site: '; -$a->strings['Confirmation completed successfully.'] = 'Confirmation completed successfully.'; -$a->strings['Temporary failure. Please wait and try again.'] = 'Temporary failure. Please wait and try again.'; -$a->strings['Introduction failed or was revoked.'] = 'Introduction failed or was revoked.'; -$a->strings['Remote site reported: '] = 'Remote site reported: '; -$a->strings['No user record found for \'%s\' '] = 'No user record found for \'%s\' '; -$a->strings['Our site encryption key is apparently messed up.'] = 'Our site encryption key is apparently messed up.'; -$a->strings['Empty site URL was provided or URL could not be decrypted by us.'] = 'An empty URL was provided or the URL could not be decrypted by us.'; -$a->strings['Contact record was not found for you on our site.'] = 'Contact record was not found for you on our site.'; -$a->strings['Site public key not available in contact record for URL %s.'] = 'Site public key not available in contact record for URL %s.'; -$a->strings['The ID provided by your system is a duplicate on our system. It should work if you try again.'] = 'The ID provided by your system is a duplicate on our system. It should work if you try again.'; -$a->strings['Unable to set your contact credentials on our system.'] = 'Unable to set your contact credentials on our system.'; -$a->strings['Unable to update your contact profile details on our system'] = 'Unable to update your contact profile details on our system'; -$a->strings['%1$s welcomes %2$s'] = '%1$s welcomes %2$s'; -$a->strings['This introduction has already been accepted.'] = 'This introduction has already been accepted.'; -$a->strings['Profile location is not valid or does not contain profile information.'] = 'Profile location is not valid or does not contain profile information.'; -$a->strings['Warning: profile location has no identifiable owner name.'] = 'Warning: profile location has no identifiable owner name.'; -$a->strings['Warning: profile location has no profile photo.'] = 'Warning: profile location has no profile photo.'; -$a->strings['%d required parameter was not found at the given location'] = [ - 0 => '%d required parameter was not found at the given location', - 1 => '%d required parameters were not found at the given location', -]; -$a->strings['Introduction complete.'] = 'Introduction complete.'; -$a->strings['Unrecoverable protocol error.'] = 'Unrecoverable protocol error.'; -$a->strings['Profile unavailable.'] = 'Profile unavailable.'; -$a->strings['%s has received too many connection requests today.'] = '%s has received too many connection requests today.'; -$a->strings['Spam protection measures have been invoked.'] = 'Spam protection measures have been invoked.'; -$a->strings['Friends are advised to please try again in 24 hours.'] = 'Friends are advised to please try again in 24 hours.'; -$a->strings['Invalid locator'] = 'Invalid locator'; -$a->strings['You have already introduced yourself here.'] = 'You have already introduced yourself here.'; -$a->strings['Apparently you are already friends with %s.'] = 'Apparently you are already friends with %s.'; -$a->strings['Invalid profile URL.'] = 'Invalid profile URL.'; -$a->strings['Disallowed profile URL.'] = 'Disallowed profile URL.'; -$a->strings['Blocked domain'] = 'Blocked domain'; -$a->strings['Failed to update contact record.'] = 'Failed to update contact record.'; -$a->strings['Your introduction has been sent.'] = 'Your introduction has been sent.'; -$a->strings['Remote subscription can\'t be done for your network. Please subscribe directly on your system.'] = 'Remote subscription can\'t be done for your network. Please subscribe directly on your system.'; -$a->strings['Please login to confirm introduction.'] = 'Please login to confirm introduction.'; -$a->strings['Incorrect identity currently logged in. Please login to this profile.'] = 'Incorrect identity currently logged in. Please login to this profile.'; -$a->strings['Confirm'] = 'Confirm'; -$a->strings['Hide this contact'] = 'Hide this contact'; -$a->strings['Welcome home %s.'] = 'Welcome home %s.'; -$a->strings['Please confirm your introduction/connection request to %s.'] = 'Please confirm your introduction/connection request to %s.'; $a->strings['Public access denied.'] = 'Public access denied.'; -$a->strings['Friend/Connection Request'] = 'Friend/Connection request'; -$a->strings['Enter your Webfinger address (user@domain.tld) or profile URL here. If this isn\'t supported by your system (for example it doesn\'t work with Diaspora), you have to subscribe to %s directly on your system'] = 'Enter your WebFinger address (user@domain.tld) or profile URL here. If this isn\'t supported by your system (for example it doesn\'t work with Diaspora), you have to subscribe to %s directly on your system'; -$a->strings['If you are not yet a member of the free social web, follow this link to find a public Friendica node and join us today.'] = 'If you are not yet a member of the free social web, follow this link to find a public Friendica node and join us today.'; -$a->strings['Your Webfinger address or profile URL:'] = 'Your WebFinger address or profile URL:'; -$a->strings['Please answer the following:'] = 'Please answer the following:'; -$a->strings['Submit Request'] = 'Submit request'; -$a->strings['%s knows you'] = '%s knows you'; -$a->strings['Add a personal note:'] = 'Add a personal note:'; $a->strings['The requested item doesn\'t exist or has been deleted.'] = 'The requested item doesn\'t exist or has been deleted.'; $a->strings['The feed for this item is unavailable.'] = 'The feed for this item is unavailable.'; $a->strings['Item not found'] = 'Item not found'; $a->strings['Edit post'] = 'Edit post'; $a->strings['Save'] = 'Save'; +$a->strings['Loading...'] = 'Loading...'; +$a->strings['Upload photo'] = 'Upload photo'; +$a->strings['upload photo'] = 'upload photo'; +$a->strings['Attach file'] = 'Attach file'; +$a->strings['attach file'] = 'attach file'; $a->strings['Insert web link'] = 'Insert web link'; $a->strings['web link'] = 'web link'; $a->strings['Insert video link'] = 'Insert video link'; $a->strings['video link'] = 'video link'; $a->strings['Insert audio link'] = 'Insert audio link'; $a->strings['audio link'] = 'audio link'; +$a->strings['Set your location'] = 'Set your location'; +$a->strings['set location'] = 'set location'; +$a->strings['Clear browser location'] = 'Clear browser location'; +$a->strings['clear location'] = 'clear location'; +$a->strings['Please wait'] = 'Please wait'; +$a->strings['Permission settings'] = 'Permission settings'; $a->strings['CC: email addresses'] = 'CC: email addresses'; +$a->strings['Public post'] = 'Public post'; +$a->strings['Set title'] = 'Set title'; +$a->strings['Categories (comma-separated list)'] = 'Categories (comma-separated list)'; $a->strings['Example: bob@example.com, mary@example.com'] = 'Example: bob@example.com, mary@example.com'; +$a->strings['Preview'] = 'Preview'; +$a->strings['Cancel'] = 'Cancel'; +$a->strings['Message'] = 'Message'; +$a->strings['Browser'] = 'Browser'; +$a->strings['Permissions'] = 'Permissions'; +$a->strings['Open Compose page'] = 'Open Compose page'; $a->strings['Event can not end before it has started.'] = 'Event cannot end before it has started.'; $a->strings['Event title and start time are required.'] = 'Event title and starting time are required.'; $a->strings['Create New Event'] = 'Create new event'; @@ -272,7 +74,6 @@ $a->strings['Event Starts:'] = 'Event starts:'; $a->strings['Required'] = 'Required'; $a->strings['Finish date/time is not known or not relevant'] = 'Finish date/time is not known or not relevant'; $a->strings['Event Finishes:'] = 'Event finishes:'; -$a->strings['Adjust for viewer timezone'] = 'Adjust for viewer\'s time zone'; $a->strings['Description:'] = 'Description:'; $a->strings['Location:'] = 'Location:'; $a->strings['Title:'] = 'Title:'; @@ -284,13 +85,18 @@ $a->strings['Failed to remove event'] = 'Failed to remove event'; $a->strings['Photos'] = 'Photos'; $a->strings['Upload'] = 'Upload'; $a->strings['Files'] = 'Files'; +$a->strings['Submit Request'] = 'Submit request'; $a->strings['You already added this contact.'] = 'You already added this contact.'; $a->strings['The network type couldn\'t be detected. Contact can\'t be added.'] = 'The network type couldn\'t be detected. Contact can\'t be added.'; $a->strings['Diaspora support isn\'t enabled. Contact can\'t be added.'] = 'diaspora* support isn\'t enabled. Contact can\'t be added.'; $a->strings['OStatus support is disabled. Contact can\'t be added.'] = 'OStatus support is disabled. Contact can\'t be added.'; +$a->strings['Connect/Follow'] = 'Connect/Follow'; +$a->strings['Please answer the following:'] = 'Please answer the following:'; $a->strings['Your Identity Address:'] = 'My identity address:'; $a->strings['Profile URL'] = 'Profile URL:'; $a->strings['Tags:'] = 'Tags:'; +$a->strings['%s knows you'] = '%s knows you'; +$a->strings['Add a personal note:'] = 'Add a personal note:'; $a->strings['Status Messages and Posts'] = 'Status Messages and Posts'; $a->strings['The contact could not be added.'] = 'Contact could not be added.'; $a->strings['Unable to locate original post.'] = 'Unable to locate original post.'; @@ -389,8 +195,6 @@ $a->strings[' '; $a->strings['Your password has been changed at %s'] = 'Your password has been changed at %s'; $a->strings['No keywords to match. Please add keywords to your profile.'] = 'No keywords to match. Please add keywords to your profile.'; -$a->strings['first'] = 'first'; -$a->strings['next'] = 'next'; $a->strings['No matches'] = 'No matches'; $a->strings['Profile Match'] = 'Profile Match'; $a->strings['New Message'] = 'New Message'; @@ -402,6 +206,7 @@ $a->strings['Discard'] = 'Discard'; $a->strings['Messages'] = 'Messages'; $a->strings['Conversation not found.'] = 'Conversation not found.'; $a->strings['Message was not deleted.'] = 'Message was not deleted.'; +$a->strings['Conversation was not removed.'] = 'Conversation was not removed.'; $a->strings['Please enter a link URL:'] = 'Please enter a link URL:'; $a->strings['Send Private Message'] = 'Send private message'; $a->strings['To:'] = 'To:'; @@ -422,10 +227,14 @@ $a->strings['%d message'] = [ 1 => '%d messages', ]; $a->strings['Personal Notes'] = 'Personal notes'; -$a->strings['Subscribing to OStatus contacts'] = 'Subscribing to OStatus contacts'; +$a->strings['Personal notes are visible only by yourself.'] = 'Personal notes are visible only to you.'; +$a->strings['Subscribing to contacts'] = 'Subscribing to contacts'; $a->strings['No contact provided.'] = 'No contact provided.'; $a->strings['Couldn\'t fetch information for contact.'] = 'Couldn\'t fetch information for contact.'; $a->strings['Couldn\'t fetch friends for contact.'] = 'Couldn\'t fetch friends for contact.'; +$a->strings['Couldn\'t fetch following contacts.'] = 'Couldn\'t fetch following contacts.'; +$a->strings['Couldn\'t fetch remote profile.'] = 'Couldn\'t fetch remote profile.'; +$a->strings['Unsupported network'] = 'Unsupported network'; $a->strings['Done'] = 'Done'; $a->strings['success'] = 'success'; $a->strings['failed'] = 'failed'; @@ -439,6 +248,7 @@ $a->strings['Contact information unavailable'] = 'Contact information unavailabl $a->strings['Album not found.'] = 'Album not found.'; $a->strings['Album successfully deleted'] = 'Album successfully deleted'; $a->strings['Album was empty.'] = 'Album was empty.'; +$a->strings['Failed to delete the photo.'] = 'Failed to delete the photo.'; $a->strings['a photo'] = 'a photo'; $a->strings['%1$s was tagged in %2$s by %3$s'] = '%1$s was tagged in %2$s by %3$s'; $a->strings['Image exceeds size limit of %s'] = 'Image exceeds size limit of %s'; @@ -482,12 +292,20 @@ $a->strings['Rotate CW (right)'] = 'Rotate right (CW)'; $a->strings['Rotate CCW (left)'] = 'Rotate left (CCW)'; $a->strings['This is you'] = 'This is me'; $a->strings['Comment'] = 'Comment'; +$a->strings['Select'] = 'Select'; +$a->strings['Delete'] = 'Delete'; +$a->strings['Like'] = 'Like'; $a->strings['I like this (toggle)'] = 'I like this (toggle)'; +$a->strings['Dislike'] = 'Dislike'; $a->strings['I don\'t like this (toggle)'] = 'I don\'t like this (toggle)'; $a->strings['Map'] = 'Map'; $a->strings['View Album'] = 'View album'; $a->strings['{0} wants to be your friend'] = '{0} wants to be your friend'; $a->strings['{0} requested registration'] = '{0} requested registration'; +$a->strings['{0} and %d others requested registration'] = '{0} and %d others requested registration'; +$a->strings['Bad Request.'] = 'Bad Request.'; +$a->strings['Contact not found.'] = 'Contact not found.'; +$a->strings['[Friendica System Notify]'] = '[Friendica System Notify]'; $a->strings['User deleted their account'] = 'User deleted their account'; $a->strings['On your Friendica node an user deleted their account. Please ensure that their data is removed from the backups.'] = 'On your Friendica node a user deleted their account. Please ensure that their data is removed from the backups.'; $a->strings['The user id is %d'] = 'The user id is %d'; @@ -499,8 +317,6 @@ $a->strings['Error'] = [ 0 => 'Error', 1 => 'Errors', ]; -$a->strings['Missing some important data!'] = 'Missing some important data!'; -$a->strings['Update'] = 'Update'; $a->strings['Failed to connect with email account using the settings provided.'] = 'Failed to connect with email account using the settings provided.'; $a->strings['Contact CSV file upload error'] = 'Contact CSV file upload error'; $a->strings['Importing Contacts done'] = 'Importing contacts done'; @@ -516,22 +332,16 @@ $a->strings['Invalid email.'] = 'Invalid email.'; $a->strings['Cannot change to that email.'] = 'Cannot change to that email.'; $a->strings['Private forum has no privacy permissions. Using default privacy group.'] = 'Private forum has no privacy permissions. Using default privacy group.'; $a->strings['Private forum has no privacy permissions and no default privacy group.'] = 'Private forum has no privacy permissions and no default privacy group.'; -$a->strings['Add application'] = 'Add application'; -$a->strings['Save Settings'] = 'Save settings'; -$a->strings['Name'] = 'Name:'; -$a->strings['Consumer Key'] = 'Consumer key'; -$a->strings['Consumer Secret'] = 'Consumer secret'; -$a->strings['Redirect'] = 'Redirect'; -$a->strings['Icon url'] = 'Icon URL'; -$a->strings['You can\'t edit this application.'] = 'You cannot edit this application.'; +$a->strings['Settings were not updated.'] = 'Settings were not updated.'; $a->strings['Connected Apps'] = 'Connected Apps'; -$a->strings['Edit'] = 'Edit'; -$a->strings['Client key starts with'] = 'Client key starts with'; -$a->strings['No name'] = 'No name'; +$a->strings['Name'] = 'Name:'; +$a->strings['Home Page'] = 'Home page'; +$a->strings['Created'] = 'Created'; $a->strings['Remove authorization'] = 'Remove authorization'; -$a->strings['No Addon settings configured'] = 'No addon settings configured'; $a->strings['Addon Settings'] = 'Addon settings'; +$a->strings['No Addon settings configured'] = 'No addon settings configured'; $a->strings['Additional Features'] = 'Additional Features'; +$a->strings['Save Settings'] = 'Save settings'; $a->strings['Diaspora (Socialhome, Hubzilla)'] = 'diaspora* (Socialhome, Hubzilla)'; $a->strings['enabled'] = 'enabled'; $a->strings['disabled'] = 'disabled'; @@ -543,17 +353,16 @@ $a->strings['Social Networks'] = 'Social networks'; $a->strings['General Social Media Settings'] = 'General Social Media Settings'; $a->strings['Accept only top level posts by contacts you follow'] = 'Accept only top-level posts by contacts you follow'; $a->strings['The system does an auto completion of threads when a comment arrives. This has got the side effect that you can receive posts that had been started by a non-follower but had been commented by someone you follow. This setting deactivates this behaviour. When activated, you strictly only will receive posts from people you really do follow.'] = 'The system automatically completes threads when a comment arrives. This has a side effect that you may receive posts started by someone you don\'t follow, because one of your followers commented there. This setting will deactivate this behaviour. If activated, you will only receive posts from people you really do follow.'; -$a->strings['Disable Content Warning'] = 'Disable Content Warning'; -$a->strings['Users on networks like Mastodon or Pleroma are able to set a content warning field which collapse their post by default. This disables the automatic collapsing and sets the content warning as the post title. Doesn\'t affect any other content filtering you eventually set up.'] = 'Users on networks like Mastodon or Pleroma are able to set a content warning field which collapses their post by default. This disables the automatic collapsing and sets the content warning as the post title. It doesn\'t affect any other content filtering you may set up.'; -$a->strings['Disable intelligent shortening'] = 'Disable intelligent shortening'; -$a->strings['Normally the system tries to find the best link to add to shortened posts. If this option is enabled then every shortened post will always point to the original friendica post.'] = 'Normally the system tries to find the best link to add to shortened posts. If this option is enabled then every shortened post will always point to the original Friendica post.'; +$a->strings['Enable Content Warning'] = 'Enable Content Warning'; +$a->strings['Users on networks like Mastodon or Pleroma are able to set a content warning field which collapse their post by default. This enables the automatic collapsing instead of setting the content warning as the post title. Doesn\'t affect any other content filtering you eventually set up.'] = 'Users on networks like Mastodon or Pleroma are able to set a content warning field which collapse their post by default. This enables the automatic collapsing instead of setting the content warning as the post title. Doesn\'t affect any other content filtering you eventually set up.'; +$a->strings['Enable intelligent shortening'] = 'Enable intelligent shortening'; +$a->strings['Normally the system tries to find the best link to add to shortened posts. If disabled, every shortened post will always point to the original friendica post.'] = 'Normally the system tries to find the best link to add to shortened posts. If disabled, every shortened post will always point to the original Friendica post.'; +$a->strings['Enable simple text shortening'] = 'Enable simple text shortening'; +$a->strings['Normally the system shortens posts at the next line feed. If this option is enabled then the system will shorten the text at the maximum character limit.'] = 'Normally the system shortens posts at the next line feed. If this option is enabled then the system will shorten the text at the maximum character limit.'; $a->strings['Attach the link title'] = 'Attach the link title'; $a->strings['When activated, the title of the attached link will be added as a title on posts to Diaspora. This is mostly helpful with "remote-self" contacts that share feed content.'] = 'If activated, the title of the attached link will be added as a title on posts to Diaspora. This is mostly helpful with "remote-self" contacts that share feed content.'; -$a->strings['Automatically follow any GNU Social (OStatus) followers/mentioners'] = 'Automatically follow any GNU Social (OStatus) followers/mentioners'; -$a->strings['If you receive a message from an unknown OStatus user, this option decides what to do. If it is checked, a new contact will be created for every unknown user.'] = 'Create a new contact for every unknown OStatus user from whom you receive a message.'; -$a->strings['Default group for OStatus contacts'] = 'Default group for OStatus contacts'; -$a->strings['Your legacy GNU Social account'] = 'Your legacy GNU Social account'; -$a->strings['If you enter your old GNU Social/Statusnet account name here (in the format user@domain.tld), your contacts will be added automatically. The field will be emptied when done.'] = 'Entering your old GNU Social/Statusnet account name here (format: user@domain.tld), will automatically added your contacts. The field will be emptied when done.'; +$a->strings['Your legacy ActivityPub/GNU Social account'] = 'Your legacy ActivityPub/GNU Social account'; +$a->strings['If you enter your old account name from an ActivityPub based system or your GNU Social/Statusnet account name here (in the format user@domain.tld), your contacts will be added automatically. The field will be emptied when done.'] = 'If you enter your old account name from an ActivityPub based system or your GNU Social/Statusnet account name here (in the format user@domain.tld), your contacts will be added automatically. The field will be emptied when done.'; $a->strings['Repair OStatus subscriptions'] = 'Repair OStatus subscriptions'; $a->strings['Email/Mailbox Setup'] = 'Email/Mailbox setup'; $a->strings['If you wish to communicate with email contacts using this service (optional), please specify how to connect to your mailbox.'] = 'Specify how to connect to your mailbox, if you wish to communicate with existing email contacts.'; @@ -606,6 +415,7 @@ $a->strings['Leave password fields blank unless changing'] = 'Leave password fie $a->strings['Current Password:'] = 'Current password:'; $a->strings['Your current password to confirm the changes'] = 'Current password to confirm change'; $a->strings['Password:'] = 'Password:'; +$a->strings['Your current password to confirm the changes of the email address'] = 'Your current password to confirm the changes of the email address'; $a->strings['Delete OpenID URL'] = 'Delete OpenID URL'; $a->strings['Basic Settings'] = 'Basic information'; $a->strings['Full Name:'] = 'Full name:'; @@ -659,12 +469,17 @@ $a->strings['You receive a private message'] = 'receiving a private message'; $a->strings['You receive a friend suggestion'] = 'Receiving a friend suggestion'; $a->strings['You are tagged in a post'] = 'Tagged in a post'; $a->strings['You are poked/prodded/etc. in a post'] = 'Poked in a post'; +$a->strings['Create a desktop notification when:'] = 'Create a desktop notification when:'; +$a->strings['Someone liked your content'] = 'Someone liked your content'; +$a->strings['Someone shared your content'] = 'Someone shared your content'; $a->strings['Activate desktop notifications'] = 'Activate desktop notifications'; $a->strings['Show desktop popup on new notifications'] = 'Show desktop pop-up on new notifications'; $a->strings['Text-only notification emails'] = 'Text-only notification emails'; $a->strings['Send text only notification emails, without the html part'] = 'Receive text only emails without HTML '; $a->strings['Show detailled notifications'] = 'Show detailled notifications'; $a->strings['Per default, notifications are condensed to a single notification per item. When enabled every notification is displayed.'] = 'By default, notifications are condensed into a single notification for each item. If enabled, every notification is displayed.'; +$a->strings['Show notifications of ignored contacts'] = 'Show notifications of ignored contacts'; +$a->strings['You don\'t see posts from ignored contacts. But you still see their comments. This setting controls if you want to still receive regular notifications that are caused by ignored contacts or not.'] = 'You don\'t see posts from ignored contacts. But you still see their comments. This setting controls if you want to still receive regular notifications that are caused by ignored contacts or not.'; $a->strings['Advanced Account/Page Type Settings'] = 'Advanced account types'; $a->strings['Change the behaviour of this account for special situations'] = 'Change behaviour of this account for special situations'; $a->strings['Import Contacts'] = 'Import Contacts'; @@ -675,6 +490,9 @@ $a->strings['If you have moved this profile from another server, and some of you $a->strings['Resend relocate message to contacts'] = 'Resend relocation message to contacts'; $a->strings['No suggestions available. If this is a new site, please try again in 24 hours.'] = 'No suggestions available. If this is a new site, please try again in 24 hours.'; $a->strings['Friend Suggestions'] = 'Friend suggestions'; +$a->strings['photo'] = 'photo'; +$a->strings['status'] = 'status'; +$a->strings['%1$s tagged %2$s\'s %3$s with %4$s'] = '%1$s tagged %2$s\'s %3$s with %4$s'; $a->strings['Remove Item Tag'] = 'Remove Item tag'; $a->strings['Select a tag to remove: '] = 'Select a tag to remove: '; $a->strings['Remove'] = 'Remove'; @@ -690,24 +508,24 @@ $a->strings['To export your account, go to "Settings->Export your personal data" $a->strings['You aren\'t following this contact.'] = 'You aren\'t following this contact.'; $a->strings['Unfollowing is currently not supported by your network.'] = 'Unfollowing is currently not supported by your network.'; $a->strings['Disconnect/Unfollow'] = 'Disconnect/Unfollow'; -$a->strings['No videos selected'] = 'No videos selected'; -$a->strings['View Video'] = 'View video'; -$a->strings['Recent Videos'] = 'Recent videos'; -$a->strings['Upload New Videos'] = 'Upload new videos'; +$a->strings['Unable to unfollow this contact, please retry in a few minutes or contact your administrator.'] = 'Unable to unfollow this contact, please retry in a few minutes or contact your administrator.'; +$a->strings['Contact was successfully unfollowed'] = 'Contact was successfully unfollowed'; +$a->strings['Unable to unfollow this contact, please contact your administrator'] = 'Unable to unfollow this contact, please contact your administrator'; $a->strings['Invalid request.'] = 'Invalid request.'; $a->strings['Sorry, maybe your upload is bigger than the PHP configuration allows'] = 'Sorry, maybe your upload is bigger than the PHP configuration allows'; $a->strings['Or - did you try to upload an empty file?'] = 'Or did you try to upload an empty file?'; $a->strings['File exceeds size limit of %s'] = 'File exceeds size limit of %s'; $a->strings['File upload failed.'] = 'File upload failed.'; +$a->strings['Wall Photos'] = 'Wall photos'; $a->strings['Number of daily wall messages for %s exceeded. Message failed.'] = 'Number of daily wall messages for %s exceeded. Message failed.'; $a->strings['Unable to check your home location.'] = 'Unable to check your home location.'; $a->strings['No recipient.'] = 'No recipient.'; $a->strings['If you wish for %s to respond, please check that the privacy settings on your site allow private mail from unknown senders.'] = 'If you wish for %s to respond, please check that the privacy settings on your site allow private mail from unknown senders.'; -$a->strings['Wall Photos'] = 'Wall photos'; +$a->strings['No system theme config value set.'] = 'No system theme configuration value set.'; $a->strings['You must be logged in to use addons. '] = 'You must be logged in to use addons. '; $a->strings['Delete this item?'] = 'Delete this item?'; +$a->strings['Block this author? They won\'t be able to follow you nor see your public posts, and you won\'t be able to see their posts and their notifications.'] = 'Block this author? They won\'t be able to follow you nor see your public posts, and you won\'t be able to see their posts and their notifications.'; $a->strings['toggle mobile'] = 'Toggle mobile'; -$a->strings['No system theme config value set.'] = 'No system theme configuration value set.'; $a->strings['Method not allowed for this module. Allowed method(s): %s'] = 'Method not allowed for this module. Allowed method(s): %s'; $a->strings['Page not found.'] = 'Page not found'; $a->strings['The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it.'] = 'The form security token was incorrect. This probably happened because the form has not been submitted within 3 hours.'; @@ -715,6 +533,10 @@ $a->strings['All contacts'] = 'All contacts'; $a->strings['Followers'] = 'Followers'; $a->strings['Following'] = 'Following'; $a->strings['Mutual friends'] = 'Mutual friends'; +$a->strings['Common'] = 'Common'; +$a->strings['Addon not found'] = 'Addon not found'; +$a->strings['Addon already enabled'] = 'Addon already enabled'; +$a->strings['Addon already disabled'] = 'Addon already disabled'; $a->strings['Could not find any unarchived contact entry for this URL (%s)'] = 'Could not find any unarchived contact entry for this URL (%s)'; $a->strings['The contact entries have been archived'] = 'The contact entries have been archived'; $a->strings['Could not find any contact entry for this URL (%s)'] = 'Could not find any contact entry for this URL (%s)'; @@ -724,13 +546,18 @@ $a->strings['Check for pending update actions.'] = 'Check for pending update act $a->strings['Done.'] = 'Done.'; $a->strings['Execute pending post updates.'] = 'Execute pending post updates.'; $a->strings['All pending post updates are done.'] = 'All pending post updates are done.'; +$a->strings['Enter user nickname: '] = 'Enter user nickname: '; $a->strings['Enter new password: '] = 'Enter new password: '; $a->strings['Enter user name: '] = 'Enter user name: '; -$a->strings['Enter user nickname: '] = 'Enter user nickname: '; $a->strings['Enter user email address: '] = 'Enter user email address: '; $a->strings['Enter a language (optional): '] = 'Enter a language (optional): '; $a->strings['User is not pending.'] = 'User is not pending.'; +$a->strings['User has already been marked for deletion.'] = 'User has already been marked for deletion.'; $a->strings['Type "yes" to delete %s'] = 'Type "yes" to delete %s'; +$a->strings['Deletion aborted.'] = 'Deletion aborted.'; +$a->strings['Enter category: '] = 'Enter category: '; +$a->strings['Enter key: '] = 'Enter key: '; +$a->strings['Enter value: '] = 'Enter value: '; $a->strings['newer'] = 'Later posts'; $a->strings['older'] = 'Earlier posts'; $a->strings['Frequently'] = 'Frequently'; @@ -757,6 +584,62 @@ $a->strings['GNU Social Connector'] = 'GNU Social Connector'; $a->strings['ActivityPub'] = 'ActivityPub'; $a->strings['pnut'] = 'pnut'; $a->strings['%s (via %s)'] = '%s (via %s)'; +$a->strings['%s likes this.'] = '%s likes this.'; +$a->strings['%s doesn\'t like this.'] = '%s doesn\'t like this.'; +$a->strings['%s attends.'] = '%s attends.'; +$a->strings['%s doesn\'t attend.'] = '%s doesn\'t attend.'; +$a->strings['%s attends maybe.'] = '%s may attend.'; +$a->strings['%s reshared this.'] = '%s reshared this.'; +$a->strings['and'] = 'and'; +$a->strings['and %d other people'] = 'and %d other people'; +$a->strings['%2$d people like this'] = '%2$d people like this'; +$a->strings['%s like this.'] = '%s like this.'; +$a->strings['%2$d people don\'t like this'] = '%2$d people don\'t like this'; +$a->strings['%s don\'t like this.'] = '%s don\'t like this.'; +$a->strings['%2$d people attend'] = '%2$d people attend'; +$a->strings['%s attend.'] = '%s attend.'; +$a->strings['%2$d people don\'t attend'] = '%2$d people don\'t attend'; +$a->strings['%s don\'t attend.'] = '%s don\'t attend.'; +$a->strings['%2$d people attend maybe'] = '%2$d people attend maybe'; +$a->strings['%s attend maybe.'] = '%s may be attending.'; +$a->strings['%2$d people reshared this'] = '%2$d people reshared this'; +$a->strings['Visible to everybody'] = 'Visible to everybody'; +$a->strings['Please enter a image/video/audio/webpage URL:'] = 'Please enter an image/video/audio/webpage URL:'; +$a->strings['Tag term:'] = 'Tag term:'; +$a->strings['Save to Folder:'] = 'Save to folder:'; +$a->strings['Where are you right now?'] = 'Where are you right now?'; +$a->strings['Delete item(s)?'] = 'Delete item(s)?'; +$a->strings['New Post'] = 'New post'; +$a->strings['Share'] = 'Share'; +$a->strings['Bold'] = 'Bold'; +$a->strings['Italic'] = 'Italic'; +$a->strings['Underline'] = 'Underline'; +$a->strings['Quote'] = 'Quote'; +$a->strings['Code'] = 'Code'; +$a->strings['Image'] = 'Image'; +$a->strings['Link'] = 'Link'; +$a->strings['Link or Media'] = 'Link or media'; +$a->strings['Video'] = 'Video'; +$a->strings['Scheduled at'] = 'Scheduled at'; +$a->strings['View %s\'s profile @ %s'] = 'View %s\'s profile @ %s'; +$a->strings['Categories:'] = 'Categories:'; +$a->strings['Filed under:'] = 'Filed under:'; +$a->strings['%s from %s'] = '%s from %s'; +$a->strings['View in context'] = 'View in context'; +$a->strings['remove'] = 'Remove'; +$a->strings['Delete Selected Items'] = 'Delete selected items'; +$a->strings['You had been addressed (%s).'] = 'You had been addressed (%s).'; +$a->strings['You are following %s.'] = 'You are following %s.'; +$a->strings['Tagged'] = 'Tagged'; +$a->strings['Reshared'] = 'Reshared'; +$a->strings['Reshared by %s <%s>'] = 'Reshared by %s <%s>'; +$a->strings['%s is participating in this thread.'] = '%s is participating in this thread.'; +$a->strings['Stored'] = 'Stored'; +$a->strings['Global'] = 'Global'; +$a->strings['Relayed'] = 'Relayed'; +$a->strings['Relayed by %s <%s>'] = 'Relayed by %s <%s>'; +$a->strings['Fetched'] = 'Fetched'; +$a->strings['Fetched because of %s <%s>'] = 'Fetched because of %s <%s>'; $a->strings['General Features'] = 'General'; $a->strings['Photo Location'] = 'Photo location'; $a->strings['Photo metadata is normally stripped. This extracts the location (if present) prior to stripping metadata and links it to a map.'] = 'Photo metadata is normally removed. This extracts the location (if present) prior to removing metadata and links it to a map.'; @@ -779,7 +662,21 @@ $a->strings['Display Membership Date'] = 'Display membership date'; $a->strings['Display membership date in profile'] = 'Display membership date in profile'; $a->strings['Forums'] = 'Forums'; $a->strings['External link to forum'] = 'External link to forum'; +$a->strings['show less'] = 'show less'; $a->strings['show more'] = 'Show more...'; +$a->strings['%1$s poked %2$s'] = '%1$s poked %2$s'; +$a->strings['event'] = 'event'; +$a->strings['Follow Thread'] = 'Follow thread'; +$a->strings['View Status'] = 'View status'; +$a->strings['View Profile'] = 'View profile'; +$a->strings['View Photos'] = 'View photos'; +$a->strings['Network Posts'] = 'Network posts'; +$a->strings['View Contact'] = 'View contact'; +$a->strings['Send PM'] = 'Send PM'; +$a->strings['Block'] = 'Block'; +$a->strings['Ignore'] = 'Ignore'; +$a->strings['Languages'] = 'Languages'; +$a->strings['Poke'] = 'Poke'; $a->strings['Nothing new here'] = 'Nothing new here'; $a->strings['Go back'] = 'Go back'; $a->strings['Clear notifications'] = 'Clear notifications'; @@ -793,13 +690,12 @@ $a->strings['Your posts and conversations'] = 'My posts and conversations'; $a->strings['Profile'] = 'Profile'; $a->strings['Your profile page'] = 'My profile page'; $a->strings['Your photos'] = 'My photos'; -$a->strings['Videos'] = 'Videos'; -$a->strings['Your videos'] = 'My videos'; +$a->strings['Media'] = 'Media'; +$a->strings['Your postings with media'] = 'Your postings with media'; $a->strings['Your events'] = 'My events'; $a->strings['Personal notes'] = 'Personal notes'; $a->strings['Your personal notes'] = 'My personal notes'; $a->strings['Home'] = 'Home'; -$a->strings['Home Page'] = 'Home page'; $a->strings['Register'] = 'Sign up now >>'; $a->strings['Create an account'] = 'Create account'; $a->strings['Help'] = 'Help'; @@ -841,11 +737,13 @@ $a->strings['Navigation'] = 'Navigation'; $a->strings['Site map'] = 'Site map'; $a->strings['Embedding disabled'] = 'Embedding disabled'; $a->strings['Embedded content'] = 'Embedded content'; +$a->strings['first'] = 'first'; $a->strings['prev'] = 'prev'; +$a->strings['next'] = 'next'; $a->strings['last'] = 'last'; $a->strings['Image/photo'] = 'Image/Photo'; $a->strings['%2$s %3$s'] = '%2$s %3$s'; -$a->strings['link to source'] = 'Link to source'; +$a->strings['Link to source'] = 'Link to source'; $a->strings['Click to open/close'] = 'Reveal/hide'; $a->strings['$1 wrote:'] = '$1 wrote:'; $a->strings['Encrypted content'] = 'Encrypted content'; @@ -854,15 +752,6 @@ $a->strings['Invalid link protocol'] = 'Invalid link protocol'; $a->strings['Loading more entries...'] = 'Loading more entries...'; $a->strings['The end'] = 'The end'; $a->strings['Follow'] = 'Follow'; -$a->strings['Export'] = 'Export'; -$a->strings['Export calendar as ical'] = 'Export calendar as ical'; -$a->strings['Export calendar as csv'] = 'Export calendar as csv'; -$a->strings['No contacts'] = 'No contacts'; -$a->strings['%d Contact'] = [ - 0 => '%d contact', - 1 => '%d contacts', -]; -$a->strings['View Contacts'] = 'View contacts'; $a->strings['Add New Contact'] = 'Add new contact'; $a->strings['Enter address or web location'] = 'Enter address or web location'; $a->strings['Example: bob@example.com, http://example.com/barbara'] = 'Example: jo@example.com, http://example.com/jo'; @@ -894,7 +783,19 @@ $a->strings['%d contact in common'] = [ 1 => '%d contacts in common', ]; $a->strings['Archives'] = 'Archives'; +$a->strings['Persons'] = 'Persons'; +$a->strings['Organisations'] = 'Organisations'; $a->strings['News'] = 'News'; +$a->strings['All'] = 'All'; +$a->strings['Export'] = 'Export'; +$a->strings['Export calendar as ical'] = 'Export calendar as ical'; +$a->strings['Export calendar as csv'] = 'Export calendar as csv'; +$a->strings['No contacts'] = 'No contacts'; +$a->strings['%d Contact'] = [ + 0 => '%d contact', + 1 => '%d contacts', +]; +$a->strings['View Contacts'] = 'View contacts'; $a->strings['Remove term'] = 'Remove term'; $a->strings['Saved Searches'] = 'Saved searches'; $a->strings['Trending Tags (last %d hour)'] = [ @@ -902,6 +803,10 @@ $a->strings['Trending Tags (last %d hour)'] = [ 1 => 'Trending tags (last %d hours)', ]; $a->strings['More Trending Tags'] = 'More Trending Tags'; +$a->strings['XMPP:'] = 'XMPP:'; +$a->strings['Matrix:'] = 'Matrix:'; +$a->strings['Network:'] = 'Network:'; +$a->strings['Unfollow'] = 'Unfollow'; $a->strings['Yourself'] = 'Yourself'; $a->strings['Mutuals'] = 'Mutuals'; $a->strings['Post to Email'] = 'Post to email'; @@ -914,7 +819,9 @@ $a->strings['Except to:'] = 'Except to:'; $a->strings['Connectors'] = 'Connectors'; $a->strings['The database configuration file "config/local.config.php" could not be written. Please use the enclosed text to create a configuration file in your web server root.'] = 'The database configuration file "config/local.config.php" could not be written. Please use the enclosed text to create a configuration file in your web server root.'; $a->strings['You may need to import the file "database.sql" manually using phpmyadmin or mysql.'] = 'You may need to import the file "database.sql" manually using phpmyadmin or mysql.'; +$a->strings['Please see the file "doc/INSTALL.md".'] = 'Please see the file "doc/INSTALL.md".'; $a->strings['Could not find a command line version of PHP in the web server PATH.'] = 'Could not find a command line version of PHP in the web server PATH.'; +$a->strings['If you don\'t have a command line version of PHP installed on your server, you will not be able to run the background processing. See \'Setup the worker\''] = 'If you don\'t have a command line version of PHP installed on your server, you will not be able to run the background processing. See \'Setup the worker\''; $a->strings['PHP executable path'] = 'PHP executable path'; $a->strings['Enter full path to php executable. You can leave this blank to continue the installation.'] = 'Enter full path to php executable. You can leave this blank to continue the installation.'; $a->strings['Command line PHP'] = 'Command line PHP'; @@ -946,6 +853,8 @@ $a->strings['iconv PHP module'] = 'iconv PHP module'; $a->strings['Error: iconv PHP module required but not installed.'] = 'Error: iconv PHP module required but not installed.'; $a->strings['POSIX PHP module'] = 'POSIX PHP module'; $a->strings['Error: POSIX PHP module required but not installed.'] = 'Error: POSIX PHP module required but not installed.'; +$a->strings['Program execution functions'] = 'Program execution functions'; +$a->strings['Error: Program execution functions (proc_open) required but not enabled.'] = 'Error: Program execution functions (proc_open) required but not enabled.'; $a->strings['JSON PHP module'] = 'JSON PHP module'; $a->strings['Error: JSON PHP module required but not installed.'] = 'Error: JSON PHP module is required but not installed.'; $a->strings['File Information PHP module'] = 'File Information PHP module'; @@ -953,14 +862,22 @@ $a->strings['Error: File Information PHP module required but not installed.'] = $a->strings['The web installer needs to be able to create a file called "local.config.php" in the "config" folder of your web server and it is unable to do so.'] = 'The web installer needs to be able to create a file called "local.config.php" in the "config" folder of your web server but is unable to do so.'; $a->strings['This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can.'] = 'This is most often a permission setting issue, as the web server may not be able to write files in your directory - even if you can.'; $a->strings['At the end of this procedure, we will give you a text to save in a file named local.config.php in your Friendica "config" folder.'] = 'At the end of this procedure, we will give you a text to save in a file named local.config.php in your Friendica "config" folder.'; +$a->strings['You can alternatively skip this procedure and perform a manual installation. Please see the file "doc/INSTALL.md" for instructions.'] = 'You can alternatively skip this procedure and perform a manual installation. Please see the file "doc/INSTALL.md" for instructions.'; $a->strings['config/local.config.php is writable'] = 'config/local.config.php is writable'; $a->strings['Friendica uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering.'] = 'Friendica uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering.'; $a->strings['In order to store these compiled templates, the web server needs to have write access to the directory view/smarty3/ under the Friendica top level folder.'] = 'In order to store these compiled templates, the web server needs to have write access to the directory view/smarty3/ under the Friendica top-level directory.'; $a->strings['Please ensure that the user that your web server runs as (e.g. www-data) has write access to this folder.'] = 'Please ensure the user (e.g. www-data) that your web server runs as has write access to this directory.'; $a->strings['Note: as a security measure, you should give the web server write access to view/smarty3/ only--not the template files (.tpl) that it contains.'] = 'Note: as a security measure, you should give the web server write access to view/smarty3/ only--not the template files (.tpl) that it contains.'; $a->strings['view/smarty3 is writable'] = 'view/smarty3 is writeable'; +$a->strings['Url rewrite in .htaccess seems not working. Make sure you copied .htaccess-dist to .htaccess.'] = 'Url rewrite in .htaccess seems not working. Make sure you copied .htaccess-dist to .htaccess.'; +$a->strings['In some circumstances (like running inside containers), you can skip this error.'] = 'In some situations like running inside a container, you can skip this error.'; $a->strings['Error message from Curl when fetching'] = 'Error message from Curl while fetching'; $a->strings['Url rewrite is working'] = 'URL rewrite is working'; +$a->strings['The detection of TLS to secure the communication between the browser and the new Friendica server failed.'] = 'Failed to detect TLS that secures the communication between the browser and the new Friendica server.'; +$a->strings['It is highly encouraged to use Friendica only over a secure connection as sensitive information like passwords will be transmitted.'] = 'It\'s highly encouraged using Friendica only over a secure connection as sensitive information like passwords will be transmitted.'; +$a->strings['Please ensure that the connection to the server is secure.'] = 'Please ensure that the connection to the server is secure.'; +$a->strings['No TLS detected'] = 'No TLS detected'; +$a->strings['TLS detected'] = 'TLS detected'; $a->strings['ImageMagick PHP extension is not installed'] = 'ImageMagick PHP extension is not installed'; $a->strings['ImageMagick PHP extension is installed'] = 'ImageMagick PHP extension is installed'; $a->strings['ImageMagick supports GIF'] = 'ImageMagick supports GIF'; @@ -1015,6 +932,13 @@ $a->strings['finger'] = 'finger'; $a->strings['fingered'] = 'fingered'; $a->strings['rebuff'] = 'rebuff'; $a->strings['rebuffed'] = 'rebuffed'; +$a->strings['Friendica can\'t display this page at the moment, please contact the administrator.'] = 'Friendica can\'t display this page at the moment, please contact the administrator.'; +$a->strings['template engine cannot be registered without a name.'] = 'template engine cannot be registered without a name.'; +$a->strings['template engine is not registered!'] = 'template engine is not registered!'; +$a->strings['Updates from version %s are not supported. Please update at least to version 2021.01 and wait until the postupdate finished version 1383.'] = 'Updates from version %s are not supported. Please update at least to version 2021.01 and wait until the postupdate finished version 1383.'; +$a->strings['Updates from postupdate version %s are not supported. Please update at least to version 2021.01 and wait until the postupdate finished version 1383.'] = 'Updates from postupdate version %s are not supported. Please update at least to version 2021.01 and wait until the postupdate finished version 1383.'; +$a->strings['%s: executing pre update %d'] = '%s: executing pre update %d'; +$a->strings['%s: executing post update %d'] = '%s: executing post update %d'; $a->strings['Update %s failed. See error logs.'] = 'Update %s failed. See error logs.'; $a->strings[' The friendica developers released update %s recently, @@ -1025,6 +949,7 @@ $a->strings[' but when I tried to install it, something went terribly wrong. This needs to be fixed soon and I can\'t do it alone. Please contact a friendica developer if you can not help me on your own. My database might be invalid.'; +$a->strings['The error message is\n[pre]%s[/pre]'] = 'The error message is\n[pre]%s[/pre]'; $a->strings['[Friendica Notify] Database update'] = '[Friendica Notify] Database update'; $a->strings[' The friendica database was successfully updated from %s to %s.'] = ' @@ -1039,6 +964,9 @@ $a->strings['%d contact not imported'] = [ ]; $a->strings['User profile creation error'] = 'User profile creation error'; $a->strings['Done. You can now login with your username and password'] = 'Done. You can now login with your username and password'; +$a->strings['The database version had been set to %s.'] = 'The database version had been set to %s.'; +$a->strings['The post update is at version %d, it has to be at %d to safely drop the tables.'] = 'The post update is at version %d, it has to be at %d to safely drop the tables.'; +$a->strings['No unused tables found.'] = 'No unused tables found.'; $a->strings['There are no tables on MyISAM or InnoDB with the Antelope file format.'] = 'There are no tables on MyISAM or InnoDB with the Antelope file format.'; $a->strings[' Error %d occurred during database update: @@ -1050,28 +978,19 @@ Error %d occurred during database update: $a->strings['Errors encountered performing database changes: '] = 'Errors encountered performing database changes: '; $a->strings['%s: Database update'] = '%s: Database update'; $a->strings['%s: updating %s table.'] = '%s: updating %s table.'; -$a->strings['Friend Suggestion'] = 'Friend suggestion'; -$a->strings['Friend/Connect Request'] = 'Friend/Contact request'; -$a->strings['New Follower'] = 'New follower'; -$a->strings['%s created a new post'] = '%s posted something new'; -$a->strings['%s commented on %s\'s post'] = '%s commented on %s\'s post'; -$a->strings['%s liked %s\'s post'] = '%s liked %s\'s post'; -$a->strings['%s disliked %s\'s post'] = '%s disliked %s\'s post'; -$a->strings['%s is attending %s\'s event'] = '%s is going to %s\'s event'; -$a->strings['%s is not attending %s\'s event'] = '%s is not going to %s\'s event'; -$a->strings['%s may attending %s\'s event'] = '%s may attending %s\'s event'; -$a->strings['%s is now friends with %s'] = '%s is now friends with %s'; +$a->strings['Unauthorized'] = 'Unauthorized'; +$a->strings['Internal Server Error'] = 'Internal Server Error'; $a->strings['Legacy module file not found: %s'] = 'Legacy module file not found: %s'; $a->strings['UnFollow'] = 'Unfollow'; -$a->strings['Drop Contact'] = 'Drop contact'; $a->strings['Approve'] = 'Approve'; $a->strings['Organisation'] = 'Organisation'; $a->strings['Forum'] = 'Forum'; +$a->strings['Disallowed profile URL.'] = 'Disallowed profile URL.'; +$a->strings['Blocked domain'] = 'Blocked domain'; $a->strings['Connect URL missing.'] = 'Connect URL missing.'; $a->strings['The contact could not be added. Please check the relevant network credentials in your Settings -> Social Networks page.'] = 'The contact could not be added. Please check the relevant network credentials in your Settings -> Social Networks page.'; -$a->strings['This site is not configured to allow communications with other networks.'] = 'This site is not configured to allow communications with other networks.'; -$a->strings['No compatible communication protocols or feeds were discovered.'] = 'No compatible communication protocols or feeds were discovered.'; $a->strings['The profile address specified does not provide adequate information.'] = 'The profile address specified does not provide adequate information.'; +$a->strings['No compatible communication protocols or feeds were discovered.'] = 'No compatible communication protocols or feeds were discovered.'; $a->strings['An author or name was not found.'] = 'An author or name was not found.'; $a->strings['No browser URL could be matched to this address.'] = 'No browser URL could be matched to this address.'; $a->strings['Unable to match @-style Identity Address with a known protocol or email contact.'] = 'Unable to match @-style identity address with a known protocol or email contact.'; @@ -1079,7 +998,6 @@ $a->strings['Use mailto: in front of address to force email check.'] = 'Use mail $a->strings['The profile address specified belongs to a network which has been disabled on this site.'] = 'The profile address specified belongs to a network which has been disabled on this site.'; $a->strings['Limited profile. This person will be unable to receive direct/personal notifications from you.'] = 'Limited profile: This person will be unable to receive direct/private messages from you.'; $a->strings['Unable to retrieve contact information.'] = 'Unable to retrieve contact information.'; -$a->strings['l F d, Y \@ g:i A'] = 'l F d, Y \@ g:i A'; $a->strings['Starts:'] = 'Starts:'; $a->strings['Finishes:'] = 'Finishes:'; $a->strings['all-day'] = 'All-day'; @@ -1089,6 +1007,7 @@ $a->strings['l, F j'] = 'l, F j'; $a->strings['Edit event'] = 'Edit event'; $a->strings['Duplicate event'] = 'Duplicate event'; $a->strings['Delete event'] = 'Delete event'; +$a->strings['l F d, Y \@ g:i A'] = 'l F d, Y \@ g:i A'; $a->strings['D g:i A'] = 'D g:i A'; $a->strings['g:i A'] = 'g:i A'; $a->strings['Show map'] = 'Show map'; @@ -1106,24 +1025,16 @@ $a->strings['Create a new group'] = 'Create new group'; $a->strings['Group Name: '] = 'Group name: '; $a->strings['Edit groups'] = 'Edit groups'; $a->strings['activity'] = 'activity'; -$a->strings['comment'] = [ - 0 => 'comment', - 1 => 'comments', -]; $a->strings['post'] = 'post'; $a->strings['Content warning: %s'] = 'Content warning: %s'; $a->strings['bytes'] = 'bytes'; $a->strings['View on separate page'] = 'View on separate page'; -$a->strings['view on separate page'] = 'view on separate page'; $a->strings['[no subject]'] = '[no subject]'; $a->strings['Edit profile'] = 'Edit profile'; $a->strings['Change profile photo'] = 'Change profile photo'; $a->strings['Homepage:'] = 'Homepage:'; $a->strings['About:'] = 'About:'; -$a->strings['XMPP:'] = 'XMPP:'; -$a->strings['Unfollow'] = 'Unfollow'; $a->strings['Atom feed'] = 'Atom feed'; -$a->strings['Network:'] = 'Network:'; $a->strings['g A l F d'] = 'g A l F d'; $a->strings['F d'] = 'F d'; $a->strings['[today]'] = '[today]'; @@ -1133,10 +1044,26 @@ $a->strings['[No description]'] = '[No description]'; $a->strings['Event Reminders'] = 'Event reminders'; $a->strings['Upcoming events the next 7 days:'] = 'Upcoming events the next 7 days:'; $a->strings['OpenWebAuth: %1$s welcomes %2$s'] = 'OpenWebAuth: %1$s welcomes %2$s'; -$a->strings['Database storage failed to update %s'] = 'Database storage failed to update %s'; -$a->strings['Database storage failed to insert data'] = 'Database storage failed to insert data'; -$a->strings['Filesystem storage failed to create "%s". Check you write permissions.'] = 'Filesystem storage failed to create "%s". Check you write permissions.'; -$a->strings['Filesystem storage failed to save data to "%s". Check your write permissions'] = 'Filesystem storage failed to save data to "%s". Check your write permissions'; +$a->strings['Hometown:'] = 'Home town:'; +$a->strings['Marital Status:'] = 'Marital Status:'; +$a->strings['With:'] = 'With:'; +$a->strings['Since:'] = 'Since:'; +$a->strings['Sexual Preference:'] = 'Sexual preference:'; +$a->strings['Political Views:'] = 'Political views:'; +$a->strings['Religious Views:'] = 'Religious views:'; +$a->strings['Likes:'] = 'Likes:'; +$a->strings['Dislikes:'] = 'Dislikes:'; +$a->strings['Title/Description:'] = 'Title/Description:'; +$a->strings['Summary'] = 'Summary'; +$a->strings['Musical interests'] = 'Music:'; +$a->strings['Books, literature'] = 'Books, literature, poetry:'; +$a->strings['Television'] = 'Television:'; +$a->strings['Film/dance/culture/entertainment'] = 'Film, dance, culture, entertainment'; +$a->strings['Hobbies/Interests'] = 'Hobbies/Interests:'; +$a->strings['Love/romance'] = 'Love/Romance:'; +$a->strings['Work/employment'] = 'Work/Employment:'; +$a->strings['School/education'] = 'School/Education:'; +$a->strings['Contact information and Social Networks'] = 'Contact information and other social networks:'; $a->strings['Storage base path'] = 'Storage base path'; $a->strings['Folder where uploaded files are saved. For maximum security, This should be a path outside web server folder tree'] = 'Folder where uploaded files are saved. For maximum security, this should be a path outside web server folder tree'; $a->strings['Enter a valid existing folder'] = 'Enter a valid existing folder'; @@ -1175,6 +1102,7 @@ $a->strings['An error occurred creating your default profile. Please try again.' $a->strings['An error occurred creating your self contact. Please try again.'] = 'An error occurred creating your self-contact. Please try again.'; $a->strings['Friends'] = 'Friends'; $a->strings['An error occurred creating your default contact group. Please try again.'] = 'An error occurred while creating your default contact group. Please try again.'; +$a->strings['Profile Photos'] = 'Profile photos'; $a->strings[' Dear %1$s, the administrator of %2$s has set up an account for you.'] = ' @@ -1421,19 +1349,16 @@ $a->strings['Must be writable by web server. Relative to your Friendica top-leve $a->strings['Log level'] = 'Log level'; $a->strings['PHP logging'] = 'PHP logging'; $a->strings['To temporarily enable logging of PHP errors and warnings you can prepend the following to the index.php file of your installation. The filename set in the \'error_log\' line is relative to the friendica top-level directory and must be writeable by the web server. The option \'1\' for \'log_errors\' and \'display_errors\' is to enable these options, set to \'0\' to disable them.'] = 'To temporarily enable logging of PHP errors and warnings you can prepend the following to the index.php file of your installation. The filename set in the \'error_log\' line is relative to the friendica top-level directory and must be writeable by the web server. The option \'1\' for \'log_errors\' and \'display_errors\' is to enable these options, set to \'0\' to disable them.'; -$a->strings['Error trying to open %1$s log file.\r\n
Check to see if file %1$s exist and is readable.'] = 'Error trying to open %1$s log file.\r\n
Check to see if file %1$s exist and is readable.'; -$a->strings['Couldn\'t open %1$s log file.\r\n
Check to see if file %1$s is readable.'] = 'Couldn\'t open %1$s log file.\r\n
Check if file %1$s is readable.'; $a->strings['View Logs'] = 'View logs'; +$a->strings['Show all'] = 'Show all'; $a->strings['Inspect Deferred Worker Queue'] = 'Inspect Deferred Worker Queue'; $a->strings['This page lists the deferred worker jobs. This are jobs that couldn\'t be executed at the first time.'] = 'This page lists the deferred worker jobs. These are jobs that couldn\'t initially be executed.'; $a->strings['Inspect Worker Queue'] = 'Inspect Worker Queue'; $a->strings['This page lists the currently queued worker jobs. These jobs are handled by the worker cronjob you\'ve set up during install.'] = 'This page lists the currently queued worker jobs. These jobs are handled by the worker cronjob you\'ve set up during install.'; $a->strings['ID'] = 'ID'; $a->strings['Job Parameters'] = 'Job Parameters'; -$a->strings['Created'] = 'Created'; $a->strings['Priority'] = 'Priority'; $a->strings['Can not parse base url. Must have at least ://'] = 'Can not parse base URL. Must have at least ://'; -$a->strings['Invalid storage backend setting value.'] = 'Invalid storage backend settings.'; $a->strings['No special theme for mobile devices'] = 'No special theme for mobile devices'; $a->strings['%s - (Experimental)'] = '%s - (Experimental)'; $a->strings['No community page for local users'] = 'No community page for local users'; @@ -1452,7 +1377,6 @@ $a->strings['Don\'t check'] = 'Don\'t check'; $a->strings['check the stable version'] = 'check for stable version updates'; $a->strings['check the development version'] = 'check for development version updates'; $a->strings['none'] = 'none'; -$a->strings['Database (legacy)'] = 'Database (legacy)'; $a->strings['Site'] = 'Site'; $a->strings['Republish users to directory'] = 'Republish users to directory'; $a->strings['Registration'] = 'Join this Friendica Node Today'; @@ -1484,12 +1408,8 @@ $a->strings['SSL link policy'] = 'SSL link policy'; $a->strings['Determines whether generated links should be forced to use SSL'] = 'Determines whether generated links should be forced to use SSL'; $a->strings['Force SSL'] = 'Force SSL'; $a->strings['Force all Non-SSL requests to SSL - Attention: on some systems it could lead to endless loops.'] = 'Force all Non-SSL requests to SSL - Attention: on some systems it could lead to endless loops.'; -$a->strings['Hide help entry from navigation menu'] = 'Hide help entry from navigation menu'; -$a->strings['Hides the menu entry for the Help pages from the navigation menu. You can still access it calling /help directly.'] = 'Hides the menu entry for the Help pages from the navigation menu. Help pages can still be accessed by calling ../help directly via its URL.'; $a->strings['Single user instance'] = 'Single user instance'; $a->strings['Make this instance multi-user or single-user for the named user'] = 'Make this instance multi-user or single-user for the named user'; -$a->strings['File storage backend'] = 'File storage backend'; -$a->strings['The backend used to store uploaded data. If you change the storage backend, you can manually move the existing files. If you do not do so, the files uploaded before the change will still be available at the old backend. Please see the settings documentation for more information about the choices and the moving procedure.'] = 'The backend used to store uploaded data. If you change the storage backend, you can manually move the existing files. If you don\'t do so, the files uploaded before the change will still be available at the old backend. Please see the settings documentation for more information about the choices and the moving procedure.'; $a->strings['Maximum image size'] = 'Maximum image size'; $a->strings['Maximum size in bytes of uploaded images. Default is 0, which means no limits.'] = 'Maximum size in bytes of uploaded images. Default is 0, which means no limits.'; $a->strings['Maximum image length'] = 'Maximum image length'; @@ -1530,24 +1450,12 @@ $a->strings['Explicit Content'] = 'Explicit Content'; $a->strings['Set this to announce that your node is used mostly for explicit content that might not be suited for minors. This information will be published in the node information and might be used, e.g. by the global directory, to filter your node from listings of nodes to join. Additionally a note about this will be shown at the user registration page.'] = 'Set this to announce that your node is used mostly for explicit content that might not be suited for minors. This information will be published in the node information and might be used, e.g. by the global directory, to filter your node from listings of nodes to join. Additionally a note about this will be shown at the user registration page.'; $a->strings['Allow Users to set remote_self'] = 'Allow users to set "Remote self"'; $a->strings['With checking this, every user is allowed to mark every contact as a remote_self in the repair contact dialog. Setting this flag on a contact causes mirroring every posting of that contact in the users stream.'] = 'This allows every user to mark contacts as a "Remote self" in the repair contact dialogue. Setting this flag on a contact will mirror every posting of that contact in the users stream.'; -$a->strings['Block multiple registrations'] = 'Block multiple registrations'; -$a->strings['Disallow users to register additional accounts for use as pages.'] = 'Disallow users to sign up for additional accounts.'; -$a->strings['Disable OpenID'] = 'Disable OpenID'; -$a->strings['Disable OpenID support for registration and logins.'] = 'Disable OpenID support for registration and logins.'; -$a->strings['No Fullname check'] = 'No full name check'; -$a->strings['Allow users to register without a space between the first name and the last name in their full name.'] = 'Allow users to register without a space between the first name and the last name in their full name.'; $a->strings['Community pages for visitors'] = 'Community pages for visitors'; $a->strings['Which community pages should be available for visitors. Local users always see both pages.'] = 'Community pages that should be available for visitors. Local users always see both pages.'; $a->strings['Posts per user on community page'] = 'Posts per user on community page'; $a->strings['The maximum number of posts per user on the community page. (Not valid for "Global Community")'] = 'Maximum number of posts per user on the community page. (Not valid for "Global Community")'; -$a->strings['Disable OStatus support'] = 'Disable OStatus support'; -$a->strings['Disable built-in OStatus (StatusNet, GNU Social etc.) compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed.'] = 'Disable built-in OStatus (StatusNet, GNU Social etc.) compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed.'; -$a->strings['OStatus support can only be enabled if threading is enabled.'] = 'OStatus support can only be enabled if threading is enabled.'; $a->strings['Diaspora support can\'t be enabled because Friendica was installed into a sub directory.'] = 'diaspora* support can\'t be enabled because Friendica was installed into a sub directory.'; $a->strings['Enable Diaspora support'] = 'Enable diaspora* support'; -$a->strings['Provide built-in Diaspora network compatibility.'] = 'Provide built-in diaspora* network compatibility.'; -$a->strings['Only allow Friendica contacts'] = 'Only allow Friendica contacts'; -$a->strings['All contacts must use Friendica protocols. All other built-in communication protocols disabled.'] = 'All contacts must use Friendica protocols. All other built-in communication protocols will be disabled.'; $a->strings['Verify SSL'] = 'Verify SSL'; $a->strings['If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites.'] = 'If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites.'; $a->strings['Proxy user'] = 'Proxy user'; @@ -1579,24 +1487,14 @@ $a->strings['Lifespan of unclaimed items'] = 'Lifespan of unclaimed items'; $a->strings['When the database cleanup is enabled, this defines the days after which unclaimed remote items (mostly content from the relay) will be deleted. Default value is 90 days. Defaults to the general lifespan value of remote items if set to 0.'] = 'If the database cleanup is enabled, this defines the days after which unclaimed remote items (mostly content from the relay) will be deleted. Default value is 90 days. Defaults to the general lifespan value of remote items if set to 0.'; $a->strings['Lifespan of raw conversation data'] = 'Lifespan of raw conversation data'; $a->strings['The conversation data is used for ActivityPub and OStatus, as well as for debug purposes. It should be safe to remove it after 14 days, default is 90 days.'] = 'The conversation data is used for ActivityPub and OStatus, as well as for debug purposes. It should be safe to remove it after 14 days, default is 90 days.'; -$a->strings['Path to item cache'] = 'Path to item cache'; -$a->strings['The item caches buffers generated bbcode and external images.'] = 'The item caches buffers generated bbcode and external images.'; -$a->strings['Cache duration in seconds'] = 'Cache duration in seconds'; -$a->strings['How long should the cache files be hold? Default value is 86400 seconds (One day). To disable the item cache, set the value to -1.'] = 'How long should cache files be held? (Default 86400 seconds - one day; -1 disables item cache)'; $a->strings['Maximum numbers of comments per post'] = 'Maximum numbers of comments per post'; $a->strings['How much comments should be shown for each post? Default value is 100.'] = 'How many comments should be shown for each post? (Default 100)'; $a->strings['Temp path'] = 'Temp path'; $a->strings['If you have a restricted system where the webserver can\'t access the system temp path, enter another path here.'] = 'Enter a different tmp path, if your system restricts the webserver\'s access to the system temp path.'; -$a->strings['Disable picture proxy'] = 'Disable picture proxy'; -$a->strings['The picture proxy increases performance and privacy. It shouldn\'t be used on systems with very low bandwidth.'] = 'The picture proxy increases performance and privacy. It shouldn\'t be used on systems with very low bandwidth.'; $a->strings['Only search in tags'] = 'Only search in tags'; $a->strings['On large systems the text search can slow down the system extremely.'] = 'On large systems the text search can slow down the system significantly.'; $a->strings['New base url'] = 'New base URL'; $a->strings['Change base url for this server. Sends relocate message to all Friendica and Diaspora* contacts of all users.'] = 'Change base url for this server. Sends relocate message to all Friendica and diaspora* contacts of all users.'; -$a->strings['RINO Encryption'] = 'RINO Encryption'; -$a->strings['Encryption layer between nodes.'] = 'Encryption layer between nodes.'; -$a->strings['Disabled'] = 'Disabled'; -$a->strings['Enabled'] = 'Enabled'; $a->strings['Maximum number of parallel workers'] = 'Maximum number of parallel workers'; $a->strings['On shared hosters set this to %d. On larger systems, values of %d are great. Default value is %d.'] = 'On shared hosters set this to %d. On larger systems, values of %d are great. Default value is %d.'; $a->strings['Enable fastlane'] = 'Enable fast-lane'; @@ -1605,6 +1503,7 @@ $a->strings['Direct relay transfer'] = 'Direct relay transfer'; $a->strings['Enables the direct transfer to other servers without using the relay servers'] = 'Enables direct transfer to other servers without using a relay server.'; $a->strings['Relay scope'] = 'Relay scope'; $a->strings['Can be "all" or "tags". "all" means that every public post should be received. "tags" means that only posts with selected tags should be received.'] = 'Can be "all" or "tags". "all" means that every public post should be received. "tags" means that only posts with selected tags should be received.'; +$a->strings['Disabled'] = 'Disabled'; $a->strings['all'] = 'all'; $a->strings['tags'] = 'tags'; $a->strings['Server tags'] = 'Server tags'; @@ -1612,6 +1511,8 @@ $a->strings['Comma separated list of tags for the "tags" subscription.'] = 'Comm $a->strings['Allow user tags'] = 'Allow user tags'; $a->strings['If enabled, the tags from the saved searches will used for the "tags" subscription in addition to the "relay_server_tags".'] = 'If enabled, the tags from the saved searches will be used for the "tags" subscription in addition to the "relay_server_tags".'; $a->strings['Start Relocation'] = 'Start relocation'; +$a->strings['Invalid storage backend setting value.'] = 'Invalid storage backend settings.'; +$a->strings['Database (legacy)'] = 'Database (legacy)'; $a->strings['Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See here for a guide that may be helpful converting the table engines. You may also use the command php bin/console.php dbstructure toinnodb of your Friendica installation for an automatic conversion.
'] = 'Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See here for a guide that may be helpful converting the table engines. You may also use the command php bin/console.php dbstructure toinnodb of your Friendica installation for an automatic conversion.
'; $a->strings['Your DB still runs with InnoDB tables in the Antelope file format. You should change the file format to Barracuda. Friendica is using features that are not provided by the Antelope format. See here for a guide that may be helpful converting the table engines. You may also use the command php bin/console.php dbstructure toinnodb of your Friendica installation for an automatic conversion.
'] = 'Your DB still runs with InnoDB tables in the Antelope file format. You should change the file format to Barracuda. Friendica is using features that are not provided by the Antelope format. See here for a guide that may be helpful converting the table engines. You may also use the command php bin/console.php dbstructure toinnodb of your Friendica installation for an automatic conversion.
'; $a->strings['There is a new version of Friendica available for download. Your current version is %1$s, upstream version is %2$s'] = 'A new Friendica version is available now. Your current version is %1$s, upstream version is %2$s'; @@ -1635,7 +1536,6 @@ $a->strings['Blog Account'] = 'Blog account'; $a->strings['Private Forum Account'] = 'Private forum account'; $a->strings['Message queues'] = 'Message queues'; $a->strings['Server Settings'] = 'Server Settings'; -$a->strings['Summary'] = 'Summary'; $a->strings['Registered users'] = 'Registered users'; $a->strings['Pending registrations'] = 'Pending registrations'; $a->strings['Version'] = 'Version'; @@ -1708,6 +1608,7 @@ $a->strings['Contact not found'] = 'Contact not found'; $a->strings['No installed applications.'] = 'No installed applications.'; $a->strings['Applications'] = 'Applications'; $a->strings['Item was not found.'] = 'Item was not found.'; +$a->strings['Please login to continue.'] = 'Please login to continue.'; $a->strings['Overview'] = 'Overview'; $a->strings['Configuration'] = 'Configuration'; $a->strings['Additional features'] = 'Additional features'; @@ -1739,50 +1640,16 @@ $a->strings['Export personal data'] = 'Export personal data'; $a->strings['Remove account'] = 'Remove account'; $a->strings['This page is missing a url parameter.'] = 'This page is missing a URL parameter.'; $a->strings['The post was created'] = 'The post was created'; -$a->strings['Contact update failed.'] = 'Contact update failed.'; -$a->strings['WARNING: This is highly advanced and if you enter incorrect information your communications with this contact may stop working.'] = 'Warning: These are highly advanced settings. If you enter incorrect information your communications with this contact may not working.'; -$a->strings['Please use your browser \'Back\' button now if you are uncertain what to do on this page.'] = 'Please use your browser \'Back\' button now if you are uncertain what to do on this page.'; -$a->strings['Return to contact editor'] = 'Return to contact editor'; -$a->strings['Account Nickname'] = 'Account nickname:'; -$a->strings['@Tagname - overrides Name/Nickname'] = '@Tag name - overrides name/nickname:'; -$a->strings['Account URL'] = 'Account URL:'; -$a->strings['Account URL Alias'] = 'Account URL alias'; -$a->strings['Friend Request URL'] = 'Friend request URL:'; -$a->strings['Friend Confirm URL'] = 'Friend confirm URL:'; -$a->strings['Notification Endpoint URL'] = 'Notification endpoint URL'; -$a->strings['Poll/Feed URL'] = 'Poll/Feed URL:'; -$a->strings['New photo from this URL'] = 'New photo from this URL:'; -$a->strings['Invalid contact.'] = 'Invalid contact.'; -$a->strings['Follower (%s)'] = [ - 0 => 'Follower (%s)', - 1 => 'Followers (%s)', -]; -$a->strings['Following (%s)'] = [ - 0 => 'Following (%s)', - 1 => 'Following (%s)', -]; -$a->strings['Mutual friend (%s)'] = [ - 0 => 'Mutual friend (%s)', - 1 => 'Mutual friends (%s)', -]; -$a->strings['Contact (%s)'] = [ - 0 => 'Contact (%s)', - 1 => 'Contacts (%s)', -]; $a->strings['%d contact edited.'] = [ 0 => '%d contact edited.', 1 => '%d contacts edited.', ]; $a->strings['Could not access contact record.'] = 'Could not access contact record.'; +$a->strings['Failed to update contact record.'] = 'Failed to update contact record.'; $a->strings['Contact has been blocked'] = 'Contact has been blocked'; $a->strings['Contact has been unblocked'] = 'Contact has been unblocked'; $a->strings['Contact has been ignored'] = 'Contact has been ignored'; $a->strings['Contact has been unignored'] = 'Contact has been unignored'; -$a->strings['Contact has been archived'] = 'Contact has been archived'; -$a->strings['Contact has been unarchived'] = 'Contact has been unarchived'; -$a->strings['Drop contact'] = 'Drop contact'; -$a->strings['Do you really want to delete this contact?'] = 'Do you really want to delete this contact?'; -$a->strings['Contact has been removed.'] = 'Contact has been removed.'; $a->strings['You are mutual friends with %s'] = 'You are mutual friends with %s'; $a->strings['You are sharing with %s'] = 'You are sharing with %s'; $a->strings['%s is sharing with you'] = '%s is sharing with you'; @@ -1838,8 +1705,7 @@ $a->strings['Only show hidden contacts'] = 'Only show hidden contacts'; $a->strings['Organize your contact groups'] = 'Organise your contact groups'; $a->strings['Search your contacts'] = 'Search your contacts'; $a->strings['Results for: %s'] = 'Results for: %s'; -$a->strings['Archive'] = 'Archive'; -$a->strings['Unarchive'] = 'Unarchive'; +$a->strings['Update'] = 'Update'; $a->strings['Batch Actions'] = 'Batch actions'; $a->strings['Conversations started by this contact'] = 'Conversations started by this contact'; $a->strings['Posts and Comments'] = 'Posts and Comments'; @@ -1852,13 +1718,43 @@ $a->strings['Pending incoming contact request'] = 'Pending incoming contact requ $a->strings['Refetch contact data'] = 'Re-fetch contact data.'; $a->strings['Toggle Blocked status'] = 'Toggle blocked status'; $a->strings['Toggle Ignored status'] = 'Toggle ignored status'; -$a->strings['Toggle Archive status'] = 'Toggle archive status'; -$a->strings['Delete contact'] = 'Delete contact'; +$a->strings['Contact update failed.'] = 'Contact update failed.'; +$a->strings['WARNING: This is highly advanced and if you enter incorrect information your communications with this contact may stop working.'] = 'Warning: These are highly advanced settings. If you enter incorrect information your communications with this contact may not working.'; +$a->strings['Please use your browser \'Back\' button now if you are uncertain what to do on this page.'] = 'Please use your browser \'Back\' button now if you are uncertain what to do on this page.'; +$a->strings['Return to contact editor'] = 'Return to contact editor'; +$a->strings['Account Nickname'] = 'Account nickname:'; +$a->strings['@Tagname - overrides Name/Nickname'] = '@Tag name - overrides name/nickname:'; +$a->strings['Account URL'] = 'Account URL:'; +$a->strings['Account URL Alias'] = 'Account URL alias'; +$a->strings['Friend Request URL'] = 'Friend request URL:'; +$a->strings['Friend Confirm URL'] = 'Friend confirm URL:'; +$a->strings['Notification Endpoint URL'] = 'Notification endpoint URL'; +$a->strings['Poll/Feed URL'] = 'Poll/Feed URL:'; +$a->strings['New photo from this URL'] = 'New photo from this URL:'; +$a->strings['Invalid contact.'] = 'Invalid contact.'; +$a->strings['Follower (%s)'] = [ + 0 => 'Follower (%s)', + 1 => 'Followers (%s)', +]; +$a->strings['Following (%s)'] = [ + 0 => 'Following (%s)', + 1 => 'Following (%s)', +]; +$a->strings['Mutual friend (%s)'] = [ + 0 => 'Mutual friend (%s)', + 1 => 'Mutual friends (%s)', +]; +$a->strings['Contact (%s)'] = [ + 0 => 'Contact (%s)', + 1 => 'Contacts (%s)', +]; $a->strings['You must be logged in to use this module.'] = 'You must be logged in to use this module.'; $a->strings['Poke/Prod'] = 'Poke/Prod'; $a->strings['poke, prod or do other things to somebody'] = 'Poke, prod or do other things to somebody'; $a->strings['Choose what you wish to do to recipient'] = 'Choose what you wish to do:'; $a->strings['Make this post private'] = 'Make this post private'; +$a->strings['Contact is deleted.'] = 'Contact is deleted.'; +$a->strings['Yes'] = 'Yes'; $a->strings['Local Community'] = 'Local community'; $a->strings['Posts from local users on this server'] = 'Posts from local users on this server'; $a->strings['Global Community'] = 'Global community'; @@ -1926,6 +1822,10 @@ $a->strings['Find on this site'] = 'Find on this site'; $a->strings['Results for:'] = 'Results for:'; $a->strings['Site Directory'] = 'Site directory'; $a->strings['- select -'] = '- select -'; +$a->strings['Suggested contact not found.'] = 'Suggested contact not found.'; +$a->strings['Friend suggestion sent.'] = 'Friend suggestion sent'; +$a->strings['Suggest Friends'] = 'Suggest friends'; +$a->strings['Suggest a friend for %s'] = 'Suggest a friend for %s'; $a->strings['Installed addons/apps:'] = 'Installed addons/apps:'; $a->strings['No installed addons/apps'] = 'No installed addons/apps'; $a->strings['Read about the Terms of Service of this node.'] = 'Read about the Terms of Service of this node.'; @@ -1935,14 +1835,9 @@ $a->strings['Please visit Friendi.ca to learn m $a->strings['Bug reports and issues: please visit'] = 'Bug reports and issues: please visit'; $a->strings['the bugtracker at github'] = 'the bugtracker at github'; $a->strings['Suggestions, praise, etc. - please email "info" at "friendi - dot - ca'] = 'Suggestions, praise, etc. - please email "info" at "friendi - dot - ca'; -$a->strings['Suggested contact not found.'] = 'Suggested contact not found.'; -$a->strings['Friend suggestion sent.'] = 'Friend suggestion sent'; -$a->strings['Suggest Friends'] = 'Suggest friends'; -$a->strings['Suggest a friend for %s'] = 'Suggest a friend for %s'; $a->strings['Could not create group.'] = 'Could not create group.'; $a->strings['Group not found.'] = 'Group not found.'; $a->strings['Unknown group.'] = 'Unknown group.'; -$a->strings['Contact is deleted.'] = 'Contact is deleted.'; $a->strings['Unable to add the contact to the group.'] = 'Unable to add contact to group.'; $a->strings['Contact successfully added to group.'] = 'Contact successfully added to group.'; $a->strings['Unable to remove the contact from the group.'] = 'Unable to remove contact from group.'; @@ -1960,10 +1855,10 @@ $a->strings['Group is empty'] = 'Group is empty'; $a->strings['Remove contact from group'] = 'Remove contact from group'; $a->strings['Click on a contact to add or remove.'] = 'Click on a contact to add or remove it.'; $a->strings['Add contact to group'] = 'Add contact to group'; -$a->strings['Help:'] = 'Help:'; -$a->strings['Welcome to %s'] = 'Welcome to %s'; $a->strings['No profile'] = 'No profile'; $a->strings['Method Not Allowed.'] = 'Method not allowed.'; +$a->strings['Help:'] = 'Help:'; +$a->strings['Welcome to %s'] = 'Welcome to %s'; $a->strings['Friendica Communications Server - Setup'] = 'Friendica Communications Server - Setup'; $a->strings['System check'] = 'System check'; $a->strings['Check again'] = 'Check again'; @@ -2031,6 +1926,7 @@ $a->strings['Hide Ignored Requests'] = 'Hide ignored requests'; $a->strings['Notification type:'] = 'Notification type:'; $a->strings['Suggested by:'] = 'Suggested by:'; $a->strings['Claims to be known to you: '] = 'Says they know me:'; +$a->strings['No'] = 'No'; $a->strings['Shall your connection be bidirectional or not?'] = 'Shall your connection be in both directions or not?'; $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.'] = 'Accepting %s as a friend allows %s to subscribe to your posts; you will also receive updates from them in your news feed.'; $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.'] = 'Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed.'; @@ -2044,12 +1940,14 @@ $a->strings['System Notifications'] = 'System notifications'; $a->strings['Personal Notifications'] = 'Personal notifications'; $a->strings['Home Notifications'] = 'Home notifications'; $a->strings['Show unread'] = 'Show unread'; -$a->strings['Show all'] = 'Show all'; +$a->strings['Authorize application connection'] = 'Authorise application connection'; +$a->strings['Do you want to authorize this application to access your posts and contacts, and/or create new posts for you?'] = 'Do you want to authorise this application to access your posts and contacts and create new posts for you?'; $a->strings['Remote privacy information not available.'] = 'Remote privacy information not available.'; $a->strings['Visible to:'] = 'Visible to:'; $a->strings['The Photo with id %s is not available.'] = 'The Photo with id %s is not available.'; $a->strings['Invalid photo with id %s.'] = 'Invalid photo with id %s.'; $a->strings['No contacts.'] = 'No contacts.'; +$a->strings['Profile not found.'] = 'Profile not found.'; $a->strings['Member since:'] = 'Member since:'; $a->strings['j F, Y'] = 'j F, Y'; $a->strings['j F'] = 'j F'; @@ -2094,8 +1992,14 @@ $a->strings['Registration successful.'] = 'Registration successful.'; $a->strings['Your registration can not be processed.'] = 'Your registration cannot be processed.'; $a->strings['You have to leave a request note for the admin.'] = 'You have to leave a request note for the admin.'; $a->strings['Your registration is pending approval by the site owner.'] = 'Your registration is pending approval by the site administrator.'; +$a->strings['Profile unavailable.'] = 'Profile unavailable.'; +$a->strings['Invalid locator'] = 'Invalid locator'; $a->strings['The provided profile link doesn\'t seem to be valid'] = 'The provided profile link doesn\'t seem to be valid'; +$a->strings['Remote subscription can\'t be done for your network. Please subscribe directly on your system.'] = 'Remote subscription can\'t be done for your network. Please subscribe directly on your system.'; +$a->strings['Friend/Connection Request'] = 'Friend/Connection request'; $a->strings['Enter your Webfinger address (user@domain.tld) or profile URL here. If this isn\'t supported by your system, you have to subscribe to %s or %s directly on your system.'] = 'Enter your WebFinger address (user@domain.tld) or profile URL here. If this isn\'t supported by your system, you have to subscribe to %s or %s directly on your system.'; +$a->strings['If you are not yet a member of the free social web, follow this link to find a public Friendica node and join us today.'] = 'If you are not yet a member of the free social web, follow this link to find a public Friendica node and join us today.'; +$a->strings['Your Webfinger address or profile URL:'] = 'Your WebFinger address or profile URL:'; $a->strings['Only logged in users are permitted to perform a search.'] = 'Only logged in users are permitted to perform a search.'; $a->strings['Only one search per minute is permitted for not logged in users.'] = 'Only one search per minute is permitted for not logged in users.'; $a->strings['Items tagged with: %s'] = 'Items tagged with: %s'; @@ -2159,14 +2063,8 @@ $a->strings['Update browser every xx seconds'] = 'Update browser every so many s $a->strings['Minimum of 10 seconds. Enter -1 to disable it.'] = 'Minimum 10 seconds; to disable -1.'; $a->strings['Automatic updates only at the top of the post stream pages'] = 'Automatic updates only at the top of the post stream pages'; $a->strings['Auto update may add new posts at the top of the post stream pages, which can affect the scroll position and perturb normal reading if it happens anywhere else the top of the page.'] = 'Auto update may add new posts at the top of the post stream pages. This can affect the scroll position and perturb normal reading if something happens anywhere else the top of the page.'; -$a->strings['Don\'t show emoticons'] = 'Don\'t show emoticons'; -$a->strings['Normally emoticons are replaced with matching symbols. This setting disables this behaviour.'] = 'Normally emoticons are replaced with matching symbols. This setting disables this behaviour.'; $a->strings['Infinite scroll'] = 'Infinite scroll'; $a->strings['Automatic fetch new items when reaching the page end.'] = 'Automatic fetch new items when reaching the page end.'; -$a->strings['Disable Smart Threading'] = 'Disable smart threading'; -$a->strings['Disable the automatic suppression of extraneous thread indentation.'] = 'Disable the automatic suppression of extraneous thread indentation.'; -$a->strings['Hide the Dislike feature'] = 'Hide the Dislike feature'; -$a->strings['Hides the Dislike button and dislike reactions on posts and comments.'] = 'Hides the Dislike button and Dislike reactions on posts and comments.'; $a->strings['Beginning of week:'] = 'Week begins: '; $a->strings['Profile Name is required.'] = 'Profile name is required.'; $a->strings['Profile couldn\'t be updated.'] = 'Profile couldn\'t be updated.'; @@ -2190,7 +2088,6 @@ $a->strings['Region/State:'] = 'Region/State:'; $a->strings['Postal/Zip Code:'] = 'Postcode:'; $a->strings['Country:'] = 'Country:'; $a->strings['XMPP (Jabber) address:'] = 'XMPP (Jabber) address:'; -$a->strings['The XMPP address will be propagated to your contacts so that they can follow you.'] = 'The XMPP address will be propagated to your contacts so that they can follow you.'; $a->strings['Homepage URL:'] = 'Homepage URL:'; $a->strings['Public Keywords:'] = 'Public keywords:'; $a->strings['(Used for suggesting potential friends, can be seen by others)'] = 'Used for suggesting potential friends, can be seen by others.'; @@ -2305,10 +2202,8 @@ $a->strings['Export your account info, contacts and all your items as json. Coul $a->strings['Export Contacts to CSV'] = 'Export contacts to CSV'; $a->strings['Export the list of the accounts you are following as CSV file. Compatible to e.g. Mastodon.'] = 'Export the list of the accounts you are following as CSV file. Compatible with Mastodon for example.'; $a->strings['Bad Request'] = 'Bad Request'; -$a->strings['Unauthorized'] = 'Unauthorized'; $a->strings['Forbidden'] = 'Forbidden'; $a->strings['Not Found'] = 'Not found'; -$a->strings['Internal Server Error'] = 'Internal Server Error'; $a->strings['Service Unavailable'] = 'Service Unavailable'; $a->strings['The server cannot or will not process the request due to an apparent client error.'] = 'The server cannot process the request due to an apparent client error.'; $a->strings['Authentication is required and has failed or has not yet been provided.'] = 'Authentication is required and has failed or has not yet been provided.'; @@ -2350,36 +2245,83 @@ $a->strings['Friendica respects your privacy. By default, your posts will only s $a->strings['Getting Help'] = 'Getting help'; $a->strings['Go to the Help Section'] = 'Go to the help section'; $a->strings['Our help pages may be consulted for detail on other program features and resources.'] = 'Our help pages may be consulted for detail on other program features and resources.'; +$a->strings['%s liked %s\'s post'] = '%s liked %s\'s post'; +$a->strings['%s disliked %s\'s post'] = '%s disliked %s\'s post'; +$a->strings['%s is attending %s\'s event'] = '%s is going to %s\'s event'; +$a->strings['%s is not attending %s\'s event'] = '%s is not going to %s\'s event'; +$a->strings['%s may attending %s\'s event'] = '%s may attending %s\'s event'; +$a->strings['%s is now friends with %s'] = '%s is now friends with %s'; +$a->strings['%s commented on %s\'s post'] = '%s commented on %s\'s post'; +$a->strings['%s created a new post'] = '%s posted something new'; +$a->strings['Friend Suggestion'] = 'Friend suggestion'; +$a->strings['Friend/Connect Request'] = 'Friend/Contact request'; +$a->strings['New Follower'] = 'New follower'; +$a->strings['[Friendica:Notify]'] = '[Friendica:Notify]'; +$a->strings['%s New mail received at %s'] = '%s New mail received at %s'; +$a->strings['%1$s sent you a new private message at %2$s.'] = '%1$s sent you a new private message at %2$s.'; +$a->strings['a private message'] = 'a private message'; +$a->strings['%1$s sent you %2$s.'] = '%1$s sent you %2$s.'; +$a->strings['Please visit %s to view and/or reply to your private messages.'] = 'Please visit %s to view or reply to your private messages.'; +$a->strings['%1$s commented on %2$s\'s %3$s %4$s'] = '%1$s commented on %2$s\'s %3$s %4$s'; +$a->strings['%1$s commented on your %2$s %3$s'] = '%1$s commented on your %2$s %3$s'; +$a->strings['%1$s commented on their %2$s %3$s'] = '%1$s commented on their %2$s %3$s'; +$a->strings['%1$s Comment to conversation #%2$d by %3$s'] = '%1$s Comment to conversation #%2$d by %3$s'; +$a->strings['%s commented on an item/conversation you have been following.'] = '%s commented on an item/conversation you have been following.'; +$a->strings['Please visit %s to view and/or reply to the conversation.'] = 'Please visit %s to view or reply to the conversation.'; +$a->strings['%s %s posted to your profile wall'] = '%s %s posted to your profile wall'; +$a->strings['%1$s posted to your profile wall at %2$s'] = '%1$s posted to your profile wall at %2$s'; +$a->strings['%1$s posted to [url=%2$s]your wall[/url]'] = '%1$s posted to [url=%2$s]your wall[/url]'; +$a->strings['%1$s %2$s poked you'] = '%1$s %2$s poked you'; +$a->strings['%1$s poked you at %2$s'] = '%1$s poked you at %2$s'; +$a->strings['%1$s [url=%2$s]poked you[/url].'] = '%1$s [url=%2$s]poked you[/url].'; +$a->strings['%s Introduction received'] = '%s Introduction received'; +$a->strings['You\'ve received an introduction from \'%1$s\' at %2$s'] = 'You\'ve received an introduction from \'%1$s\' at %2$s'; +$a->strings['You\'ve received [url=%1$s]an introduction[/url] from %2$s.'] = 'You\'ve received [url=%1$s]an introduction[/url] from %2$s.'; +$a->strings['You may visit their profile at %s'] = 'You may visit their profile at %s'; +$a->strings['Please visit %s to approve or reject the introduction.'] = 'Please visit %s to approve or reject the introduction.'; +$a->strings['%s A new person is sharing with you'] = '%s A new person is sharing with you'; +$a->strings['%1$s is sharing with you at %2$s'] = '%1$s is sharing with you at %2$s'; +$a->strings['%s You have a new follower'] = '%s You have a new follower'; +$a->strings['You have a new follower at %2$s : %1$s'] = 'You have a new follower at %2$s : %1$s'; +$a->strings['%s Friend suggestion received'] = '%s Friend suggestion received'; +$a->strings['You\'ve received a friend suggestion from \'%1$s\' at %2$s'] = 'You\'ve received a friend suggestion from \'%1$s\' at %2$s'; +$a->strings['You\'ve received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s.'] = 'You\'ve received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s.'; +$a->strings['Name:'] = 'Name:'; +$a->strings['Photo:'] = 'Photo:'; +$a->strings['Please visit %s to approve or reject the suggestion.'] = 'Please visit %s to approve or reject the suggestion.'; +$a->strings['%s Connection accepted'] = '%s Connection accepted'; +$a->strings['\'%1$s\' has accepted your connection request at %2$s'] = '\'%1$s\' has accepted your connection request at %2$s'; +$a->strings['%2$s has accepted your [url=%1$s]connection request[/url].'] = '%2$s has accepted your [url=%1$s]connection request[/url].'; +$a->strings['You are now mutual friends and may exchange status updates, photos, and email without restriction.'] = 'You are now mutual friends and may exchange status updates, photos, and email without restriction.'; +$a->strings['Please visit %s if you wish to make any changes to this relationship.'] = 'Please visit %s if you wish to make any changes to this relationship.'; +$a->strings['\'%1$s\' has chosen to accept you a fan, which restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically.'] = '\'%1$s\' has chosen to accept you as fan. This restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically.'; +$a->strings['\'%1$s\' may choose to extend this into a two-way or more permissive relationship in the future.'] = '\'%1$s\' may choose to extend this into a two-way or more permissive relationship in the future.'; +$a->strings['Please visit %s if you wish to make any changes to this relationship.'] = 'Please visit %s if you wish to make any changes to this relationship.'; +$a->strings['registration request'] = 'registration request'; +$a->strings['You\'ve received a registration request from \'%1$s\' at %2$s'] = 'You\'ve received a registration request from \'%1$s\' at %2$s.'; +$a->strings['You\'ve received a [url=%1$s]registration request[/url] from %2$s.'] = 'You\'ve received a [url=%1$s]registration request[/url] from %2$s.'; +$a->strings['Full Name: %s +Site Location: %s +Login Name: %s (%s)'] = 'Full Name: %s +Site Location: %s +Login Name: %s (%s)'; +$a->strings['Please visit %s to approve or reject the request.'] = 'Please visit %s to approve or reject the request.'; +$a->strings['%s %s tagged you'] = '%s %s tagged you'; +$a->strings['%s %s shared a new post'] = '%s %s shared a new post'; $a->strings['This message was sent to you by %s, a member of the Friendica social network.'] = 'This message was sent to you by %s, a member of the Friendica social network.'; $a->strings['You may visit them online at %s'] = 'You may visit them online at %s'; $a->strings['Please contact the sender by replying to this post if you do not wish to receive these messages.'] = 'Please contact the sender by replying to this post if you do not wish to receive these messages.'; $a->strings['%s posted an update.'] = '%s posted an update.'; $a->strings['This entry was edited'] = 'This entry was edited'; $a->strings['Private Message'] = 'Private message'; -$a->strings['pinned item'] = 'pinned item'; +$a->strings['Edit'] = 'Edit'; $a->strings['Delete globally'] = 'Delete globally'; $a->strings['Remove locally'] = 'Remove locally'; -$a->strings['save to folder'] = 'Save to folder'; $a->strings['I will attend'] = 'I will attend'; $a->strings['I will not attend'] = 'I will not attend'; $a->strings['I might attend'] = 'I might attend'; -$a->strings['ignore thread'] = 'Ignore thread'; -$a->strings['unignore thread'] = 'Unignore thread'; -$a->strings['toggle ignore status'] = 'Toggle ignore status'; -$a->strings['pin'] = 'pin'; -$a->strings['unpin'] = 'unpin'; -$a->strings['toggle pin status'] = 'toggle pin status'; -$a->strings['pinned'] = 'pinned'; -$a->strings['add star'] = 'Add star'; -$a->strings['remove star'] = 'Remove star'; -$a->strings['toggle star status'] = 'Toggle star status'; -$a->strings['starred'] = 'Starred'; -$a->strings['add tag'] = 'Add tag'; -$a->strings['like'] = 'Like'; -$a->strings['dislike'] = 'Dislike'; $a->strings['%s (Received %s)'] = '%s (Received %s)'; $a->strings['Comment this item on your system'] = 'Comment this item on your system'; -$a->strings['remote comment'] = 'remote comment'; $a->strings['Pushed'] = 'Pushed'; $a->strings['Pulled'] = 'Pulled'; $a->strings['to'] = 'to'; @@ -2404,25 +2346,6 @@ $a->strings['%s is now following %s.'] = '%s is now following %s.'; $a->strings['following'] = 'following'; $a->strings['%s stopped following %s.'] = '%s stopped following %s.'; $a->strings['stopped following'] = 'stopped following'; -$a->strings['Hometown:'] = 'Home town:'; -$a->strings['Marital Status:'] = 'Marital Status:'; -$a->strings['With:'] = 'With:'; -$a->strings['Since:'] = 'Since:'; -$a->strings['Sexual Preference:'] = 'Sexual preference:'; -$a->strings['Political Views:'] = 'Political views:'; -$a->strings['Religious Views:'] = 'Religious views:'; -$a->strings['Likes:'] = 'Likes:'; -$a->strings['Dislikes:'] = 'Dislikes:'; -$a->strings['Title/Description:'] = 'Title/Description:'; -$a->strings['Musical interests'] = 'Music:'; -$a->strings['Books, literature'] = 'Books, literature, poetry:'; -$a->strings['Television'] = 'Television:'; -$a->strings['Film/dance/culture/entertainment'] = 'Film, dance, culture, entertainment'; -$a->strings['Hobbies/Interests'] = 'Hobbies/Interests:'; -$a->strings['Love/romance'] = 'Love/Romance:'; -$a->strings['Work/employment'] = 'Work/Employment:'; -$a->strings['School/education'] = 'School/Education:'; -$a->strings['Contact information and Social Networks'] = 'Contact information and other social networks:'; $a->strings['Login failed.'] = 'Login failed.'; $a->strings['Login failed. Please check your credentials.'] = 'Login failed. Please check your credentials.'; $a->strings['Welcome %s'] = 'Welcome %s'; From c13cb6980192115fa1c4889e8cbe9809c32eea56 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Wed, 27 Oct 2021 13:54:35 +0200 Subject: [PATCH 09/19] EN US translation update THX AndyH3 --- view/lang/en-us/messages.po | 7053 ++++++++++++++++++----------------- view/lang/en-us/strings.php | 609 ++- 2 files changed, 3793 insertions(+), 3869 deletions(-) diff --git a/view/lang/en-us/messages.po b/view/lang/en-us/messages.po index 8e35db082..c3e3af3b1 100644 --- a/view/lang/en-us/messages.po +++ b/view/lang/en-us/messages.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the Friendica package. # # Translators: -# Andy H3 , 2017-2020 +# Andy H3 , 2017-2021 # Hypolite Petovan , 2018-2020 # R C, 2018 # Steffen K9, 2019,2021 @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-10 20:30+0200\n" -"PO-Revision-Date: 2021-04-17 23:28+0000\n" -"Last-Translator: Steffen K9\n" +"POT-Creation-Date: 2021-10-24 23:21-0400\n" +"PO-Revision-Date: 2021-10-27 03:56+0000\n" +"Last-Translator: Andy H3 \n" "Language-Team: English (United States) (http://www.transifex.com/Friendica/friendica/language/en_US/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,14 +21,14 @@ msgstr "" "Language: en_US\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: include/api.php:1127 +#: include/api.php:1113 src/Module/BaseApi.php:294 #, php-format msgid "Daily posting limit of %d post reached. The post was rejected." msgid_plural "Daily posting limit of %d posts reached. The post was rejected." msgstr[0] "Daily posting limit of %d post reached. The post was rejected." msgstr[1] "Daily posting limit of %d posts reached. This post was rejected." -#: include/api.php:1141 +#: include/api.php:1127 src/Module/BaseApi.php:310 #, php-format msgid "Weekly posting limit of %d post reached. The post was rejected." msgid_plural "" @@ -36,1362 +36,408 @@ msgid_plural "" msgstr[0] "Weekly posting limit of %d post reached. The post was rejected." msgstr[1] "Weekly posting limit of %d posts reached. This post was rejected." -#: include/api.php:1155 +#: include/api.php:1141 src/Module/BaseApi.php:326 #, php-format msgid "Monthly posting limit of %d post reached. The post was rejected." msgstr "Monthly posting limit of %d posts reached. This post was rejected." -#: include/api.php:4452 mod/photos.php:107 mod/photos.php:211 -#: mod/photos.php:639 mod/photos.php:1043 mod/photos.php:1060 -#: mod/photos.php:1609 src/Model/User.php:1045 src/Model/User.php:1053 -#: src/Model/User.php:1061 src/Module/Settings/Profile/Photo/Crop.php:97 -#: src/Module/Settings/Profile/Photo/Crop.php:113 -#: src/Module/Settings/Profile/Photo/Crop.php:129 -#: src/Module/Settings/Profile/Photo/Crop.php:178 -#: src/Module/Settings/Profile/Photo/Index.php:96 -#: src/Module/Settings/Profile/Photo/Index.php:102 -msgid "Profile Photos" -msgstr "Profile photos" - -#: include/conversation.php:195 -#, php-format -msgid "%1$s poked %2$s" -msgstr "%1$s poked %2$s" - -#: include/conversation.php:227 src/Model/Item.php:2497 -msgid "event" -msgstr "event" - -#: include/conversation.php:230 include/conversation.php:239 mod/tagger.php:90 -msgid "status" -msgstr "status" - -#: include/conversation.php:235 mod/tagger.php:90 src/Model/Item.php:2499 -msgid "photo" -msgstr "photo" - -#: include/conversation.php:249 mod/tagger.php:123 -#, php-format -msgid "%1$s tagged %2$s's %3$s with %4$s" -msgstr "%1$s tagged %2$s's %3$s with %4$s" - -#: include/conversation.php:564 mod/photos.php:1470 src/Object/Post.php:226 -msgid "Select" -msgstr "Select" - -#: include/conversation.php:565 mod/photos.php:1471 mod/settings.php:569 -#: mod/settings.php:711 src/Module/Admin/Users/Active.php:139 -#: src/Module/Admin/Users/Blocked.php:140 src/Module/Admin/Users/Index.php:153 -#: src/Module/Contact.php:886 src/Module/Contact.php:1190 -msgid "Delete" -msgstr "Delete" - -#: include/conversation.php:600 src/Object/Post.php:444 -#: src/Object/Post.php:445 -#, php-format -msgid "View %s's profile @ %s" -msgstr "View %s's profile @ %s" - -#: include/conversation.php:613 src/Object/Post.php:432 -msgid "Categories:" -msgstr "Categories:" - -#: include/conversation.php:614 src/Object/Post.php:433 -msgid "Filed under:" -msgstr "Filed under:" - -#: include/conversation.php:621 src/Object/Post.php:458 -#, php-format -msgid "%s from %s" -msgstr "%s from %s" - -#: include/conversation.php:636 -msgid "View in context" -msgstr "View in context" - -#: include/conversation.php:638 include/conversation.php:1222 -#: mod/editpost.php:104 mod/message.php:204 mod/message.php:374 -#: mod/photos.php:1536 mod/wallmessage.php:155 src/Module/Item/Compose.php:159 -#: src/Object/Post.php:492 -msgid "Please wait" -msgstr "Please wait" - -#: include/conversation.php:702 -msgid "remove" -msgstr "Remove" - -#: include/conversation.php:707 -msgid "Delete Selected Items" -msgstr "Delete selected items" - -#: include/conversation.php:744 include/conversation.php:747 -#: include/conversation.php:750 include/conversation.php:753 -#, php-format -msgid "You had been addressed (%s)." -msgstr "You have been addressed (%s)." - -#: include/conversation.php:756 -#, php-format -msgid "You are following %s." -msgstr "" - -#: include/conversation.php:759 -msgid "Tagged" -msgstr "" - -#: include/conversation.php:772 include/conversation.php:1115 -#: include/conversation.php:1153 -#, php-format -msgid "%s reshared this." -msgstr "%s reshared this." - -#: include/conversation.php:774 -msgid "Reshared" -msgstr "" - -#: include/conversation.php:774 -#, php-format -msgid "Reshared by %s" -msgstr "" - -#: include/conversation.php:777 -#, php-format -msgid "%s is participating in this thread." -msgstr "" - -#: include/conversation.php:780 -msgid "Stored" -msgstr "" - -#: include/conversation.php:783 -msgid "Global" -msgstr "" - -#: include/conversation.php:786 -msgid "Relayed" -msgstr "" - -#: include/conversation.php:786 -#, php-format -msgid "Relayed by %s." -msgstr "" - -#: include/conversation.php:789 -msgid "Fetched" -msgstr "" - -#: include/conversation.php:789 -#, php-format -msgid "Fetched because of %s" -msgstr "" - -#: include/conversation.php:948 view/theme/frio/theme.php:322 -msgid "Follow Thread" -msgstr "Follow thread" - -#: include/conversation.php:949 src/Model/Contact.php:986 -msgid "View Status" -msgstr "View status" - -#: include/conversation.php:950 include/conversation.php:972 -#: src/Model/Contact.php:912 src/Model/Contact.php:978 -#: src/Model/Contact.php:987 src/Module/Directory.php:166 -#: src/Module/Settings/Profile/Index.php:240 -msgid "View Profile" -msgstr "View profile" - -#: include/conversation.php:951 src/Model/Contact.php:988 -msgid "View Photos" -msgstr "View photos" - -#: include/conversation.php:952 src/Model/Contact.php:979 -#: src/Model/Contact.php:989 -msgid "Network Posts" -msgstr "Network posts" - -#: include/conversation.php:953 src/Model/Contact.php:980 -#: src/Model/Contact.php:990 -msgid "View Contact" -msgstr "View contact" - -#: include/conversation.php:954 src/Model/Contact.php:992 -msgid "Send PM" -msgstr "Send PM" - -#: include/conversation.php:955 src/Module/Admin/Blocklist/Contact.php:84 -#: src/Module/Admin/Users/Active.php:140 src/Module/Admin/Users/Index.php:154 -#: src/Module/Contact.php:625 src/Module/Contact.php:883 -#: src/Module/Contact.php:1165 -msgid "Block" -msgstr "Block" - -#: include/conversation.php:956 src/Module/Contact.php:626 -#: src/Module/Contact.php:884 src/Module/Contact.php:1173 -#: src/Module/Notifications/Introductions.php:113 -#: src/Module/Notifications/Introductions.php:191 -#: src/Module/Notifications/Notification.php:59 -msgid "Ignore" -msgstr "Ignore" - -#: include/conversation.php:960 src/Object/Post.php:421 -msgid "Languages" -msgstr "" - -#: include/conversation.php:964 src/Model/Contact.php:993 -msgid "Poke" -msgstr "Poke" - -#: include/conversation.php:969 mod/follow.php:146 src/Content/Widget.php:76 -#: src/Model/Contact.php:981 src/Model/Contact.php:994 -#: view/theme/vier/theme.php:172 -msgid "Connect/Follow" -msgstr "Connect/Follow" - -#: include/conversation.php:1100 -#, php-format -msgid "%s likes this." -msgstr "%s likes this." - -#: include/conversation.php:1103 -#, php-format -msgid "%s doesn't like this." -msgstr "%s doesn't like this." - -#: include/conversation.php:1106 -#, php-format -msgid "%s attends." -msgstr "%s attends." - -#: include/conversation.php:1109 -#, php-format -msgid "%s doesn't attend." -msgstr "%s won't attend." - -#: include/conversation.php:1112 -#, php-format -msgid "%s attends maybe." -msgstr "%s might attend." - -#: include/conversation.php:1121 -msgid "and" -msgstr "and" - -#: include/conversation.php:1124 -#, php-format -msgid "and %d other people" -msgstr "and %d other people" - -#: include/conversation.php:1132 -#, php-format -msgid "%2$d people like this" -msgstr "%2$d people like this" - -#: include/conversation.php:1133 -#, php-format -msgid "%s like this." -msgstr "%s like this." - -#: include/conversation.php:1136 -#, php-format -msgid "%2$d people don't like this" -msgstr "%2$d people don't like this" - -#: include/conversation.php:1137 -#, php-format -msgid "%s don't like this." -msgstr "%s don't like this." - -#: include/conversation.php:1140 -#, php-format -msgid "%2$d people attend" -msgstr "%2$d people attend" - -#: include/conversation.php:1141 -#, php-format -msgid "%s attend." -msgstr "%s attend." - -#: include/conversation.php:1144 -#, php-format -msgid "%2$d people don't attend" -msgstr "%2$d people won't attend" - -#: include/conversation.php:1145 -#, php-format -msgid "%s don't attend." -msgstr "%s won't attend." - -#: include/conversation.php:1148 -#, php-format -msgid "%2$d people attend maybe" -msgstr "%2$d people might attend" - -#: include/conversation.php:1149 -#, php-format -msgid "%s attend maybe." -msgstr "%s may be attending." - -#: include/conversation.php:1152 -#, php-format -msgid "%2$d people reshared this" -msgstr "%2$d people reshared this" - -#: include/conversation.php:1182 -msgid "Visible to everybody" -msgstr "Visible to everybody" - -#: include/conversation.php:1183 src/Module/Item/Compose.php:153 -#: src/Object/Post.php:959 -msgid "Please enter a image/video/audio/webpage URL:" -msgstr "Please enter an image/video/audio/webpage URL:" - -#: include/conversation.php:1184 -msgid "Tag term:" -msgstr "Tag term:" - -#: include/conversation.php:1185 src/Module/Filer/SaveTag.php:69 -msgid "Save to Folder:" -msgstr "Save to folder:" - -#: include/conversation.php:1186 -msgid "Where are you right now?" -msgstr "Where are you right now?" - -#: include/conversation.php:1187 -msgid "Delete item(s)?" -msgstr "Delete item(s)?" - -#: include/conversation.php:1197 -msgid "New Post" -msgstr "New post" - -#: include/conversation.php:1200 -msgid "Share" -msgstr "Share" - -#: include/conversation.php:1201 mod/editpost.php:89 mod/photos.php:1382 -#: src/Module/Contact/Poke.php:154 src/Object/Post.php:950 -msgid "Loading..." -msgstr "" - -#: include/conversation.php:1202 mod/editpost.php:90 mod/message.php:202 -#: mod/message.php:371 mod/wallmessage.php:153 -msgid "Upload photo" -msgstr "Upload photo" - -#: include/conversation.php:1203 mod/editpost.php:91 -msgid "upload photo" -msgstr "upload photo" - -#: include/conversation.php:1204 mod/editpost.php:92 -msgid "Attach file" -msgstr "Attach file" - -#: include/conversation.php:1205 mod/editpost.php:93 -msgid "attach file" -msgstr "attach file" - -#: include/conversation.php:1206 src/Module/Item/Compose.php:145 -#: src/Object/Post.php:951 -msgid "Bold" -msgstr "Bold" - -#: include/conversation.php:1207 src/Module/Item/Compose.php:146 -#: src/Object/Post.php:952 -msgid "Italic" -msgstr "Italic" - -#: include/conversation.php:1208 src/Module/Item/Compose.php:147 -#: src/Object/Post.php:953 -msgid "Underline" -msgstr "Underline" - -#: include/conversation.php:1209 src/Module/Item/Compose.php:148 -#: src/Object/Post.php:954 -msgid "Quote" -msgstr "Quote" - -#: include/conversation.php:1210 src/Module/Item/Compose.php:149 -#: src/Object/Post.php:955 -msgid "Code" -msgstr "Code" - -#: include/conversation.php:1211 src/Module/Item/Compose.php:150 -#: src/Object/Post.php:956 -msgid "Image" -msgstr "Image" - -#: include/conversation.php:1212 src/Module/Item/Compose.php:151 -#: src/Object/Post.php:957 -msgid "Link" -msgstr "Link" - -#: include/conversation.php:1213 src/Module/Item/Compose.php:152 -#: src/Object/Post.php:958 -msgid "Link or Media" -msgstr "Link or media" - -#: include/conversation.php:1214 mod/editpost.php:100 -#: src/Module/Item/Compose.php:155 -msgid "Set your location" -msgstr "Set your location" - -#: include/conversation.php:1215 mod/editpost.php:101 -msgid "set location" -msgstr "set location" - -#: include/conversation.php:1216 mod/editpost.php:102 -msgid "Clear browser location" -msgstr "Clear browser location" - -#: include/conversation.php:1217 mod/editpost.php:103 -msgid "clear location" -msgstr "clear location" - -#: include/conversation.php:1219 mod/editpost.php:117 -#: src/Module/Item/Compose.php:160 -msgid "Set title" -msgstr "Set title" - -#: include/conversation.php:1221 mod/editpost.php:119 -#: src/Module/Item/Compose.php:161 -msgid "Categories (comma-separated list)" -msgstr "Categories (comma-separated list)" - -#: include/conversation.php:1223 mod/editpost.php:105 -msgid "Permission settings" -msgstr "Permission settings" - -#: include/conversation.php:1224 mod/editpost.php:134 mod/events.php:578 -#: mod/photos.php:969 mod/photos.php:1335 -msgid "Permissions" -msgstr "Permissions" - -#: include/conversation.php:1233 mod/editpost.php:114 -msgid "Public post" -msgstr "Public post" - -#: include/conversation.php:1237 mod/editpost.php:125 mod/events.php:573 -#: mod/photos.php:1381 mod/photos.php:1438 mod/photos.php:1513 -#: src/Module/Item/Compose.php:154 src/Object/Post.php:960 -msgid "Preview" -msgstr "Preview" - -#: include/conversation.php:1241 mod/dfrn_request.php:642 mod/editpost.php:128 -#: mod/fbrowser.php:105 mod/fbrowser.php:134 mod/follow.php:152 -#: mod/photos.php:1037 mod/photos.php:1143 mod/settings.php:509 -#: mod/settings.php:535 mod/tagrm.php:37 mod/tagrm.php:127 -#: mod/unfollow.php:100 src/Module/Contact.php:459 -#: src/Module/RemoteFollow.php:110 -msgid "Cancel" -msgstr "Cancel" - -#: include/conversation.php:1248 mod/editpost.php:132 -#: src/Model/Profile.php:445 src/Module/Contact.php:344 -msgid "Message" -msgstr "Message" - -#: include/conversation.php:1249 mod/editpost.php:133 -#: src/Module/Settings/TwoFactor/Trusted.php:101 -msgid "Browser" -msgstr "Browser" - -#: include/conversation.php:1251 mod/editpost.php:136 -msgid "Open Compose page" -msgstr "Open compose page" - -#: include/enotify.php:51 -msgid "[Friendica:Notify]" -msgstr "" - -#: include/enotify.php:137 -#, php-format -msgid "%s New mail received at %s" -msgstr "" - -#: include/enotify.php:139 -#, php-format -msgid "%1$s sent you a new private message at %2$s." -msgstr "%1$s sent you a new private message at %2$s." - -#: include/enotify.php:140 -msgid "a private message" -msgstr "a private message" - -#: include/enotify.php:140 -#, php-format -msgid "%1$s sent you %2$s." -msgstr "%1$s sent you %2$s." - -#: include/enotify.php:142 -#, php-format -msgid "Please visit %s to view and/or reply to your private messages." -msgstr "Please visit %s to view or reply to your private messages." - -#: include/enotify.php:188 -#, php-format -msgid "%1$s replied to you on %2$s's %3$s %4$s" -msgstr "" - -#: include/enotify.php:190 -#, php-format -msgid "%1$s tagged you on %2$s's %3$s %4$s" -msgstr "" - -#: include/enotify.php:192 -#, php-format -msgid "%1$s commented on %2$s's %3$s %4$s" -msgstr "" - -#: include/enotify.php:202 -#, php-format -msgid "%1$s replied to you on your %2$s %3$s" -msgstr "" - -#: include/enotify.php:204 -#, php-format -msgid "%1$s tagged you on your %2$s %3$s" -msgstr "" - -#: include/enotify.php:206 -#, php-format -msgid "%1$s commented on your %2$s %3$s" -msgstr "" - -#: include/enotify.php:213 -#, php-format -msgid "%1$s replied to you on their %2$s %3$s" -msgstr "" - -#: include/enotify.php:215 -#, php-format -msgid "%1$s tagged you on their %2$s %3$s" -msgstr "" - -#: include/enotify.php:217 -#, php-format -msgid "%1$s commented on their %2$s %3$s" -msgstr "" - -#: include/enotify.php:228 -#, php-format -msgid "%s %s tagged you" -msgstr "" - -#: include/enotify.php:230 -#, php-format -msgid "%1$s tagged you at %2$s" -msgstr "%1$s tagged you at %2$s" - -#: include/enotify.php:232 -#, php-format -msgid "%1$s Comment to conversation #%2$d by %3$s" -msgstr "" - -#: include/enotify.php:234 -#, php-format -msgid "%s commented on an item/conversation you have been following." -msgstr "%s commented on an item/conversation you have been following." - -#: include/enotify.php:239 include/enotify.php:254 include/enotify.php:279 -#: include/enotify.php:298 include/enotify.php:314 -#, php-format -msgid "Please visit %s to view and/or reply to the conversation." -msgstr "Please visit %s to view or reply to the conversation." - -#: include/enotify.php:246 -#, php-format -msgid "%s %s posted to your profile wall" -msgstr "" - -#: include/enotify.php:248 -#, php-format -msgid "%1$s posted to your profile wall at %2$s" -msgstr "%1$s posted to your profile wall at %2$s" - -#: include/enotify.php:249 -#, php-format -msgid "%1$s posted to [url=%2$s]your wall[/url]" -msgstr "%1$s posted to [url=%2$s]your wall[/url]" - -#: include/enotify.php:262 -#, php-format -msgid "%s %s shared a new post" -msgstr "" - -#: include/enotify.php:264 -#, php-format -msgid "%1$s shared a new post at %2$s" -msgstr "%1$s shared a new post at %2$s" - -#: include/enotify.php:265 -#, php-format -msgid "%1$s [url=%2$s]shared a post[/url]." -msgstr "%1$s [url=%2$s]shared a post[/url]." - -#: include/enotify.php:270 -#, php-format -msgid "%s %s shared a post from %s" -msgstr "" - -#: include/enotify.php:272 -#, php-format -msgid "%1$s shared a post from %2$s at %3$s" -msgstr "" - -#: include/enotify.php:273 -#, php-format -msgid "%1$s [url=%2$s]shared a post[/url] from %3$s." -msgstr "" - -#: include/enotify.php:286 -#, php-format -msgid "%1$s %2$s poked you" -msgstr "" - -#: include/enotify.php:288 -#, php-format -msgid "%1$s poked you at %2$s" -msgstr "%1$s poked you at %2$s" - -#: include/enotify.php:289 -#, php-format -msgid "%1$s [url=%2$s]poked you[/url]." -msgstr "%1$s [url=%2$s]poked you[/url]." - -#: include/enotify.php:306 -#, php-format -msgid "%s %s tagged your post" -msgstr "" - -#: include/enotify.php:308 -#, php-format -msgid "%1$s tagged your post at %2$s" -msgstr "%1$s tagged your post at %2$s" - -#: include/enotify.php:309 -#, php-format -msgid "%1$s tagged [url=%2$s]your post[/url]" -msgstr "%1$s tagged [url=%2$s]your post[/url]" - -#: include/enotify.php:321 -#, php-format -msgid "%s Introduction received" -msgstr "" - -#: include/enotify.php:323 -#, php-format -msgid "You've received an introduction from '%1$s' at %2$s" -msgstr "You've received an introduction from '%1$s' at %2$s" - -#: include/enotify.php:324 -#, php-format -msgid "You've received [url=%1$s]an introduction[/url] from %2$s." -msgstr "You've received [url=%1$s]an introduction[/url] from %2$s." - -#: include/enotify.php:329 include/enotify.php:375 -#, php-format -msgid "You may visit their profile at %s" -msgstr "You may visit their profile at %s" - -#: include/enotify.php:331 -#, php-format -msgid "Please visit %s to approve or reject the introduction." -msgstr "Please visit %s to approve or reject the introduction." - -#: include/enotify.php:338 -#, php-format -msgid "%s A new person is sharing with you" -msgstr "" - -#: include/enotify.php:340 include/enotify.php:341 -#, php-format -msgid "%1$s is sharing with you at %2$s" -msgstr "%1$s is sharing with you at %2$s" - -#: include/enotify.php:348 -#, php-format -msgid "%s You have a new follower" -msgstr "" - -#: include/enotify.php:350 include/enotify.php:351 -#, php-format -msgid "You have a new follower at %2$s : %1$s" -msgstr "You have a new follower at %2$s : %1$s" - -#: include/enotify.php:364 -#, php-format -msgid "%s Friend suggestion received" -msgstr "" - -#: include/enotify.php:366 -#, php-format -msgid "You've received a friend suggestion from '%1$s' at %2$s" -msgstr "You've received a friend suggestion from '%1$s' at %2$s" - -#: include/enotify.php:367 -#, php-format -msgid "" -"You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s." -msgstr "You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s." - -#: include/enotify.php:373 -msgid "Name:" -msgstr "Name:" - -#: include/enotify.php:374 -msgid "Photo:" -msgstr "Photo:" - -#: include/enotify.php:377 -#, php-format -msgid "Please visit %s to approve or reject the suggestion." -msgstr "Please visit %s to approve or reject the suggestion." - -#: include/enotify.php:385 include/enotify.php:400 -#, php-format -msgid "%s Connection accepted" -msgstr "" - -#: include/enotify.php:387 include/enotify.php:402 -#, php-format -msgid "'%1$s' has accepted your connection request at %2$s" -msgstr "'%1$s' has accepted your connection request at %2$s" - -#: include/enotify.php:388 include/enotify.php:403 -#, php-format -msgid "%2$s has accepted your [url=%1$s]connection request[/url]." -msgstr "%2$s has accepted your [url=%1$s]connection request[/url]." - -#: include/enotify.php:393 -msgid "" -"You are now mutual friends and may exchange status updates, photos, and " -"email without restriction." -msgstr "You are now mutual friends and may exchange status updates, photos, and email without restriction." - -#: include/enotify.php:395 -#, php-format -msgid "Please visit %s if you wish to make any changes to this relationship." -msgstr "Please visit %s if you wish to make any changes to this relationship." - -#: include/enotify.php:408 -#, php-format -msgid "" -"'%1$s' has chosen to accept you a fan, which restricts some forms of " -"communication - such as private messaging and some profile interactions. If " -"this is a celebrity or community page, these settings were applied " -"automatically." -msgstr "'%1$s' has chosen to accept you as a fan, which restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically." - -#: include/enotify.php:410 -#, php-format -msgid "" -"'%1$s' may choose to extend this into a two-way or more permissive " -"relationship in the future." -msgstr "'%1$s' may choose to extend this into a two-way or more permissive relationship in the future." - -#: include/enotify.php:412 -#, php-format -msgid "Please visit %s if you wish to make any changes to this relationship." -msgstr "Please visit %s if you wish to make any changes to this relationship." - -#: include/enotify.php:422 mod/removeme.php:63 -msgid "[Friendica System Notify]" -msgstr "[Friendica System Notify]" - -#: include/enotify.php:422 -msgid "registration request" -msgstr "registration request" - -#: include/enotify.php:424 -#, php-format -msgid "You've received a registration request from '%1$s' at %2$s" -msgstr "You've received a registration request from '%1$s' at %2$s." - -#: include/enotify.php:425 -#, php-format -msgid "You've received a [url=%1$s]registration request[/url] from %2$s." -msgstr "You've received a [url=%1$s]registration request[/url] from %2$s." - -#: include/enotify.php:430 -#, php-format -msgid "" -"Full Name:\t%s\n" -"Site Location:\t%s\n" -"Login Name:\t%s (%s)" -msgstr "Full Name:\t%s\nSite Location:\t%s\nLogin Name:\t%s (%s)" - -#: include/enotify.php:436 -#, php-format -msgid "Please visit %s to approve or reject the request." -msgstr "Please visit %s to approve or reject the request." - -#: mod/api.php:52 mod/api.php:57 mod/dfrn_confirm.php:78 mod/editpost.php:37 -#: mod/events.php:231 mod/follow.php:55 mod/follow.php:135 mod/item.php:183 -#: mod/item.php:188 mod/item.php:905 mod/message.php:69 mod/message.php:112 -#: mod/notes.php:44 mod/ostatus_subscribe.php:30 mod/photos.php:176 -#: mod/photos.php:922 mod/repair_ostatus.php:31 mod/settings.php:47 -#: mod/settings.php:65 mod/settings.php:498 mod/suggest.php:34 -#: mod/uimport.php:32 mod/unfollow.php:35 mod/unfollow.php:50 -#: mod/unfollow.php:82 mod/wall_attach.php:78 mod/wall_attach.php:81 -#: mod/wallmessage.php:35 mod/wallmessage.php:59 mod/wallmessage.php:96 -#: mod/wallmessage.php:120 mod/wall_upload.php:99 mod/wall_upload.php:102 -#: src/Module/Attach.php:56 src/Module/BaseApi.php:59 -#: src/Module/BaseApi.php:65 src/Module/BaseNotifications.php:88 -#: src/Module/Contact/Advanced.php:43 src/Module/Contact.php:385 -#: src/Module/Delegation.php:118 src/Module/FollowConfirm.php:16 -#: src/Module/FriendSuggest.php:44 src/Module/Group.php:45 -#: src/Module/Group.php:90 src/Module/Invite.php:40 src/Module/Invite.php:127 -#: src/Module/Notifications/Notification.php:47 -#: src/Module/Notifications/Notification.php:76 -#: src/Module/Profile/Common.php:57 src/Module/Profile/Contacts.php:57 -#: src/Module/Register.php:62 src/Module/Register.php:75 -#: src/Module/Register.php:193 src/Module/Register.php:232 +#: mod/api.php:30 mod/editpost.php:38 mod/events.php:220 mod/follow.php:56 +#: mod/follow.php:130 mod/item.php:185 mod/item.php:190 mod/item.php:936 +#: mod/message.php:69 mod/message.php:111 mod/notes.php:44 +#: mod/ostatus_subscribe.php:32 mod/photos.php:160 mod/photos.php:900 +#: mod/repair_ostatus.php:31 mod/settings.php:47 mod/settings.php:57 +#: mod/settings.php:409 mod/suggest.php:34 mod/uimport.php:33 +#: mod/unfollow.php:35 mod/unfollow.php:50 mod/unfollow.php:82 +#: mod/wall_attach.php:68 mod/wall_attach.php:71 mod/wall_upload.php:90 +#: mod/wall_upload.php:93 mod/wallmessage.php:36 mod/wallmessage.php:55 +#: mod/wallmessage.php:89 mod/wallmessage.php:109 src/Module/Attach.php:55 +#: src/Module/BaseApi.php:79 src/Module/BaseApi.php:88 +#: src/Module/BaseApi.php:97 src/Module/BaseApi.php:106 +#: src/Module/BaseNotifications.php:88 src/Module/Contact.php:328 +#: src/Module/Contact/Advanced.php:44 src/Module/Delegation.php:118 +#: src/Module/FollowConfirm.php:17 src/Module/FriendSuggest.php:44 +#: src/Module/Group.php:45 src/Module/Group.php:90 src/Module/Invite.php:41 +#: src/Module/Invite.php:130 src/Module/Notifications/Notification.php:48 +#: src/Module/Notifications/Notification.php:79 +#: src/Module/Profile/Common.php:56 src/Module/Profile/Contacts.php:56 +#: src/Module/Profile/Schedule.php:39 src/Module/Profile/Schedule.php:56 +#: src/Module/Register.php:64 src/Module/Register.php:77 +#: src/Module/Register.php:195 src/Module/Register.php:234 #: src/Module/Search/Directory.php:38 src/Module/Settings/Delegation.php:42 -#: src/Module/Settings/Delegation.php:70 src/Module/Settings/Display.php:42 -#: src/Module/Settings/Display.php:118 -#: src/Module/Settings/Profile/Photo/Crop.php:157 -#: src/Module/Settings/Profile/Photo/Index.php:113 -#: src/Module/Settings/UserExport.php:59 src/Module/Settings/UserExport.php:94 -#: src/Module/Settings/UserExport.php:201 -#: src/Module/Settings/UserExport.php:221 -#: src/Module/Settings/UserExport.php:286 +#: src/Module/Settings/Delegation.php:70 src/Module/Settings/Display.php:43 +#: src/Module/Settings/Display.php:121 +#: src/Module/Settings/Profile/Photo/Crop.php:166 +#: src/Module/Settings/Profile/Photo/Index.php:112 +#: src/Module/Settings/UserExport.php:58 src/Module/Settings/UserExport.php:93 +#: src/Module/Settings/UserExport.php:198 +#: src/Module/Settings/UserExport.php:218 +#: src/Module/Settings/UserExport.php:283 msgid "Permission denied." msgstr "Permission denied." -#: mod/api.php:102 mod/api.php:124 -msgid "Authorize application connection" -msgstr "Authorize application connection" - -#: mod/api.php:103 -msgid "Return to your app and insert this Securty Code:" -msgstr "Return to your app and insert this security code:" - -#: mod/api.php:112 src/Module/BaseAdmin.php:54 src/Module/BaseAdmin.php:58 -msgid "Please login to continue." -msgstr "Please login to continue." - -#: mod/api.php:126 -msgid "" -"Do you want to authorize this application to access your posts and contacts," -" and/or create new posts for you?" -msgstr "Do you want to authorize this application to access your posts and contacts and create new posts for you?" - -#: mod/api.php:127 src/Module/Contact.php:456 -#: src/Module/Notifications/Introductions.php:123 src/Module/Register.php:115 -msgid "Yes" -msgstr "Yes" - -#: mod/api.php:128 src/Module/Notifications/Introductions.php:123 -#: src/Module/Register.php:116 -msgid "No" -msgstr "No" - -#: mod/cal.php:46 mod/cal.php:50 mod/follow.php:38 mod/redir.php:34 -#: mod/redir.php:203 src/Module/Conversation/Community.php:194 -#: src/Module/Debug/ItemBody.php:38 src/Module/Diaspora/Receive.php:51 +#: mod/cal.php:44 mod/cal.php:48 mod/follow.php:39 mod/redir.php:34 +#: mod/redir.php:175 src/Module/Conversation/Community.php:182 +#: src/Module/Debug/ItemBody.php:37 src/Module/Diaspora/Receive.php:51 #: src/Module/Item/Follow.php:42 src/Module/Item/Ignore.php:41 #: src/Module/Item/Pin.php:42 src/Module/Item/Pin.php:57 -#: src/Module/Item/Star.php:42 +#: src/Module/Item/Star.php:43 msgid "Access denied." msgstr "Access denied." -#: mod/cal.php:72 mod/cal.php:133 src/Module/HoverCard.php:53 -#: src/Module/Profile/Common.php:41 src/Module/Profile/Common.php:53 -#: src/Module/Profile/Contacts.php:40 src/Module/Profile/Contacts.php:51 -#: src/Module/Profile/Status.php:58 src/Module/Register.php:258 +#: mod/cal.php:61 mod/cal.php:78 mod/photos.php:69 mod/photos.php:140 +#: mod/photos.php:807 src/Model/Profile.php:229 src/Module/HCard.php:52 +#: src/Module/Profile/Common.php:41 src/Module/Profile/Common.php:52 +#: src/Module/Profile/Contacts.php:40 src/Module/Profile/Contacts.php:50 +#: src/Module/Profile/Media.php:38 src/Module/Profile/Status.php:58 +#: src/Module/Register.php:256 src/Module/RemoteFollow.php:49 msgid "User not found." msgstr "User not found." -#: mod/cal.php:143 mod/display.php:283 src/Module/Profile/Profile.php:94 +#: mod/cal.php:120 mod/display.php:270 src/Module/Profile/Profile.php:94 #: src/Module/Profile/Profile.php:109 src/Module/Profile/Status.php:109 -#: src/Module/Update/Profile.php:55 +#: src/Module/Update/Profile.php:56 msgid "Access to this profile has been restricted." msgstr "Access to this profile has been restricted." -#: mod/cal.php:274 mod/events.php:417 src/Content/Nav.php:181 -#: src/Content/Nav.php:248 src/Module/BaseProfile.php:88 -#: src/Module/BaseProfile.php:99 view/theme/frio/theme.php:229 +#: mod/cal.php:242 mod/events.php:377 src/Content/Nav.php:194 +#: src/Content/Nav.php:258 src/Module/BaseProfile.php:84 +#: src/Module/BaseProfile.php:95 view/theme/frio/theme.php:229 #: view/theme/frio/theme.php:233 msgid "Events" msgstr "Events" -#: mod/cal.php:275 mod/events.php:418 +#: mod/cal.php:243 mod/events.php:378 msgid "View" msgstr "View" -#: mod/cal.php:276 mod/events.php:420 +#: mod/cal.php:244 mod/events.php:380 msgid "Previous" msgstr "Previous" -#: mod/cal.php:277 mod/events.php:421 src/Module/Install.php:207 +#: mod/cal.php:245 mod/events.php:381 src/Module/Install.php:207 msgid "Next" msgstr "Next" -#: mod/cal.php:280 mod/events.php:426 src/Model/Event.php:464 +#: mod/cal.php:248 mod/events.php:386 src/Model/Event.php:457 msgid "today" msgstr "today" -#: mod/cal.php:281 mod/events.php:427 src/Model/Event.php:465 -#: src/Util/Temporal.php:330 +#: mod/cal.php:249 mod/events.php:387 src/Model/Event.php:458 +#: src/Util/Temporal.php:334 msgid "month" msgstr "month" -#: mod/cal.php:282 mod/events.php:428 src/Model/Event.php:466 -#: src/Util/Temporal.php:331 +#: mod/cal.php:250 mod/events.php:388 src/Model/Event.php:459 +#: src/Util/Temporal.php:335 msgid "week" msgstr "week" -#: mod/cal.php:283 mod/events.php:429 src/Model/Event.php:467 -#: src/Util/Temporal.php:332 +#: mod/cal.php:251 mod/events.php:389 src/Model/Event.php:460 +#: src/Util/Temporal.php:336 msgid "day" msgstr "day" -#: mod/cal.php:284 mod/events.php:430 +#: mod/cal.php:252 mod/events.php:390 msgid "list" msgstr "List" -#: mod/cal.php:297 src/Console/User.php:152 src/Console/User.php:250 -#: src/Console/User.php:283 src/Console/User.php:309 src/Model/User.php:607 +#: mod/cal.php:265 src/Console/User.php:182 src/Model/User.php:680 #: src/Module/Admin/Users/Active.php:73 src/Module/Admin/Users/Blocked.php:74 #: src/Module/Admin/Users/Index.php:80 src/Module/Admin/Users/Pending.php:71 -#: src/Module/Api/Twitter/ContactEndpoint.php:73 +#: src/Module/Api/Twitter/ContactEndpoint.php:71 msgid "User not found" msgstr "User not found" -#: mod/cal.php:306 +#: mod/cal.php:274 msgid "This calendar format is not supported" msgstr "This calendar format is not supported" -#: mod/cal.php:308 +#: mod/cal.php:276 msgid "No exportable data found" msgstr "No exportable data found" -#: mod/cal.php:325 +#: mod/cal.php:293 msgid "calendar" msgstr "calendar" -#: mod/dfrn_confirm.php:84 src/Module/Profile/Profile.php:82 -msgid "Profile not found." -msgstr "Profile not found." - -#: mod/dfrn_confirm.php:139 mod/redir.php:56 mod/redir.php:157 -#: src/Module/Contact/Advanced.php:53 src/Module/Contact/Advanced.php:104 -#: src/Module/Contact/Contacts.php:36 src/Module/FriendSuggest.php:54 -#: src/Module/FriendSuggest.php:93 src/Module/Group.php:105 -msgid "Contact not found." -msgstr "Contact not found." - -#: mod/dfrn_confirm.php:140 -msgid "" -"This may occasionally happen if contact was requested by both persons and it" -" has already been approved." -msgstr "This may occasionally happen if contact was requested by both persons and it has already been approved." - -#: mod/dfrn_confirm.php:241 -msgid "Response from remote site was not understood." -msgstr "Response from remote site was not understood." - -#: mod/dfrn_confirm.php:248 mod/dfrn_confirm.php:254 -msgid "Unexpected response from remote site: " -msgstr "Unexpected response from remote site: " - -#: mod/dfrn_confirm.php:263 -msgid "Confirmation completed successfully." -msgstr "Confirmation completed successfully." - -#: mod/dfrn_confirm.php:275 -msgid "Temporary failure. Please wait and try again." -msgstr "Temporary failure. Please wait and try again." - -#: mod/dfrn_confirm.php:278 -msgid "Introduction failed or was revoked." -msgstr "Introduction failed or was revoked." - -#: mod/dfrn_confirm.php:283 -msgid "Remote site reported: " -msgstr "Remote site reported: " - -#: mod/dfrn_confirm.php:388 -#, php-format -msgid "No user record found for '%s' " -msgstr "No user record found for '%s' " - -#: mod/dfrn_confirm.php:398 -msgid "Our site encryption key is apparently messed up." -msgstr "Our site encryption key is apparently messed up." - -#: mod/dfrn_confirm.php:409 -msgid "Empty site URL was provided or URL could not be decrypted by us." -msgstr "An empty URL was provided, or the URL could not be decrypted by us." - -#: mod/dfrn_confirm.php:425 -msgid "Contact record was not found for you on our site." -msgstr "Contact record was not found for you on our site." - -#: mod/dfrn_confirm.php:439 -#, php-format -msgid "Site public key not available in contact record for URL %s." -msgstr "Site public key not available in contact record for URL %s." - -#: mod/dfrn_confirm.php:455 -msgid "" -"The ID provided by your system is a duplicate on our system. It should work " -"if you try again." -msgstr "The ID provided by your system is a duplicate on our system. It should work if you try again." - -#: mod/dfrn_confirm.php:466 -msgid "Unable to set your contact credentials on our system." -msgstr "Unable to set your contact credentials on our system." - -#: mod/dfrn_confirm.php:522 -msgid "Unable to update your contact profile details on our system" -msgstr "Unable to update your contact profile details on our system" - -#: mod/dfrn_poll.php:135 mod/dfrn_poll.php:506 -#, php-format -msgid "%1$s welcomes %2$s" -msgstr "%1$s welcomes %2$s" - -#: mod/dfrn_request.php:113 -msgid "This introduction has already been accepted." -msgstr "This introduction has already been accepted." - -#: mod/dfrn_request.php:131 mod/dfrn_request.php:369 -msgid "Profile location is not valid or does not contain profile information." -msgstr "Profile location is not valid or does not contain profile information." - -#: mod/dfrn_request.php:135 mod/dfrn_request.php:373 -msgid "Warning: profile location has no identifiable owner name." -msgstr "Warning: profile location has no identifiable owner name." - -#: mod/dfrn_request.php:138 mod/dfrn_request.php:376 -msgid "Warning: profile location has no profile photo." -msgstr "Warning: profile location has no profile photo." - -#: mod/dfrn_request.php:142 mod/dfrn_request.php:380 -#, php-format -msgid "%d required parameter was not found at the given location" -msgid_plural "%d required parameters were not found at the given location" -msgstr[0] "%d required parameter was not found at the given location" -msgstr[1] "%d required parameters were not found at the given location" - -#: mod/dfrn_request.php:180 -msgid "Introduction complete." -msgstr "Introduction complete." - -#: mod/dfrn_request.php:216 -msgid "Unrecoverable protocol error." -msgstr "Unrecoverable protocol error." - -#: mod/dfrn_request.php:243 src/Module/RemoteFollow.php:54 -msgid "Profile unavailable." -msgstr "Profile unavailable." - -#: mod/dfrn_request.php:264 -#, php-format -msgid "%s has received too many connection requests today." -msgstr "%s has received too many connection requests today." - -#: mod/dfrn_request.php:265 -msgid "Spam protection measures have been invoked." -msgstr "Spam protection measures have been invoked." - -#: mod/dfrn_request.php:266 -msgid "Friends are advised to please try again in 24 hours." -msgstr "Friends are advised to please try again in 24 hours." - -#: mod/dfrn_request.php:290 src/Module/RemoteFollow.php:60 -msgid "Invalid locator" -msgstr "Invalid locator" - -#: mod/dfrn_request.php:326 -msgid "You have already introduced yourself here." -msgstr "You have already introduced yourself here." - -#: mod/dfrn_request.php:329 -#, php-format -msgid "Apparently you are already friends with %s." -msgstr "Apparently you are already friends with %s." - -#: mod/dfrn_request.php:349 -msgid "Invalid profile URL." -msgstr "Invalid profile URL." - -#: mod/dfrn_request.php:355 src/Model/Contact.php:2159 -msgid "Disallowed profile URL." -msgstr "Disallowed profile URL." - -#: mod/dfrn_request.php:361 src/Model/Contact.php:2164 -#: src/Module/Friendica.php:80 -msgid "Blocked domain" -msgstr "Blocked domain" - -#: mod/dfrn_request.php:428 src/Module/Contact.php:157 -msgid "Failed to update contact record." -msgstr "Failed to update contact record." - -#: mod/dfrn_request.php:448 -msgid "Your introduction has been sent." -msgstr "Your introduction has been sent." - -#: mod/dfrn_request.php:480 src/Module/RemoteFollow.php:72 -msgid "" -"Remote subscription can't be done for your network. Please subscribe " -"directly on your system." -msgstr "Remote subscription can't be done for your network. Please subscribe directly on your system." - -#: mod/dfrn_request.php:496 -msgid "Please login to confirm introduction." -msgstr "Please login to confirm introduction." - -#: mod/dfrn_request.php:504 -msgid "" -"Incorrect identity currently logged in. Please login to " -"this profile." -msgstr "Incorrect identity currently logged in. Please login to this profile." - -#: mod/dfrn_request.php:518 mod/dfrn_request.php:533 -msgid "Confirm" -msgstr "Confirm" - -#: mod/dfrn_request.php:529 -msgid "Hide this contact" -msgstr "Hide this contact" - -#: mod/dfrn_request.php:531 -#, php-format -msgid "Welcome home %s." -msgstr "Welcome home %s." - -#: mod/dfrn_request.php:532 -#, php-format -msgid "Please confirm your introduction/connection request to %s." -msgstr "Please confirm your introduction/connection request to %s." - -#: mod/dfrn_request.php:600 mod/display.php:179 mod/photos.php:836 -#: mod/videos.php:129 src/Module/Conversation/Community.php:188 -#: src/Module/Debug/Probe.php:39 src/Module/Debug/WebFinger.php:38 -#: src/Module/Directory.php:49 src/Module/Search/Index.php:51 -#: src/Module/Search/Index.php:56 +#: mod/display.php:165 mod/photos.php:811 +#: src/Module/Conversation/Community.php:176 src/Module/Debug/Probe.php:39 +#: src/Module/Debug/WebFinger.php:38 src/Module/Directory.php:49 +#: src/Module/Search/Index.php:50 src/Module/Search/Index.php:55 msgid "Public access denied." msgstr "Public access denied." -#: mod/dfrn_request.php:636 src/Module/RemoteFollow.php:104 -msgid "Friend/Connection Request" -msgstr "Friend/Connection request" - -#: mod/dfrn_request.php:637 -#, php-format -msgid "" -"Enter your Webfinger address (user@domain.tld) or profile URL here. If this " -"isn't supported by your system (for example it doesn't work with Diaspora), " -"you have to subscribe to %s directly on your system" -msgstr "Enter your WebFinger address (user@domain.tld) or profile URL here. If this isn't supported by your system (for example it doesn't work with Diaspora), you have to subscribe to %s directly on your system" - -#: mod/dfrn_request.php:638 src/Module/RemoteFollow.php:106 -#, php-format -msgid "" -"If you are not yet a member of the free social web, follow " -"this link to find a public Friendica node and join us today." -msgstr "" - -#: mod/dfrn_request.php:639 src/Module/RemoteFollow.php:107 -msgid "Your Webfinger address or profile URL:" -msgstr "Your WebFinger address or profile URL:" - -#: mod/dfrn_request.php:640 mod/follow.php:147 src/Module/RemoteFollow.php:108 -msgid "Please answer the following:" -msgstr "Please answer the following:" - -#: mod/dfrn_request.php:641 mod/follow.php:74 mod/unfollow.php:99 -#: src/Module/RemoteFollow.php:109 -msgid "Submit Request" -msgstr "Submit request" - -#: mod/dfrn_request.php:648 mod/follow.php:161 -#, php-format -msgid "%s knows you" -msgstr "" - -#: mod/dfrn_request.php:649 mod/follow.php:162 -msgid "Add a personal note:" -msgstr "Add a personal note:" - -#: mod/display.php:235 mod/display.php:319 +#: mod/display.php:221 mod/display.php:295 msgid "The requested item doesn't exist or has been deleted." msgstr "The requested item doesn't exist or has been deleted." -#: mod/display.php:399 +#: mod/display.php:375 msgid "The feed for this item is unavailable." msgstr "The feed for this item is unavailable." -#: mod/editpost.php:44 mod/editpost.php:54 +#: mod/editpost.php:45 mod/editpost.php:55 msgid "Item not found" msgstr "Item not found" -#: mod/editpost.php:61 +#: mod/editpost.php:64 msgid "Edit post" msgstr "Edit post" -#: mod/editpost.php:88 mod/notes.php:63 src/Content/Text/HTML.php:893 -#: src/Module/Filer/SaveTag.php:70 +#: mod/editpost.php:91 mod/notes.php:56 src/Content/Text/HTML.php:885 +#: src/Module/Admin/Storage.php:143 src/Module/Filer/SaveTag.php:69 msgid "Save" msgstr "Save" -#: mod/editpost.php:94 mod/message.php:203 mod/message.php:372 -#: mod/wallmessage.php:154 +#: mod/editpost.php:92 mod/photos.php:1347 src/Content/Conversation.php:326 +#: src/Module/Contact/Poke.php:157 src/Object/Post.php:964 +msgid "Loading..." +msgstr "" + +#: mod/editpost.php:93 mod/message.php:198 mod/message.php:355 +#: mod/wallmessage.php:139 src/Content/Conversation.php:327 +msgid "Upload photo" +msgstr "Upload photo" + +#: mod/editpost.php:94 src/Content/Conversation.php:328 +msgid "upload photo" +msgstr "upload photo" + +#: mod/editpost.php:95 src/Content/Conversation.php:329 +msgid "Attach file" +msgstr "Attach file" + +#: mod/editpost.php:96 src/Content/Conversation.php:330 +msgid "attach file" +msgstr "attach file" + +#: mod/editpost.php:97 mod/message.php:199 mod/message.php:356 +#: mod/wallmessage.php:140 msgid "Insert web link" msgstr "Insert web link" -#: mod/editpost.php:95 +#: mod/editpost.php:98 msgid "web link" msgstr "web link" -#: mod/editpost.php:96 +#: mod/editpost.php:99 msgid "Insert video link" msgstr "Insert video link" -#: mod/editpost.php:97 +#: mod/editpost.php:100 msgid "video link" msgstr "video link" -#: mod/editpost.php:98 +#: mod/editpost.php:101 msgid "Insert audio link" msgstr "Insert audio link" -#: mod/editpost.php:99 +#: mod/editpost.php:102 msgid "audio link" msgstr "audio link" -#: mod/editpost.php:113 src/Core/ACL.php:313 +#: mod/editpost.php:103 src/Content/Conversation.php:340 +#: src/Module/Item/Compose.php:161 +msgid "Set your location" +msgstr "Set your location" + +#: mod/editpost.php:104 src/Content/Conversation.php:341 +msgid "set location" +msgstr "set location" + +#: mod/editpost.php:105 src/Content/Conversation.php:342 +msgid "Clear browser location" +msgstr "Clear browser location" + +#: mod/editpost.php:106 src/Content/Conversation.php:343 +msgid "clear location" +msgstr "clear location" + +#: mod/editpost.php:107 mod/message.php:200 mod/message.php:358 +#: mod/photos.php:1498 mod/wallmessage.php:141 +#: src/Content/Conversation.php:355 src/Content/Conversation.php:689 +#: src/Module/Item/Compose.php:165 src/Object/Post.php:502 +msgid "Please wait" +msgstr "Please wait" + +#: mod/editpost.php:108 src/Content/Conversation.php:356 +msgid "Permission settings" +msgstr "Permission settings" + +#: mod/editpost.php:116 src/Core/ACL.php:325 msgid "CC: email addresses" msgstr "CC: email addresses" -#: mod/editpost.php:120 src/Core/ACL.php:314 +#: mod/editpost.php:117 src/Content/Conversation.php:366 +msgid "Public post" +msgstr "Public post" + +#: mod/editpost.php:120 src/Content/Conversation.php:345 +#: src/Module/Item/Compose.php:166 +msgid "Set title" +msgstr "Set title" + +#: mod/editpost.php:122 src/Content/Conversation.php:347 +#: src/Module/Item/Compose.php:167 +msgid "Categories (comma-separated list)" +msgstr "Categories (comma-separated list)" + +#: mod/editpost.php:123 src/Core/ACL.php:326 msgid "Example: bob@example.com, mary@example.com" msgstr "Example: bob@example.com, mary@example.com" -#: mod/events.php:138 mod/events.php:140 +#: mod/editpost.php:128 mod/events.php:517 mod/photos.php:1346 +#: mod/photos.php:1402 mod/photos.php:1476 src/Content/Conversation.php:370 +#: src/Module/Item/Compose.php:160 src/Object/Post.php:974 +msgid "Preview" +msgstr "Preview" + +#: mod/editpost.php:130 mod/fbrowser.php:100 mod/fbrowser.php:127 +#: mod/follow.php:144 mod/photos.php:1013 mod/photos.php:1114 mod/tagrm.php:37 +#: mod/tagrm.php:129 mod/unfollow.php:97 src/Content/Conversation.php:373 +#: src/Module/Contact/Revoke.php:99 src/Module/RemoteFollow.php:116 +msgid "Cancel" +msgstr "Cancel" + +#: mod/editpost.php:134 src/Content/Conversation.php:380 +#: src/Content/Widget/VCard.php:107 src/Model/Profile.php:460 +#: src/Module/Admin/Logs/View.php:92 +msgid "Message" +msgstr "Message" + +#: mod/editpost.php:135 src/Content/Conversation.php:381 +#: src/Module/Settings/TwoFactor/Trusted.php:101 +msgid "Browser" +msgstr "Browser" + +#: mod/editpost.php:136 mod/events.php:522 mod/photos.php:948 +#: mod/photos.php:1300 src/Content/Conversation.php:357 +msgid "Permissions" +msgstr "Permissions" + +#: mod/editpost.php:138 src/Content/Conversation.php:383 +msgid "Open Compose page" +msgstr "Open compose page" + +#: mod/events.php:123 mod/events.php:125 msgid "Event can not end before it has started." msgstr "Event cannot end before it has started." -#: mod/events.php:147 mod/events.php:149 +#: mod/events.php:132 mod/events.php:134 msgid "Event title and start time are required." msgstr "Event title and starting time are required." -#: mod/events.php:419 +#: mod/events.php:379 msgid "Create New Event" msgstr "Create new event" -#: mod/events.php:531 +#: mod/events.php:478 src/Module/Admin/Logs/View.php:96 msgid "Event details" msgstr "Event details" -#: mod/events.php:532 +#: mod/events.php:479 msgid "Starting date and Title are required." msgstr "Starting date and title are required." -#: mod/events.php:533 mod/events.php:538 +#: mod/events.php:480 mod/events.php:485 msgid "Event Starts:" msgstr "Event starts:" -#: mod/events.php:533 mod/events.php:565 +#: mod/events.php:480 mod/events.php:510 #: src/Module/Admin/Blocklist/Server.php:79 #: src/Module/Admin/Blocklist/Server.php:80 #: src/Module/Admin/Blocklist/Server.php:99 #: src/Module/Admin/Blocklist/Server.php:100 -#: src/Module/Admin/Item/Delete.php:70 src/Module/Debug/Probe.php:60 +#: src/Module/Admin/Item/Delete.php:70 src/Module/Debug/Probe.php:61 #: src/Module/Install.php:200 src/Module/Install.php:233 #: src/Module/Install.php:238 src/Module/Install.php:257 #: src/Module/Install.php:268 src/Module/Install.php:273 #: src/Module/Install.php:279 src/Module/Install.php:284 #: src/Module/Install.php:298 src/Module/Install.php:313 -#: src/Module/Install.php:340 src/Module/Register.php:135 -#: src/Module/Security/TwoFactor/Verify.php:99 +#: src/Module/Install.php:340 src/Module/Register.php:137 +#: src/Module/Security/TwoFactor/Verify.php:100 #: src/Module/Settings/TwoFactor/Index.php:133 #: src/Module/Settings/TwoFactor/Verify.php:141 msgid "Required" msgstr "Required" -#: mod/events.php:546 mod/events.php:571 +#: mod/events.php:493 mod/events.php:516 msgid "Finish date/time is not known or not relevant" msgstr "Finish date/time is not known or not relevant" -#: mod/events.php:548 mod/events.php:553 +#: mod/events.php:495 mod/events.php:500 msgid "Event Finishes:" msgstr "Event finishes:" -#: mod/events.php:559 mod/events.php:572 -msgid "Adjust for viewer timezone" -msgstr "Adjust for viewer's time zone" - -#: mod/events.php:561 src/Module/Profile/Profile.php:172 -#: src/Module/Settings/Profile/Index.php:253 +#: mod/events.php:506 src/Module/Profile/Profile.php:172 +#: src/Module/Settings/Profile/Index.php:239 msgid "Description:" msgstr "Description:" -#: mod/events.php:563 src/Model/Event.php:84 src/Model/Event.php:111 -#: src/Model/Event.php:473 src/Model/Event.php:960 src/Model/Profile.php:358 -#: src/Module/Contact.php:646 src/Module/Directory.php:156 -#: src/Module/Notifications/Introductions.php:172 -#: src/Module/Profile/Profile.php:190 +#: mod/events.php:508 src/Content/Widget/VCard.php:98 src/Model/Event.php:80 +#: src/Model/Event.php:107 src/Model/Event.php:466 src/Model/Event.php:915 +#: src/Model/Profile.php:368 src/Module/Contact.php:565 +#: src/Module/Directory.php:150 src/Module/Notifications/Introductions.php:165 +#: src/Module/Profile/Profile.php:194 msgid "Location:" msgstr "Location:" -#: mod/events.php:565 mod/events.php:567 +#: mod/events.php:510 mod/events.php:512 msgid "Title:" msgstr "Title:" -#: mod/events.php:568 mod/events.php:569 +#: mod/events.php:513 mod/events.php:514 msgid "Share this event" msgstr "Share this event" -#: mod/events.php:575 mod/message.php:205 mod/message.php:373 -#: mod/photos.php:951 mod/photos.php:1054 mod/photos.php:1339 -#: mod/photos.php:1380 mod/photos.php:1437 mod/photos.php:1512 -#: src/Module/Admin/Item/Source.php:65 src/Module/Contact/Advanced.php:132 -#: src/Module/Contact.php:604 src/Module/Contact/Poke.php:155 +#: mod/events.php:519 mod/message.php:201 mod/message.php:357 +#: mod/photos.php:930 mod/photos.php:1034 mod/photos.php:1304 +#: mod/photos.php:1345 mod/photos.php:1401 mod/photos.php:1475 +#: src/Module/Admin/Item/Source.php:65 src/Module/Contact.php:523 +#: src/Module/Contact/Advanced.php:133 src/Module/Contact/Poke.php:158 #: src/Module/Debug/ActivityPubConversion.php:141 #: src/Module/Debug/Babel.php:313 src/Module/Debug/Localtime.php:64 -#: src/Module/Debug/Probe.php:55 src/Module/Debug/WebFinger.php:53 -#: src/Module/Delegation.php:152 src/Module/FriendSuggest.php:129 +#: src/Module/Debug/Probe.php:56 src/Module/Debug/WebFinger.php:53 +#: src/Module/Delegation.php:147 src/Module/FriendSuggest.php:128 #: src/Module/Install.php:245 src/Module/Install.php:287 -#: src/Module/Install.php:324 src/Module/Invite.php:174 -#: src/Module/Item/Compose.php:144 src/Module/Profile/Profile.php:243 -#: src/Module/Settings/Profile/Index.php:237 src/Object/Post.php:949 +#: src/Module/Install.php:324 src/Module/Invite.php:177 +#: src/Module/Item/Compose.php:150 src/Module/Profile/Profile.php:247 +#: src/Module/Settings/Profile/Index.php:223 src/Object/Post.php:963 #: view/theme/duepuntozero/config.php:69 view/theme/frio/config.php:160 #: view/theme/quattro/config.php:71 view/theme/vier/config.php:119 msgid "Submit" msgstr "Submit" -#: mod/events.php:576 src/Module/Profile/Profile.php:244 +#: mod/events.php:520 src/Module/Profile/Profile.php:248 msgid "Basic" msgstr "Basic" -#: mod/events.php:577 src/Module/Admin/Site.php:587 src/Module/Contact.php:953 -#: src/Module/Profile/Profile.php:245 +#: mod/events.php:521 src/Module/Admin/Site.php:507 src/Module/Contact.php:863 +#: src/Module/Profile/Profile.php:249 msgid "Advanced" msgstr "Advanced" -#: mod/events.php:594 +#: mod/events.php:538 msgid "Failed to remove event" msgstr "Failed to remove event" -#: mod/fbrowser.php:43 src/Content/Nav.php:179 src/Module/BaseProfile.php:68 +#: mod/fbrowser.php:43 src/Content/Nav.php:192 src/Module/BaseProfile.php:64 #: view/theme/frio/theme.php:227 msgid "Photos" msgstr "Photos" -#: mod/fbrowser.php:107 mod/fbrowser.php:136 -#: src/Module/Settings/Profile/Photo/Index.php:130 +#: mod/fbrowser.php:102 mod/fbrowser.php:129 +#: src/Module/Settings/Profile/Photo/Index.php:129 msgid "Upload" msgstr "Upload" -#: mod/fbrowser.php:131 +#: mod/fbrowser.php:124 msgid "Files" msgstr "Files" +#: mod/follow.php:74 mod/unfollow.php:96 src/Module/RemoteFollow.php:115 +msgid "Submit Request" +msgstr "Submit request" + #: mod/follow.php:84 msgid "You already added this contact." msgstr "You already added this contact." @@ -1408,55 +454,74 @@ msgstr "diaspora* support isn't enabled. Contact can't be added." msgid "OStatus support is disabled. Contact can't be added." msgstr "OStatus support is disabled. Contact can't be added." -#: mod/follow.php:148 mod/unfollow.php:97 +#: mod/follow.php:138 src/Content/Item.php:463 src/Content/Widget.php:76 +#: src/Model/Contact.php:1072 src/Model/Contact.php:1084 +#: view/theme/vier/theme.php:172 +msgid "Connect/Follow" +msgstr "Connect/Follow" + +#: mod/follow.php:139 src/Module/RemoteFollow.php:114 +msgid "Please answer the following:" +msgstr "Please answer the following:" + +#: mod/follow.php:140 mod/unfollow.php:94 msgid "Your Identity Address:" msgstr "My identity address:" -#: mod/follow.php:149 mod/unfollow.php:103 -#: src/Module/Admin/Blocklist/Contact.php:100 src/Module/Contact.php:642 -#: src/Module/Notifications/Introductions.php:108 -#: src/Module/Notifications/Introductions.php:183 +#: mod/follow.php:141 mod/unfollow.php:100 +#: src/Module/Admin/Blocklist/Contact.php:116 src/Module/Contact.php:561 +#: src/Module/Notifications/Introductions.php:107 +#: src/Module/Notifications/Introductions.php:176 msgid "Profile URL" msgstr "Profile URL:" -#: mod/follow.php:150 src/Module/Contact.php:652 -#: src/Module/Notifications/Introductions.php:176 -#: src/Module/Profile/Profile.php:203 +#: mod/follow.php:142 src/Module/Contact.php:573 +#: src/Module/Notifications/Introductions.php:169 +#: src/Module/Profile/Profile.php:207 msgid "Tags:" msgstr "Tags:" -#: mod/follow.php:171 mod/unfollow.php:113 src/Module/BaseProfile.php:63 -#: src/Module/Contact.php:931 +#: mod/follow.php:153 +#, php-format +msgid "%s knows you" +msgstr "" + +#: mod/follow.php:154 +msgid "Add a personal note:" +msgstr "Add a personal note:" + +#: mod/follow.php:163 mod/unfollow.php:109 src/Module/BaseProfile.php:59 +#: src/Module/Contact.php:833 msgid "Status Messages and Posts" msgstr "Status Messages and Posts" -#: mod/follow.php:203 +#: mod/follow.php:191 msgid "The contact could not be added." msgstr "Contact could not be added." -#: mod/item.php:134 mod/item.php:138 +#: mod/item.php:135 mod/item.php:139 msgid "Unable to locate original post." msgstr "Unable to locate original post." -#: mod/item.php:339 mod/item.php:344 +#: mod/item.php:341 mod/item.php:346 msgid "Empty post discarded." msgstr "Empty post discarded." -#: mod/item.php:705 +#: mod/item.php:742 msgid "Post updated." msgstr "" -#: mod/item.php:722 mod/item.php:727 +#: mod/item.php:752 mod/item.php:757 msgid "Item wasn't stored." msgstr "" -#: mod/item.php:738 +#: mod/item.php:768 msgid "Item couldn't be fetched." msgstr "" -#: mod/item.php:884 src/Module/Admin/Themes/Details.php:39 -#: src/Module/Admin/Themes/Index.php:59 src/Module/Debug/ItemBody.php:47 -#: src/Module/Debug/ItemBody.php:60 +#: mod/item.php:914 src/Module/Admin/Themes/Details.php:39 +#: src/Module/Admin/Themes/Index.php:59 src/Module/Debug/ItemBody.php:41 +#: src/Module/Debug/ItemBody.php:56 msgid "Item not found." msgstr "Item not found." @@ -1526,7 +591,7 @@ msgid "" "your email for further instructions." msgstr "Enter email address or nickname to reset your password. You will receive further instruction via email." -#: mod/lostpass.php:130 src/Module/Security/Login.php:144 +#: mod/lostpass.php:130 src/Module/Security/Login.php:148 msgid "Nickname or Email: " msgstr "Nickname or email: " @@ -1534,7 +599,7 @@ msgstr "Nickname or email: " msgid "Reset" msgstr "Reset" -#: mod/lostpass.php:146 src/Module/Security/Login.php:156 +#: mod/lostpass.php:146 src/Module/Security/Login.php:160 msgid "Password Reset" msgstr "Forgotten password?" @@ -1598,27 +663,19 @@ msgstr "Your password has been changed at %s" msgid "No keywords to match. Please add keywords to your profile." msgstr "" -#: mod/match.php:105 src/Content/Pager.php:216 -msgid "first" -msgstr "first" - -#: mod/match.php:110 src/Content/Pager.php:276 -msgid "next" -msgstr "next" - -#: mod/match.php:120 src/Module/BaseSearch.php:117 +#: mod/match.php:93 src/Module/BaseSearch.php:117 msgid "No matches" msgstr "No matches" -#: mod/match.php:125 +#: mod/match.php:98 msgid "Profile Match" msgstr "Profile Match" -#: mod/message.php:46 mod/message.php:127 src/Content/Nav.php:276 +#: mod/message.php:46 mod/message.php:126 src/Content/Nav.php:286 msgid "New Message" msgstr "New Message" -#: mod/message.php:83 mod/wallmessage.php:76 +#: mod/message.php:83 mod/wallmessage.php:69 msgid "No recipient selected." msgstr "No recipient selected." @@ -1626,413 +683,447 @@ msgstr "No recipient selected." msgid "Unable to locate contact information." msgstr "Unable to locate contact information." -#: mod/message.php:90 mod/wallmessage.php:82 +#: mod/message.php:90 mod/wallmessage.php:75 msgid "Message could not be sent." msgstr "Message could not be sent." -#: mod/message.php:93 mod/wallmessage.php:85 +#: mod/message.php:93 mod/wallmessage.php:78 msgid "Message collection failure." msgstr "Message collection failure." -#: mod/message.php:121 src/Module/Notifications/Introductions.php:114 -#: src/Module/Notifications/Introductions.php:155 -#: src/Module/Notifications/Notification.php:56 +#: mod/message.php:120 src/Module/Notifications/Introductions.php:113 +#: src/Module/Notifications/Introductions.php:148 +#: src/Module/Notifications/Notification.php:57 msgid "Discard" msgstr "Discard" -#: mod/message.php:134 src/Content/Nav.php:273 view/theme/frio/theme.php:234 +#: mod/message.php:133 src/Content/Nav.php:283 view/theme/frio/theme.php:234 msgid "Messages" msgstr "Messages" -#: mod/message.php:147 +#: mod/message.php:146 msgid "Conversation not found." msgstr "Conversation not found." -#: mod/message.php:152 +#: mod/message.php:151 msgid "Message was not deleted." msgstr "" -#: mod/message.php:170 +#: mod/message.php:166 msgid "Conversation was not removed." msgstr "" -#: mod/message.php:184 mod/message.php:297 mod/wallmessage.php:137 +#: mod/message.php:180 mod/message.php:286 mod/wallmessage.php:123 msgid "Please enter a link URL:" msgstr "Please enter a link URL:" -#: mod/message.php:193 mod/wallmessage.php:142 +#: mod/message.php:189 mod/wallmessage.php:128 msgid "Send Private Message" msgstr "Send private message" -#: mod/message.php:194 mod/message.php:363 mod/wallmessage.php:144 +#: mod/message.php:190 mod/message.php:347 mod/wallmessage.php:130 msgid "To:" msgstr "To:" -#: mod/message.php:195 mod/message.php:364 mod/wallmessage.php:145 +#: mod/message.php:191 mod/message.php:348 mod/wallmessage.php:131 msgid "Subject:" msgstr "Subject:" -#: mod/message.php:199 mod/message.php:367 mod/wallmessage.php:151 -#: src/Module/Invite.php:167 +#: mod/message.php:195 mod/message.php:351 mod/wallmessage.php:137 +#: src/Module/Invite.php:170 msgid "Your message:" msgstr "Your message:" -#: mod/message.php:233 +#: mod/message.php:222 msgid "No messages." msgstr "No messages." -#: mod/message.php:289 +#: mod/message.php:278 msgid "Message not available." msgstr "Message not available." -#: mod/message.php:339 +#: mod/message.php:323 msgid "Delete message" msgstr "Delete message" -#: mod/message.php:341 mod/message.php:473 +#: mod/message.php:325 mod/message.php:457 msgid "D, d M Y - g:i A" msgstr "D, d M Y - g:i A" -#: mod/message.php:356 mod/message.php:470 +#: mod/message.php:340 mod/message.php:454 msgid "Delete conversation" msgstr "Delete conversation" -#: mod/message.php:358 +#: mod/message.php:342 msgid "" "No secure communications available. You may be able to " "respond from the sender's profile page." msgstr "No secure communications available. You may be able to respond from the sender's profile page." -#: mod/message.php:362 +#: mod/message.php:346 msgid "Send Reply" msgstr "Send reply" -#: mod/message.php:444 +#: mod/message.php:428 #, php-format msgid "Unknown sender - %s" msgstr "Unknown sender - %s" -#: mod/message.php:446 +#: mod/message.php:430 #, php-format msgid "You and %s" msgstr "Me and %s" -#: mod/message.php:448 +#: mod/message.php:432 #, php-format msgid "%s and You" msgstr "%s and me" -#: mod/message.php:476 +#: mod/message.php:460 #, php-format msgid "%d message" msgid_plural "%d messages" msgstr[0] "%d message" msgstr[1] "%d messages" -#: mod/notes.php:51 src/Module/BaseProfile.php:110 +#: mod/notes.php:51 src/Module/BaseProfile.php:106 msgid "Personal Notes" msgstr "Personal notes" -#: mod/notes.php:59 +#: mod/notes.php:55 msgid "Personal notes are visible only by yourself." -msgstr "Personal notes are only visible to yourself." +msgstr "Personal notes are only visible to you." -#: mod/ostatus_subscribe.php:35 -msgid "Subscribing to OStatus contacts" -msgstr "Subscribing to OStatus contacts" +#: mod/ostatus_subscribe.php:37 +msgid "Subscribing to contacts" +msgstr "" -#: mod/ostatus_subscribe.php:45 +#: mod/ostatus_subscribe.php:47 msgid "No contact provided." msgstr "No contact provided." -#: mod/ostatus_subscribe.php:51 +#: mod/ostatus_subscribe.php:53 msgid "Couldn't fetch information for contact." msgstr "Couldn't fetch information for contact." -#: mod/ostatus_subscribe.php:61 +#: mod/ostatus_subscribe.php:64 msgid "Couldn't fetch friends for contact." msgstr "Couldn't fetch friends for contact." -#: mod/ostatus_subscribe.php:79 mod/repair_ostatus.php:65 +#: mod/ostatus_subscribe.php:70 mod/ostatus_subscribe.php:81 +msgid "Couldn't fetch following contacts." +msgstr "" + +#: mod/ostatus_subscribe.php:76 +msgid "Couldn't fetch remote profile." +msgstr "" + +#: mod/ostatus_subscribe.php:86 +msgid "Unsupported network" +msgstr "" + +#: mod/ostatus_subscribe.php:102 mod/repair_ostatus.php:51 msgid "Done" msgstr "Done" -#: mod/ostatus_subscribe.php:93 +#: mod/ostatus_subscribe.php:116 msgid "success" msgstr "success" -#: mod/ostatus_subscribe.php:95 +#: mod/ostatus_subscribe.php:118 msgid "failed" msgstr "failed" -#: mod/ostatus_subscribe.php:98 src/Object/Post.php:305 +#: mod/ostatus_subscribe.php:121 msgid "ignored" msgstr "Ignored" -#: mod/ostatus_subscribe.php:103 mod/repair_ostatus.php:71 +#: mod/ostatus_subscribe.php:126 mod/repair_ostatus.php:57 msgid "Keep this window open until done." msgstr "Keep this window open until done." -#: mod/photos.php:129 src/Module/BaseProfile.php:71 +#: mod/photos.php:108 src/Module/BaseProfile.php:67 msgid "Photo Albums" msgstr "Photo Albums" -#: mod/photos.php:130 mod/photos.php:1638 +#: mod/photos.php:109 mod/photos.php:1593 msgid "Recent Photos" msgstr "Recent photos" -#: mod/photos.php:132 mod/photos.php:1105 mod/photos.php:1640 +#: mod/photos.php:111 mod/photos.php:1082 mod/photos.php:1595 msgid "Upload New Photos" msgstr "Upload new photos" -#: mod/photos.php:150 src/Module/BaseSettings.php:37 +#: mod/photos.php:129 src/Module/BaseSettings.php:37 msgid "everybody" msgstr "everybody" -#: mod/photos.php:183 +#: mod/photos.php:167 msgid "Contact information unavailable" msgstr "Contact information unavailable" -#: mod/photos.php:222 +#: mod/photos.php:196 msgid "Album not found." msgstr "Album not found." -#: mod/photos.php:280 +#: mod/photos.php:250 msgid "Album successfully deleted" msgstr "Album successfully deleted" -#: mod/photos.php:282 +#: mod/photos.php:252 msgid "Album was empty." msgstr "Album was empty." -#: mod/photos.php:314 +#: mod/photos.php:284 msgid "Failed to delete the photo." msgstr "" -#: mod/photos.php:589 +#: mod/photos.php:559 msgid "a photo" msgstr "a photo" -#: mod/photos.php:589 +#: mod/photos.php:559 #, php-format msgid "%1$s was tagged in %2$s by %3$s" msgstr "%1$s was tagged in %2$s by %3$s" -#: mod/photos.php:672 mod/photos.php:675 mod/photos.php:702 -#: mod/wall_upload.php:216 src/Module/Settings/Profile/Photo/Index.php:61 +#: mod/photos.php:642 mod/photos.php:645 mod/photos.php:672 +#: mod/wall_upload.php:207 src/Module/Settings/Profile/Photo/Index.php:60 #, php-format msgid "Image exceeds size limit of %s" msgstr "Image exceeds size limit of %s" -#: mod/photos.php:678 +#: mod/photos.php:648 msgid "Image upload didn't complete, please try again" msgstr "Image upload didn't complete. Please try again." -#: mod/photos.php:681 +#: mod/photos.php:651 msgid "Image file is missing" msgstr "Image file is missing" -#: mod/photos.php:686 +#: mod/photos.php:656 msgid "" "Server can't accept new file upload at this time, please contact your " "administrator" msgstr "Server can't accept new file uploads at this time. Please contact your administrator." -#: mod/photos.php:710 +#: mod/photos.php:680 msgid "Image file is empty." msgstr "Image file is empty." -#: mod/photos.php:725 mod/wall_upload.php:175 -#: src/Module/Settings/Profile/Photo/Index.php:70 +#: mod/photos.php:695 mod/wall_upload.php:166 +#: src/Module/Settings/Profile/Photo/Index.php:69 msgid "Unable to process image." msgstr "Unable to process image." -#: mod/photos.php:754 mod/wall_upload.php:241 -#: src/Module/Settings/Profile/Photo/Index.php:97 +#: mod/photos.php:724 mod/wall_upload.php:232 +#: src/Module/Settings/Profile/Photo/Index.php:96 msgid "Image upload failed." msgstr "Image upload failed." -#: mod/photos.php:841 +#: mod/photos.php:816 msgid "No photos selected" msgstr "No photos selected" -#: mod/photos.php:907 mod/videos.php:182 +#: mod/photos.php:885 msgid "Access to this item is restricted." msgstr "Access to this item is restricted." -#: mod/photos.php:961 +#: mod/photos.php:940 msgid "Upload Photos" msgstr "Upload photos" -#: mod/photos.php:965 mod/photos.php:1050 +#: mod/photos.php:944 mod/photos.php:1030 msgid "New album name: " msgstr "New album name: " -#: mod/photos.php:966 +#: mod/photos.php:945 msgid "or select existing album:" msgstr "or select existing album:" -#: mod/photos.php:967 +#: mod/photos.php:946 msgid "Do not show a status post for this upload" msgstr "Do not show a status post for this upload" -#: mod/photos.php:1033 +#: mod/photos.php:1011 msgid "Do you really want to delete this photo album and all its photos?" msgstr "Do you really want to delete this photo album and all its photos?" -#: mod/photos.php:1034 mod/photos.php:1055 +#: mod/photos.php:1012 mod/photos.php:1035 msgid "Delete Album" msgstr "Delete album" -#: mod/photos.php:1061 +#: mod/photos.php:1039 msgid "Edit Album" msgstr "Edit album" -#: mod/photos.php:1062 +#: mod/photos.php:1040 msgid "Drop Album" msgstr "Drop album" -#: mod/photos.php:1067 +#: mod/photos.php:1044 msgid "Show Newest First" msgstr "Show newest first" -#: mod/photos.php:1069 +#: mod/photos.php:1046 msgid "Show Oldest First" msgstr "Show oldest first" -#: mod/photos.php:1090 mod/photos.php:1623 +#: mod/photos.php:1067 mod/photos.php:1578 msgid "View Photo" msgstr "View photo" -#: mod/photos.php:1127 +#: mod/photos.php:1100 msgid "Permission denied. Access to this item may be restricted." msgstr "Permission denied. Access to this item may be restricted." -#: mod/photos.php:1129 +#: mod/photos.php:1102 msgid "Photo not available" msgstr "Photo not available" -#: mod/photos.php:1139 +#: mod/photos.php:1112 msgid "Do you really want to delete this photo?" msgstr "Do you really want to delete this photo?" -#: mod/photos.php:1140 mod/photos.php:1340 +#: mod/photos.php:1113 mod/photos.php:1305 msgid "Delete Photo" msgstr "Delete photo" -#: mod/photos.php:1231 +#: mod/photos.php:1203 msgid "View photo" msgstr "View photo" -#: mod/photos.php:1233 +#: mod/photos.php:1205 msgid "Edit photo" msgstr "Edit photo" -#: mod/photos.php:1234 +#: mod/photos.php:1206 msgid "Delete photo" msgstr "Delete photo" -#: mod/photos.php:1235 +#: mod/photos.php:1207 msgid "Use as profile photo" msgstr "Use as profile photo" -#: mod/photos.php:1242 +#: mod/photos.php:1214 msgid "Private Photo" msgstr "Private photo" -#: mod/photos.php:1248 +#: mod/photos.php:1220 msgid "View Full Size" msgstr "View full size" -#: mod/photos.php:1308 +#: mod/photos.php:1273 msgid "Tags: " msgstr "Tags: " -#: mod/photos.php:1311 +#: mod/photos.php:1276 msgid "[Select tags to remove]" msgstr "[Select tags to remove]" -#: mod/photos.php:1326 +#: mod/photos.php:1291 msgid "New album name" msgstr "New album name" -#: mod/photos.php:1327 +#: mod/photos.php:1292 msgid "Caption" msgstr "Caption" -#: mod/photos.php:1328 +#: mod/photos.php:1293 msgid "Add a Tag" msgstr "Add Tag" -#: mod/photos.php:1328 +#: mod/photos.php:1293 msgid "" "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" msgstr "Example: @bob, @jojo@example.com, #California, #camping" -#: mod/photos.php:1329 +#: mod/photos.php:1294 msgid "Do not rotate" msgstr "Do not rotate" -#: mod/photos.php:1330 +#: mod/photos.php:1295 msgid "Rotate CW (right)" msgstr "Rotate right (CW)" -#: mod/photos.php:1331 +#: mod/photos.php:1296 msgid "Rotate CCW (left)" msgstr "Rotate left (CCW)" -#: mod/photos.php:1377 mod/photos.php:1434 mod/photos.php:1509 -#: src/Module/Contact.php:1096 src/Module/Item/Compose.php:142 -#: src/Object/Post.php:946 +#: mod/photos.php:1342 mod/photos.php:1398 mod/photos.php:1472 +#: src/Module/Contact.php:993 src/Module/Item/Compose.php:148 +#: src/Object/Post.php:960 msgid "This is you" msgstr "This is me" -#: mod/photos.php:1379 mod/photos.php:1436 mod/photos.php:1511 -#: src/Object/Post.php:486 src/Object/Post.php:948 +#: mod/photos.php:1344 mod/photos.php:1400 mod/photos.php:1474 +#: src/Object/Post.php:496 src/Object/Post.php:962 msgid "Comment" msgstr "Comment" -#: mod/photos.php:1533 -msgid "Like" -msgstr "" +#: mod/photos.php:1433 src/Content/Conversation.php:615 +#: src/Object/Post.php:227 +msgid "Select" +msgstr "Select" -#: mod/photos.php:1534 src/Object/Post.php:345 +#: mod/photos.php:1434 mod/settings.php:563 src/Content/Conversation.php:616 +#: src/Module/Admin/Users/Active.php:139 +#: src/Module/Admin/Users/Blocked.php:140 src/Module/Admin/Users/Index.php:153 +msgid "Delete" +msgstr "Delete" + +#: mod/photos.php:1495 src/Object/Post.php:349 +msgid "Like" +msgstr "Like" + +#: mod/photos.php:1496 src/Object/Post.php:349 msgid "I like this (toggle)" msgstr "I like this (toggle)" -#: mod/photos.php:1535 +#: mod/photos.php:1497 src/Object/Post.php:350 msgid "Dislike" msgstr "" -#: mod/photos.php:1537 src/Object/Post.php:346 +#: mod/photos.php:1499 src/Object/Post.php:350 msgid "I don't like this (toggle)" msgstr "I don't like this (toggle)" -#: mod/photos.php:1559 +#: mod/photos.php:1521 msgid "Map" msgstr "Map" -#: mod/photos.php:1629 mod/videos.php:259 +#: mod/photos.php:1584 msgid "View Album" msgstr "View album" -#: mod/ping.php:285 +#: mod/ping.php:275 msgid "{0} wants to be your friend" msgstr "{0} wants to be your friend" -#: mod/ping.php:302 +#: mod/ping.php:292 msgid "{0} requested registration" msgstr "{0} requested registration" -#: mod/ping.php:315 +#: mod/ping.php:305 #, php-format msgid "{0} and %d others requested registration" msgstr "" -#: mod/redir.php:50 mod/redir.php:130 +#: mod/redir.php:49 mod/redir.php:102 msgid "Bad Request." msgstr "Bad request." +#: mod/redir.php:55 mod/redir.php:129 src/Module/Contact/Advanced.php:54 +#: src/Module/Contact/Advanced.php:105 src/Module/Contact/Contacts.php:36 +#: src/Module/Contact/Media.php:43 src/Module/FriendSuggest.php:54 +#: src/Module/FriendSuggest.php:92 src/Module/Group.php:105 +msgid "Contact not found." +msgstr "Contact not found." + +#: mod/removeme.php:63 src/Navigation/Notifications/Repository/Notify.php:454 +msgid "[Friendica System Notify]" +msgstr "[Friendica System Notify]" + #: mod/removeme.php:63 msgid "User deleted their account" msgstr "User deleted their account" @@ -2066,202 +1157,164 @@ msgstr "Please enter your password for verification:" msgid "Resubscribing to OStatus contacts" msgstr "Resubscribing to OStatus contacts" -#: mod/repair_ostatus.php:50 src/Module/Debug/ActivityPubConversion.php:130 -#: src/Module/Debug/Babel.php:293 src/Module/Security/TwoFactor/Verify.php:96 +#: mod/repair_ostatus.php:46 src/Module/Debug/ActivityPubConversion.php:130 +#: src/Module/Debug/Babel.php:293 src/Module/Security/TwoFactor/Verify.php:97 msgid "Error" msgid_plural "Errors" msgstr[0] "Error" msgstr[1] "Errors" -#: mod/settings.php:90 -msgid "Missing some important data!" -msgstr "Missing some important data!" - -#: mod/settings.php:92 mod/settings.php:534 src/Module/Contact.php:882 -msgid "Update" -msgstr "Update" - -#: mod/settings.php:200 +#: mod/settings.php:128 msgid "Failed to connect with email account using the settings provided." msgstr "Failed to connect with email account using the settings provided." -#: mod/settings.php:229 +#: mod/settings.php:157 msgid "Contact CSV file upload error" msgstr "Contact CSV file upload error" -#: mod/settings.php:248 +#: mod/settings.php:176 msgid "Importing Contacts done" msgstr "Importing contacts done" -#: mod/settings.php:261 +#: mod/settings.php:189 msgid "Relocate message has been send to your contacts" msgstr "Relocate message has been sent to your contacts" -#: mod/settings.php:273 +#: mod/settings.php:201 msgid "Passwords do not match." msgstr "Passwords do not match." -#: mod/settings.php:281 src/Console/User.php:166 +#: mod/settings.php:209 src/Console/User.php:210 msgid "Password update failed. Please try again." msgstr "Password update failed. Please try again." -#: mod/settings.php:284 src/Console/User.php:169 +#: mod/settings.php:212 src/Console/User.php:213 msgid "Password changed." msgstr "Password changed." -#: mod/settings.php:287 +#: mod/settings.php:215 msgid "Password unchanged." msgstr "Password unchanged." -#: mod/settings.php:372 +#: mod/settings.php:303 msgid "Please use a shorter name." msgstr "" -#: mod/settings.php:375 +#: mod/settings.php:306 msgid "Name too short." msgstr "" -#: mod/settings.php:382 +#: mod/settings.php:313 msgid "Wrong Password." msgstr "Wrong password." -#: mod/settings.php:387 +#: mod/settings.php:318 msgid "Invalid email." msgstr "Invalid email." -#: mod/settings.php:393 +#: mod/settings.php:324 msgid "Cannot change to that email." msgstr "Cannot change to that email." -#: mod/settings.php:431 +#: mod/settings.php:365 msgid "Private forum has no privacy permissions. Using default privacy group." msgstr "Private forum has no privacy permissions. Using default privacy group." -#: mod/settings.php:434 +#: mod/settings.php:368 msgid "Private forum has no privacy permissions and no default privacy group." msgstr "Private forum has no privacy permissions and no default privacy group." -#: mod/settings.php:451 +#: mod/settings.php:387 msgid "Settings were not updated." msgstr "" -#: mod/settings.php:507 mod/settings.php:533 mod/settings.php:567 -msgid "Add application" -msgstr "Add application" +#: mod/settings.php:428 +msgid "Connected Apps" +msgstr "Connected Apps" -#: mod/settings.php:508 mod/settings.php:615 mod/settings.php:713 -#: mod/settings.php:848 src/Module/Admin/Addons/Index.php:69 -#: src/Module/Admin/Features.php:87 src/Module/Admin/Logs/Settings.php:82 -#: src/Module/Admin/Site.php:582 src/Module/Admin/Themes/Index.php:113 -#: src/Module/Admin/Tos.php:66 src/Module/Settings/Delegation.php:170 -#: src/Module/Settings/Display.php:189 -msgid "Save Settings" -msgstr "Save settings" - -#: mod/settings.php:510 mod/settings.php:536 -#: src/Module/Admin/Blocklist/Contact.php:90 +#: mod/settings.php:429 src/Module/Admin/Blocklist/Contact.php:106 #: src/Module/Admin/Users/Active.php:129 #: src/Module/Admin/Users/Blocked.php:130 src/Module/Admin/Users/Create.php:71 #: src/Module/Admin/Users/Deleted.php:88 src/Module/Admin/Users/Index.php:142 #: src/Module/Admin/Users/Index.php:162 src/Module/Admin/Users/Pending.php:104 -#: src/Module/Contact/Advanced.php:134 +#: src/Module/Contact/Advanced.php:135 msgid "Name" msgstr "Name:" -#: mod/settings.php:511 mod/settings.php:537 -msgid "Consumer Key" -msgstr "Consumer key" +#: mod/settings.php:430 src/Content/Nav.php:212 +msgid "Home Page" +msgstr "Home page" -#: mod/settings.php:512 mod/settings.php:538 -msgid "Consumer Secret" -msgstr "Consumer secret" +#: mod/settings.php:431 src/Module/Admin/Queue.php:78 +msgid "Created" +msgstr "Created" -#: mod/settings.php:513 mod/settings.php:539 -msgid "Redirect" -msgstr "Redirect" - -#: mod/settings.php:514 mod/settings.php:540 -msgid "Icon url" -msgstr "Icon URL" - -#: mod/settings.php:525 -msgid "You can't edit this application." -msgstr "You cannot edit this application." - -#: mod/settings.php:566 -msgid "Connected Apps" -msgstr "Connected Apps" - -#: mod/settings.php:568 src/Object/Post.php:192 src/Object/Post.php:194 -msgid "Edit" -msgstr "Edit" - -#: mod/settings.php:570 -msgid "Client key starts with" -msgstr "Client key starts with" - -#: mod/settings.php:571 -msgid "No name" -msgstr "No name" - -#: mod/settings.php:572 +#: mod/settings.php:432 msgid "Remove authorization" msgstr "Remove authorization" -#: mod/settings.php:583 -msgid "No Addon settings configured" -msgstr "No addon settings configured" - -#: mod/settings.php:592 +#: mod/settings.php:450 msgid "Addon Settings" msgstr "Addon Settings" -#: mod/settings.php:613 +#: mod/settings.php:451 +msgid "No Addon settings configured" +msgstr "No addon settings configured" + +#: mod/settings.php:472 msgid "Additional Features" msgstr "Additional Features" -#: mod/settings.php:638 +#: mod/settings.php:474 mod/settings.php:565 mod/settings.php:702 +#: src/Module/Admin/Addons/Index.php:69 src/Module/Admin/Features.php:87 +#: src/Module/Admin/Logs/Settings.php:82 src/Module/Admin/Site.php:502 +#: src/Module/Admin/Themes/Index.php:113 src/Module/Admin/Tos.php:66 +#: src/Module/Settings/Delegation.php:170 src/Module/Settings/Display.php:194 +msgid "Save Settings" +msgstr "Save settings" + +#: mod/settings.php:496 msgid "Diaspora (Socialhome, Hubzilla)" msgstr "diaspora* (Socialhome, Hubzilla)" -#: mod/settings.php:638 mod/settings.php:639 +#: mod/settings.php:496 mod/settings.php:497 msgid "enabled" msgstr "enabled" -#: mod/settings.php:638 mod/settings.php:639 +#: mod/settings.php:496 mod/settings.php:497 msgid "disabled" msgstr "disabled" -#: mod/settings.php:638 mod/settings.php:639 +#: mod/settings.php:496 mod/settings.php:497 #, php-format msgid "Built-in support for %s connectivity is %s" msgstr "Built-in support for %s connectivity is %s" -#: mod/settings.php:639 +#: mod/settings.php:497 msgid "OStatus (GNU Social)" msgstr "" -#: mod/settings.php:670 +#: mod/settings.php:523 msgid "Email access is disabled on this site." msgstr "Email access is disabled on this site." -#: mod/settings.php:675 mod/settings.php:711 +#: mod/settings.php:528 mod/settings.php:563 msgid "None" msgstr "None" -#: mod/settings.php:681 src/Module/BaseSettings.php:80 +#: mod/settings.php:534 src/Module/BaseSettings.php:80 msgid "Social Networks" msgstr "Social networks" -#: mod/settings.php:686 +#: mod/settings.php:539 msgid "General Social Media Settings" msgstr "General Social Media Settings" -#: mod/settings.php:687 +#: mod/settings.php:540 msgid "Accept only top level posts by contacts you follow" msgstr "Accept only top-level posts by contacts you follow" -#: mod/settings.php:687 +#: mod/settings.php:540 msgid "" "The system does an auto completion of threads when a comment arrives. This " "has got the side effect that you can receive posts that had been started by " @@ -2270,239 +1323,235 @@ msgid "" "posts from people you really do follow." msgstr "The system automatically completes threads when a comment arrives. This has a side effect that you may receive posts started by someone you don't follow, because one of your followers commented there. This setting will deactivate this behavior. If activated, you will only receive posts from people you really do follow." -#: mod/settings.php:688 -msgid "Disable Content Warning" -msgstr "Disable content warning" +#: mod/settings.php:541 +msgid "Enable Content Warning" +msgstr "" -#: mod/settings.php:688 +#: mod/settings.php:541 msgid "" "Users on networks like Mastodon or Pleroma are able to set a content warning" -" field which collapse their post by default. This disables the automatic " -"collapsing and sets the content warning as the post title. Doesn't affect " -"any other content filtering you eventually set up." -msgstr "Users on networks like Mastodon or Pleroma are able to set a content warning field which collapses their post by default. This disables the automatic collapsing and sets the content warning as the post title. It doesn't affect any other content filtering you may set up." +" field which collapse their post by default. This enables the automatic " +"collapsing instead of setting the content warning as the post title. Doesn't" +" affect any other content filtering you eventually set up." +msgstr "" -#: mod/settings.php:689 -msgid "Disable intelligent shortening" -msgstr "Disable intelligent shortening" +#: mod/settings.php:542 +msgid "Enable intelligent shortening" +msgstr "" -#: mod/settings.php:689 +#: mod/settings.php:542 msgid "" "Normally the system tries to find the best link to add to shortened posts. " -"If this option is enabled then every shortened post will always point to the" -" original friendica post." -msgstr "Normally the system tries to find the best link to add to shortened posts. If this option is enabled then every shortened post will always point to the original Friendica post." +"If disabled, every shortened post will always point to the original " +"friendica post." +msgstr "" -#: mod/settings.php:690 +#: mod/settings.php:543 +msgid "Enable simple text shortening" +msgstr "" + +#: mod/settings.php:543 +msgid "" +"Normally the system shortens posts at the next line feed. If this option is " +"enabled then the system will shorten the text at the maximum character " +"limit." +msgstr "" + +#: mod/settings.php:544 msgid "Attach the link title" msgstr "Attach the link title" -#: mod/settings.php:690 +#: mod/settings.php:544 msgid "" "When activated, the title of the attached link will be added as a title on " "posts to Diaspora. This is mostly helpful with \"remote-self\" contacts that" " share feed content." msgstr "If activated, the title of the attached link will be added as a title on posts to Diaspora. This is mostly helpful with \"remote-self\" contacts that share feed content." -#: mod/settings.php:691 -msgid "Automatically follow any GNU Social (OStatus) followers/mentioners" -msgstr "Automatically follow any GNU Social (OStatus) followers/mentioners" +#: mod/settings.php:545 +msgid "Your legacy ActivityPub/GNU Social account" +msgstr "" -#: mod/settings.php:691 +#: mod/settings.php:545 msgid "" -"If you receive a message from an unknown OStatus user, this option decides " -"what to do. If it is checked, a new contact will be created for every " -"unknown user." -msgstr "Create a new contact for every unknown OStatus user from whom you receive a message." +"If you enter your old account name from an ActivityPub based system or your " +"GNU Social/Statusnet account name here (in the format user@domain.tld), your" +" contacts will be added automatically. The field will be emptied when done." +msgstr "" -#: mod/settings.php:692 -msgid "Default group for OStatus contacts" -msgstr "Default group for OStatus contacts" - -#: mod/settings.php:693 -msgid "Your legacy GNU Social account" -msgstr "Your legacy GNU Social account" - -#: mod/settings.php:693 -msgid "" -"If you enter your old GNU Social/Statusnet account name here (in the format " -"user@domain.tld), your contacts will be added automatically. The field will " -"be emptied when done." -msgstr "Entering your old GNU Social/Statusnet account name here (format: user@domain.tld), will automatically added your contacts. The field will be emptied when done." - -#: mod/settings.php:696 +#: mod/settings.php:548 msgid "Repair OStatus subscriptions" msgstr "Repair OStatus subscriptions" -#: mod/settings.php:700 +#: mod/settings.php:552 msgid "Email/Mailbox Setup" msgstr "Email/Mailbox setup" -#: mod/settings.php:701 +#: mod/settings.php:553 msgid "" "If you wish to communicate with email contacts using this service " "(optional), please specify how to connect to your mailbox." msgstr "Specify how to connect to your mailbox, if you wish to communicate with existing email contacts." -#: mod/settings.php:702 +#: mod/settings.php:554 msgid "Last successful email check:" msgstr "Last successful email check:" -#: mod/settings.php:704 +#: mod/settings.php:556 msgid "IMAP server name:" msgstr "IMAP server name:" -#: mod/settings.php:705 +#: mod/settings.php:557 msgid "IMAP port:" msgstr "IMAP port:" -#: mod/settings.php:706 +#: mod/settings.php:558 msgid "Security:" msgstr "Security:" -#: mod/settings.php:707 +#: mod/settings.php:559 msgid "Email login name:" msgstr "Email login name:" -#: mod/settings.php:708 +#: mod/settings.php:560 msgid "Email password:" msgstr "Email password:" -#: mod/settings.php:709 +#: mod/settings.php:561 msgid "Reply-to address:" msgstr "Reply-to address:" -#: mod/settings.php:710 +#: mod/settings.php:562 msgid "Send public posts to all email contacts:" msgstr "Send public posts to all email contacts:" -#: mod/settings.php:711 +#: mod/settings.php:563 msgid "Action after import:" msgstr "Action after import:" -#: mod/settings.php:711 src/Content/Nav.php:270 +#: mod/settings.php:563 src/Content/Nav.php:280 msgid "Mark as seen" msgstr "Mark as seen" -#: mod/settings.php:711 +#: mod/settings.php:563 msgid "Move to folder" msgstr "Move to folder" -#: mod/settings.php:712 +#: mod/settings.php:564 msgid "Move to folder:" msgstr "Move to folder:" -#: mod/settings.php:726 +#: mod/settings.php:578 msgid "Unable to find your profile. Please contact your admin." msgstr "Unable to find your profile. Please contact your admin." -#: mod/settings.php:762 src/Content/Widget.php:536 +#: mod/settings.php:616 src/Content/Widget.php:526 msgid "Account Types" msgstr "Account types" -#: mod/settings.php:763 +#: mod/settings.php:617 msgid "Personal Page Subtypes" msgstr "Personal Page subtypes" -#: mod/settings.php:764 +#: mod/settings.php:618 msgid "Community Forum Subtypes" msgstr "Community forum subtypes" -#: mod/settings.php:771 src/Module/Admin/BaseUsers.php:106 +#: mod/settings.php:625 src/Module/Admin/BaseUsers.php:106 msgid "Personal Page" msgstr "Personal Page" -#: mod/settings.php:772 +#: mod/settings.php:626 msgid "Account for a personal profile." msgstr "Account for a personal profile." -#: mod/settings.php:775 src/Module/Admin/BaseUsers.php:107 +#: mod/settings.php:629 src/Module/Admin/BaseUsers.php:107 msgid "Organisation Page" msgstr "Organization Page" -#: mod/settings.php:776 +#: mod/settings.php:630 msgid "" "Account for an organisation that automatically approves contact requests as " "\"Followers\"." msgstr "Account for an organization that automatically approves contact requests as \"Followers\"." -#: mod/settings.php:779 src/Module/Admin/BaseUsers.php:108 +#: mod/settings.php:633 src/Module/Admin/BaseUsers.php:108 msgid "News Page" msgstr "News Page" -#: mod/settings.php:780 +#: mod/settings.php:634 msgid "" "Account for a news reflector that automatically approves contact requests as" " \"Followers\"." msgstr "Account for a news reflector that automatically approves contact requests as \"Followers\"." -#: mod/settings.php:783 src/Module/Admin/BaseUsers.php:109 +#: mod/settings.php:637 src/Module/Admin/BaseUsers.php:109 msgid "Community Forum" msgstr "Community Forum" -#: mod/settings.php:784 +#: mod/settings.php:638 msgid "Account for community discussions." msgstr "Account for community discussions." -#: mod/settings.php:787 src/Module/Admin/BaseUsers.php:99 +#: mod/settings.php:641 src/Module/Admin/BaseUsers.php:99 msgid "Normal Account Page" msgstr "Standard" -#: mod/settings.php:788 +#: mod/settings.php:642 msgid "" "Account for a regular personal profile that requires manual approval of " "\"Friends\" and \"Followers\"." msgstr "Account for a regular personal profile that requires manual approval of \"Friends\" and \"Followers\"." -#: mod/settings.php:791 src/Module/Admin/BaseUsers.php:100 +#: mod/settings.php:645 src/Module/Admin/BaseUsers.php:100 msgid "Soapbox Page" msgstr "Soapbox" -#: mod/settings.php:792 +#: mod/settings.php:646 msgid "" "Account for a public profile that automatically approves contact requests as" " \"Followers\"." msgstr "Account for a public profile that automatically approves contact requests as \"Followers\"." -#: mod/settings.php:795 src/Module/Admin/BaseUsers.php:101 +#: mod/settings.php:649 src/Module/Admin/BaseUsers.php:101 msgid "Public Forum" msgstr "Public forum" -#: mod/settings.php:796 +#: mod/settings.php:650 msgid "Automatically approves all contact requests." msgstr "Automatically approves all contact requests." -#: mod/settings.php:799 src/Module/Admin/BaseUsers.php:102 +#: mod/settings.php:653 src/Module/Admin/BaseUsers.php:102 msgid "Automatic Friend Page" msgstr "Love-all" -#: mod/settings.php:800 +#: mod/settings.php:654 msgid "" "Account for a popular profile that automatically approves contact requests " "as \"Friends\"." msgstr "Account for a popular profile that automatically approves contact requests as \"Friends\"." -#: mod/settings.php:803 +#: mod/settings.php:657 msgid "Private Forum [Experimental]" msgstr "Private forum [Experimental]" -#: mod/settings.php:804 +#: mod/settings.php:658 msgid "Requires manual approval of contact requests." msgstr "Requires manual approval of contact requests." -#: mod/settings.php:815 +#: mod/settings.php:669 msgid "OpenID:" msgstr "OpenID:" -#: mod/settings.php:815 +#: mod/settings.php:669 msgid "(Optional) Allow this OpenID to login to this account." msgstr "(Optional) Allow this OpenID to login to this account." -#: mod/settings.php:823 +#: mod/settings.php:677 msgid "Publish your profile in your local site directory?" msgstr "" -#: mod/settings.php:823 +#: mod/settings.php:677 #, php-format msgid "" "Your profile will be published in this node's local " @@ -2510,115 +1559,115 @@ msgid "" " system settings." msgstr "Your profile will be published in this node's local directory. Your profile details may be publicly visible depending on the system settings." -#: mod/settings.php:829 +#: mod/settings.php:683 #, php-format msgid "" "Your profile will also be published in the global friendica directories " "(e.g. %s)." msgstr "" -#: mod/settings.php:835 +#: mod/settings.php:689 #, php-format msgid "Your Identity Address is '%s' or '%s'." msgstr "My identity address: '%s' or '%s'" -#: mod/settings.php:846 +#: mod/settings.php:700 msgid "Account Settings" msgstr "Account Settings" -#: mod/settings.php:854 +#: mod/settings.php:708 msgid "Password Settings" msgstr "Password change" -#: mod/settings.php:855 src/Module/Register.php:149 +#: mod/settings.php:709 src/Module/Register.php:151 msgid "New Password:" msgstr "New password:" -#: mod/settings.php:855 +#: mod/settings.php:709 msgid "" "Allowed characters are a-z, A-Z, 0-9 and special characters except white " "spaces, accentuated letters and colon (:)." msgstr "Allowed characters are a-z, A-Z, 0-9 and special characters except white spaces, accentuated letters and colon (:)." -#: mod/settings.php:856 src/Module/Register.php:150 +#: mod/settings.php:710 src/Module/Register.php:152 msgid "Confirm:" msgstr "Confirm new password:" -#: mod/settings.php:856 +#: mod/settings.php:710 msgid "Leave password fields blank unless changing" msgstr "Leave password fields blank unless changing" -#: mod/settings.php:857 +#: mod/settings.php:711 msgid "Current Password:" msgstr "Current password:" -#: mod/settings.php:857 +#: mod/settings.php:711 msgid "Your current password to confirm the changes" msgstr "Current password to confirm change" -#: mod/settings.php:858 +#: mod/settings.php:712 msgid "Password:" msgstr "Password:" -#: mod/settings.php:858 +#: mod/settings.php:712 msgid "Your current password to confirm the changes of the email address" msgstr "Your current password to confirm the change of your email address." -#: mod/settings.php:861 +#: mod/settings.php:715 msgid "Delete OpenID URL" msgstr "Delete OpenID URL" -#: mod/settings.php:863 +#: mod/settings.php:717 msgid "Basic Settings" msgstr "Basic information" -#: mod/settings.php:864 src/Module/Profile/Profile.php:144 +#: mod/settings.php:718 src/Module/Profile/Profile.php:144 msgid "Full Name:" msgstr "Full name:" -#: mod/settings.php:865 +#: mod/settings.php:719 msgid "Email Address:" msgstr "Email address:" -#: mod/settings.php:866 +#: mod/settings.php:720 msgid "Your Timezone:" msgstr "Time zone:" -#: mod/settings.php:867 +#: mod/settings.php:721 msgid "Your Language:" msgstr "Language:" -#: mod/settings.php:867 +#: mod/settings.php:721 msgid "" "Set the language we use to show you friendica interface and to send you " "emails" msgstr "Set the language of your Friendica interface and emails sent to you." -#: mod/settings.php:868 +#: mod/settings.php:722 msgid "Default Post Location:" msgstr "Posting location:" -#: mod/settings.php:869 +#: mod/settings.php:723 msgid "Use Browser Location:" msgstr "Use browser location:" -#: mod/settings.php:871 +#: mod/settings.php:725 msgid "Security and Privacy Settings" msgstr "Security and privacy" -#: mod/settings.php:873 +#: mod/settings.php:727 msgid "Maximum Friend Requests/Day:" msgstr "Maximum friend requests per day:" -#: mod/settings.php:873 mod/settings.php:883 +#: mod/settings.php:727 mod/settings.php:737 msgid "(to prevent spam abuse)" msgstr "May prevent spam and abusive registrations" -#: mod/settings.php:875 +#: mod/settings.php:729 msgid "Allow your profile to be searchable globally?" msgstr "" -#: mod/settings.php:875 +#: mod/settings.php:729 msgid "" "Activate this setting if you want others to easily find and follow you. Your" " profile will be searchable on remote systems. This setting also determines " @@ -2626,43 +1675,43 @@ msgid "" "indexed or not." msgstr "" -#: mod/settings.php:876 +#: mod/settings.php:730 msgid "Hide your contact/friend list from viewers of your profile?" msgstr "" -#: mod/settings.php:876 +#: mod/settings.php:730 msgid "" "A list of your contacts is displayed on your profile page. Activate this " "option to disable the display of your contact list." msgstr "" -#: mod/settings.php:877 +#: mod/settings.php:731 msgid "Hide your profile details from anonymous viewers?" msgstr "Hide your profile details from anonymous viewers?" -#: mod/settings.php:877 +#: mod/settings.php:731 msgid "" "Anonymous visitors will only see your profile picture, your display name and" " the nickname you are using on your profile page. Your public posts and " "replies will still be accessible by other means." msgstr "Anonymous visitors will only see your profile picture, your display name and the nickname you are using on your profile page. Your public posts and replies may still be accessible by other means." -#: mod/settings.php:878 +#: mod/settings.php:732 msgid "Make public posts unlisted" msgstr "" -#: mod/settings.php:878 +#: mod/settings.php:732 msgid "" "Your public posts will not appear on the community pages or in search " "results, nor be sent to relay servers. However they can still appear on " "public feeds on remote servers." msgstr "" -#: mod/settings.php:879 +#: mod/settings.php:733 msgid "Make all posted pictures accessible" msgstr "" -#: mod/settings.php:879 +#: mod/settings.php:733 msgid "" "This option makes every posted picture accessible via the direct link. This " "is a workaround for the problem that most other networks can't handle " @@ -2670,209 +1719,221 @@ msgid "" "public on your photo albums though." msgstr "" -#: mod/settings.php:880 +#: mod/settings.php:734 msgid "Allow friends to post to your profile page?" msgstr "Allow friends to post to my wall?" -#: mod/settings.php:880 +#: mod/settings.php:734 msgid "" "Your contacts may write posts on your profile wall. These posts will be " "distributed to your contacts" msgstr "Your contacts may write posts on your profile wall. These posts will be distributed to your contacts" -#: mod/settings.php:881 +#: mod/settings.php:735 msgid "Allow friends to tag your posts?" msgstr "Allow friends to tag my post?" -#: mod/settings.php:881 +#: mod/settings.php:735 msgid "Your contacts can add additional tags to your posts." msgstr "Your contacts can add additional tags to your posts." -#: mod/settings.php:882 +#: mod/settings.php:736 msgid "Permit unknown people to send you private mail?" msgstr "Allow unknown people to send me private messages?" -#: mod/settings.php:882 +#: mod/settings.php:736 msgid "" "Friendica network users may send you private messages even if they are not " "in your contact list." msgstr "Friendica network users may send you private messages even if they are not in your contact list." -#: mod/settings.php:883 +#: mod/settings.php:737 msgid "Maximum private messages per day from unknown people:" msgstr "Maximum private messages per day from unknown people:" -#: mod/settings.php:885 +#: mod/settings.php:739 msgid "Default Post Permissions" msgstr "Default post permissions" -#: mod/settings.php:889 +#: mod/settings.php:743 msgid "Expiration settings" msgstr "" -#: mod/settings.php:890 +#: mod/settings.php:744 msgid "Automatically expire posts after this many days:" msgstr "Automatically expire posts after this many days:" -#: mod/settings.php:890 +#: mod/settings.php:744 msgid "If empty, posts will not expire. Expired posts will be deleted" msgstr "Posts will not expire if empty; expired posts will be deleted" -#: mod/settings.php:891 +#: mod/settings.php:745 msgid "Expire posts" msgstr "" -#: mod/settings.php:891 +#: mod/settings.php:745 msgid "When activated, posts and comments will be expired." msgstr "If activated, posts and comments will expire." -#: mod/settings.php:892 +#: mod/settings.php:746 msgid "Expire personal notes" -msgstr "" +msgstr "Expire personal notes" -#: mod/settings.php:892 +#: mod/settings.php:746 msgid "" "When activated, the personal notes on your profile page will be expired." msgstr "If activated, the personal notes on your profile page will expire." -#: mod/settings.php:893 +#: mod/settings.php:747 msgid "Expire starred posts" msgstr "" -#: mod/settings.php:893 +#: mod/settings.php:747 msgid "" "Starring posts keeps them from being expired. That behaviour is overwritten " "by this setting." msgstr "" -#: mod/settings.php:894 +#: mod/settings.php:748 msgid "Expire photos" msgstr "" -#: mod/settings.php:894 +#: mod/settings.php:748 msgid "When activated, photos will be expired." msgstr "If activated, photos will expire." -#: mod/settings.php:895 +#: mod/settings.php:749 msgid "Only expire posts by others" msgstr "" -#: mod/settings.php:895 +#: mod/settings.php:749 msgid "" "When activated, your own posts never expire. Then the settings above are " "only valid for posts you received." msgstr "If activated, your own posts never expire. The settings above are only valid for posts you received." -#: mod/settings.php:898 +#: mod/settings.php:752 msgid "Notification Settings" msgstr "Notification" -#: mod/settings.php:899 +#: mod/settings.php:753 msgid "Send a notification email when:" msgstr "Send notification email when:" -#: mod/settings.php:900 +#: mod/settings.php:754 msgid "You receive an introduction" msgstr "Receiving an introduction" -#: mod/settings.php:901 +#: mod/settings.php:755 msgid "Your introductions are confirmed" msgstr "My introductions are confirmed" -#: mod/settings.php:902 +#: mod/settings.php:756 msgid "Someone writes on your profile wall" msgstr "Someone writes on my wall" -#: mod/settings.php:903 +#: mod/settings.php:757 msgid "Someone writes a followup comment" msgstr "A follow up comment is posted" -#: mod/settings.php:904 +#: mod/settings.php:758 msgid "You receive a private message" msgstr "receiving a private message" -#: mod/settings.php:905 +#: mod/settings.php:759 msgid "You receive a friend suggestion" msgstr "Receiving a friend suggestion" -#: mod/settings.php:906 +#: mod/settings.php:760 msgid "You are tagged in a post" msgstr "Tagged in a post" -#: mod/settings.php:907 +#: mod/settings.php:761 msgid "You are poked/prodded/etc. in a post" msgstr "Poked in a post" -#: mod/settings.php:909 +#: mod/settings.php:763 +msgid "Create a desktop notification when:" +msgstr "" + +#: mod/settings.php:764 +msgid "Someone liked your content" +msgstr "" + +#: mod/settings.php:765 +msgid "Someone shared your content" +msgstr "" + +#: mod/settings.php:767 msgid "Activate desktop notifications" msgstr "Activate desktop notifications" -#: mod/settings.php:909 +#: mod/settings.php:767 msgid "Show desktop popup on new notifications" msgstr "Show desktop pop-up on new notifications" -#: mod/settings.php:911 +#: mod/settings.php:769 msgid "Text-only notification emails" msgstr "Text-only notification emails" -#: mod/settings.php:913 +#: mod/settings.php:771 msgid "Send text only notification emails, without the html part" msgstr "Receive text only emails without HTML " -#: mod/settings.php:915 +#: mod/settings.php:773 msgid "Show detailled notifications" msgstr "Show detailled notifications" -#: mod/settings.php:917 +#: mod/settings.php:775 msgid "" "Per default, notifications are condensed to a single notification per item. " "When enabled every notification is displayed." msgstr "By default, notifications are condensed into a single notification for each item. If enabled, every notification is displayed." -#: mod/settings.php:919 +#: mod/settings.php:777 msgid "Show notifications of ignored contacts" msgstr "" -#: mod/settings.php:921 +#: mod/settings.php:779 msgid "" "You don't see posts from ignored contacts. But you still see their comments." " This setting controls if you want to still receive regular notifications " "that are caused by ignored contacts or not." msgstr "" -#: mod/settings.php:923 +#: mod/settings.php:781 msgid "Advanced Account/Page Type Settings" msgstr "Advanced account types" -#: mod/settings.php:924 +#: mod/settings.php:782 msgid "Change the behaviour of this account for special situations" msgstr "Change behavior of this account for special situations" -#: mod/settings.php:927 +#: mod/settings.php:785 msgid "Import Contacts" msgstr "Import contacts" -#: mod/settings.php:928 +#: mod/settings.php:786 msgid "" "Upload a CSV file that contains the handle of your followed accounts in the " "first column you exported from the old account." msgstr "Upload a CSV file that contains the handle of your followed accounts in the first column you exported from the old account." -#: mod/settings.php:929 +#: mod/settings.php:787 msgid "Upload File" msgstr "Upload file" -#: mod/settings.php:931 +#: mod/settings.php:789 msgid "Relocate" msgstr "Recent relocation" -#: mod/settings.php:932 +#: mod/settings.php:790 msgid "" "If you have moved this profile from another server, and some of your " "contacts don't receive your updates, try pushing this button." msgstr "If you have moved this profile from another server and some of your contacts don't receive your updates:" -#: mod/settings.php:933 +#: mod/settings.php:791 msgid "Resend relocate message to contacts" msgstr "Resend relocation message to contacts" @@ -2886,140 +1947,155 @@ msgstr "No suggestions available. If this is a new site, please try again in 24 msgid "Friend Suggestions" msgstr "Friend suggestions" -#: mod/tagrm.php:113 +#: mod/tagger.php:79 src/Content/Item.php:346 src/Model/Item.php:2626 +msgid "photo" +msgstr "photo" + +#: mod/tagger.php:79 src/Content/Item.php:341 src/Content/Item.php:350 +msgid "status" +msgstr "status" + +#: mod/tagger.php:112 src/Content/Item.php:360 +#, php-format +msgid "%1$s tagged %2$s's %3$s with %4$s" +msgstr "%1$s tagged %2$s's %3$s with %4$s" + +#: mod/tagrm.php:115 msgid "Remove Item Tag" msgstr "Remove Item tag" -#: mod/tagrm.php:115 +#: mod/tagrm.php:117 msgid "Select a tag to remove: " msgstr "Select a tag to remove: " -#: mod/tagrm.php:126 src/Module/Settings/Delegation.php:179 +#: mod/tagrm.php:128 src/Module/Settings/Delegation.php:179 #: src/Module/Settings/TwoFactor/Trusted.php:104 msgid "Remove" msgstr "Remove" -#: mod/uimport.php:45 +#: mod/uimport.php:46 msgid "User imports on closed servers can only be done by an administrator." msgstr "User imports on closed servers can only be done by an administrator." -#: mod/uimport.php:54 src/Module/Register.php:84 +#: mod/uimport.php:55 src/Module/Register.php:86 msgid "" "This site has exceeded the number of allowed daily account registrations. " "Please try again tomorrow." msgstr "This site has exceeded the number of allowed daily account registrations. Please try again tomorrow." -#: mod/uimport.php:61 src/Module/Register.php:160 +#: mod/uimport.php:62 src/Module/Register.php:162 msgid "Import" msgstr "Import profile" -#: mod/uimport.php:63 +#: mod/uimport.php:64 msgid "Move account" msgstr "Move Existing Friendica Account" -#: mod/uimport.php:64 +#: mod/uimport.php:65 msgid "You can import an account from another Friendica server." msgstr "You can import an existing Friendica profile to this node." -#: mod/uimport.php:65 +#: mod/uimport.php:66 msgid "" "You need to export your account from the old server and upload it here. We " "will recreate your old account here with all your contacts. We will try also" " to inform your friends that you moved here." msgstr "You need to export your account from the old server and upload it here. We will recreate your old account here with all your contacts. We will try also to inform your friends that you moved here." -#: mod/uimport.php:66 +#: mod/uimport.php:67 msgid "" "This feature is experimental. We can't import contacts from the OStatus " "network (GNU Social/Statusnet) or from Diaspora" msgstr "This feature is experimental. We can't import contacts from the OStatus network (GNU Social/Statusnet) or from Diaspora." -#: mod/uimport.php:67 +#: mod/uimport.php:68 msgid "Account file" msgstr "Account file:" -#: mod/uimport.php:67 +#: mod/uimport.php:68 msgid "" "To export your account, go to \"Settings->Export your personal data\" and " "select \"Export account\"" msgstr "To export your account, go to \"Settings->Export personal data\" and select \"Export account\"" -#: mod/unfollow.php:65 mod/unfollow.php:133 +#: mod/unfollow.php:65 mod/unfollow.php:135 msgid "You aren't following this contact." msgstr "You aren't following this contact." -#: mod/unfollow.php:71 mod/unfollow.php:139 +#: mod/unfollow.php:71 msgid "Unfollowing is currently not supported by your network." msgstr "Unfollowing is currently not supported by your network." -#: mod/unfollow.php:95 +#: mod/unfollow.php:92 msgid "Disconnect/Unfollow" msgstr "Disconnect/Unfollow" -#: mod/videos.php:134 -msgid "No videos selected" -msgstr "No videos selected" +#: mod/unfollow.php:146 +msgid "" +"Unable to unfollow this contact, please retry in a few minutes or contact " +"your administrator." +msgstr "" -#: mod/videos.php:252 -msgid "View Video" -msgstr "View video" +#: mod/unfollow.php:148 +msgid "Contact was successfully unfollowed" +msgstr "" -#: mod/videos.php:267 -msgid "Recent Videos" -msgstr "Recent videos" +#: mod/unfollow.php:152 +msgid "Unable to unfollow this contact, please contact your administrator" +msgstr "" -#: mod/videos.php:269 -msgid "Upload New Videos" -msgstr "Upload new videos" - -#: mod/wall_attach.php:42 mod/wall_attach.php:49 mod/wall_attach.php:87 -#: mod/wall_upload.php:52 mod/wall_upload.php:63 mod/wall_upload.php:108 -#: mod/wall_upload.php:159 mod/wall_upload.php:162 +#: mod/wall_attach.php:39 mod/wall_attach.php:46 mod/wall_attach.php:77 +#: mod/wall_upload.php:52 mod/wall_upload.php:63 mod/wall_upload.php:99 +#: mod/wall_upload.php:150 mod/wall_upload.php:153 msgid "Invalid request." msgstr "Invalid request." -#: mod/wall_attach.php:105 +#: mod/wall_attach.php:95 msgid "Sorry, maybe your upload is bigger than the PHP configuration allows" msgstr "Sorry, maybe your upload is bigger than the PHP configuration allows" -#: mod/wall_attach.php:105 +#: mod/wall_attach.php:95 msgid "Or - did you try to upload an empty file?" msgstr "Or did you try to upload an empty file?" -#: mod/wall_attach.php:116 +#: mod/wall_attach.php:106 #, php-format msgid "File exceeds size limit of %s" msgstr "File exceeds size limit of %s" -#: mod/wall_attach.php:131 +#: mod/wall_attach.php:121 msgid "File upload failed." msgstr "File upload failed." -#: mod/wallmessage.php:68 mod/wallmessage.php:129 +#: mod/wall_upload.php:224 src/Model/Photo.php:987 +msgid "Wall Photos" +msgstr "Wall photos" + +#: mod/wallmessage.php:61 mod/wallmessage.php:115 #, php-format msgid "Number of daily wall messages for %s exceeded. Message failed." msgstr "Number of daily wall messages for %s exceeded. Message failed." -#: mod/wallmessage.php:79 +#: mod/wallmessage.php:72 msgid "Unable to check your home location." msgstr "Unable to check your home location." -#: mod/wallmessage.php:103 mod/wallmessage.php:112 +#: mod/wallmessage.php:96 mod/wallmessage.php:103 msgid "No recipient." msgstr "No recipient." -#: mod/wallmessage.php:143 +#: mod/wallmessage.php:129 #, php-format msgid "" "If you wish for %s to respond, please check that the privacy settings on " "your site allow private mail from unknown senders." msgstr "If you wish for %s to respond, please check that the privacy settings on your site allow private mail from unknown senders." -#: mod/wall_upload.php:233 -msgid "Wall Photos" -msgstr "Wall photos" +#: src/App.php:456 +msgid "No system theme config value set." +msgstr "No system theme configuration value set." -#: src/App/Module.php:241 +#: src/App/Module.php:240 msgid "You must be logged in to use addons. " msgstr "You must be logged in to use addons. " @@ -3037,55 +2113,63 @@ msgstr "" msgid "toggle mobile" msgstr "Toggle mobile" -#: src/App.php:311 -msgid "No system theme config value set." -msgstr "No system theme configuration value set." - -#: src/App/Router.php:234 +#: src/App/Router.php:241 #, php-format msgid "Method not allowed for this module. Allowed method(s): %s" msgstr "Method not allowed for this module. Allowed method(s): %s" -#: src/App/Router.php:236 src/Module/HTTPException/PageNotFound.php:32 +#: src/App/Router.php:243 src/Module/HTTPException/PageNotFound.php:32 msgid "Page not found." msgstr "Page not found" -#: src/BaseModule.php:150 +#: src/BaseModule.php:180 msgid "" "The form security token was not correct. This probably happened because the " "form has been opened for too long (>3 hours) before submitting it." msgstr "The form security token was incorrect. This probably happened because the form has not been submitted within 3 hours." -#: src/BaseModule.php:179 +#: src/BaseModule.php:207 msgid "All contacts" msgstr "All contacts" -#: src/BaseModule.php:184 src/Content/Widget.php:238 src/Core/ACL.php:183 -#: src/Module/Contact.php:852 src/Module/PermissionTooltip.php:77 -#: src/Module/PermissionTooltip.php:99 +#: src/BaseModule.php:212 src/Content/Widget.php:231 src/Core/ACL.php:193 +#: src/Module/Contact.php:756 src/Module/PermissionTooltip.php:79 +#: src/Module/PermissionTooltip.php:101 msgid "Followers" msgstr "Followers" -#: src/BaseModule.php:189 src/Content/Widget.php:239 -#: src/Module/Contact.php:853 +#: src/BaseModule.php:217 src/Content/Widget.php:232 +#: src/Module/Contact.php:757 msgid "Following" msgstr "Following" -#: src/BaseModule.php:194 src/Content/Widget.php:240 -#: src/Module/Contact.php:854 +#: src/BaseModule.php:222 src/Content/Widget.php:233 +#: src/Module/Contact.php:758 msgid "Mutual friends" msgstr "Mutual friends" -#: src/BaseModule.php:202 +#: src/BaseModule.php:230 msgid "Common" msgstr "" -#: src/Console/ArchiveContact.php:105 +#: src/Console/Addon.php:177 src/Console/Addon.php:202 +msgid "Addon not found" +msgstr "" + +#: src/Console/Addon.php:181 +msgid "Addon already enabled" +msgstr "" + +#: src/Console/Addon.php:206 +msgid "Addon already disabled" +msgstr "" + +#: src/Console/ArchiveContact.php:106 #, php-format msgid "Could not find any unarchived contact entry for this URL (%s)" msgstr "Could not find any unarchived contact entry for this URL (%s)" -#: src/Console/ArchiveContact.php:108 +#: src/Console/ArchiveContact.php:109 msgid "The contact entries have been archived" msgstr "The contact entries have been archived" @@ -3096,7 +2180,7 @@ msgid "Could not find any contact entry for this URL (%s)" msgstr "Could not find any contact entry for this URL (%s)" #: src/Console/GlobalCommunityBlock.php:101 -#: src/Module/Admin/Blocklist/Contact.php:47 +#: src/Module/Admin/Blocklist/Contact.php:66 msgid "The contact has been blocked from the node" msgstr "This contact has been blocked from the node" @@ -3121,44 +2205,55 @@ msgstr "Execute pending post updates." msgid "All pending post updates are done." msgstr "All pending post updates are done." -#: src/Console/User.php:158 -msgid "Enter new password: " -msgstr "Enter new password: " - -#: src/Console/User.php:193 -msgid "Enter user name: " -msgstr "" - -#: src/Console/User.php:201 src/Console/User.php:241 src/Console/User.php:274 -#: src/Console/User.php:300 +#: src/Console/User.php:158 src/Console/User.php:245 msgid "Enter user nickname: " msgstr "" -#: src/Console/User.php:209 +#: src/Console/User.php:202 +msgid "Enter new password: " +msgstr "Enter new password: " + +#: src/Console/User.php:237 +msgid "Enter user name: " +msgstr "" + +#: src/Console/User.php:253 msgid "Enter user email address: " msgstr "" -#: src/Console/User.php:217 +#: src/Console/User.php:261 msgid "Enter a language (optional): " msgstr "" -#: src/Console/User.php:255 +#: src/Console/User.php:286 msgid "User is not pending." msgstr "" -#: src/Console/User.php:313 +#: src/Console/User.php:318 msgid "User has already been marked for deletion." msgstr "" -#: src/Console/User.php:318 +#: src/Console/User.php:323 #, php-format msgid "Type \"yes\" to delete %s" msgstr "" -#: src/Console/User.php:320 +#: src/Console/User.php:325 msgid "Deletion aborted." msgstr "" +#: src/Console/User.php:450 +msgid "Enter category: " +msgstr "" + +#: src/Console/User.php:460 +msgid "Enter key: " +msgstr "" + +#: src/Console/User.php:494 +msgid "Enter value: " +msgstr "" + #: src/Content/BoundariesPager.php:116 src/Content/Pager.php:171 msgid "newer" msgstr "Later posts" @@ -3267,6 +2362,268 @@ msgstr "pnut" msgid "%s (via %s)" msgstr "" +#: src/Content/Conversation.php:207 +#, php-format +msgid "%s likes this." +msgstr "%s likes this." + +#: src/Content/Conversation.php:210 +#, php-format +msgid "%s doesn't like this." +msgstr "%s doesn't like this." + +#: src/Content/Conversation.php:213 +#, php-format +msgid "%s attends." +msgstr "%s attends." + +#: src/Content/Conversation.php:216 +#, php-format +msgid "%s doesn't attend." +msgstr "%s won't attend." + +#: src/Content/Conversation.php:219 +#, php-format +msgid "%s attends maybe." +msgstr "%s might attend." + +#: src/Content/Conversation.php:222 src/Content/Conversation.php:260 +#: src/Content/Conversation.php:848 +#, php-format +msgid "%s reshared this." +msgstr "%s reshared this." + +#: src/Content/Conversation.php:228 +msgid "and" +msgstr "and" + +#: src/Content/Conversation.php:231 +#, php-format +msgid "and %d other people" +msgstr "and %d other people" + +#: src/Content/Conversation.php:239 +#, php-format +msgid "%2$d people like this" +msgstr "%2$d people like this" + +#: src/Content/Conversation.php:240 +#, php-format +msgid "%s like this." +msgstr "%s like this." + +#: src/Content/Conversation.php:243 +#, php-format +msgid "%2$d people don't like this" +msgstr "%2$d people don't like this" + +#: src/Content/Conversation.php:244 +#, php-format +msgid "%s don't like this." +msgstr "%s don't like this." + +#: src/Content/Conversation.php:247 +#, php-format +msgid "%2$d people attend" +msgstr "%2$d people attend" + +#: src/Content/Conversation.php:248 +#, php-format +msgid "%s attend." +msgstr "%s attend." + +#: src/Content/Conversation.php:251 +#, php-format +msgid "%2$d people don't attend" +msgstr "%2$d people won't attend" + +#: src/Content/Conversation.php:252 +#, php-format +msgid "%s don't attend." +msgstr "%s won't attend." + +#: src/Content/Conversation.php:255 +#, php-format +msgid "%2$d people attend maybe" +msgstr "%2$d people might attend" + +#: src/Content/Conversation.php:256 +#, php-format +msgid "%s attend maybe." +msgstr "%s may be attending." + +#: src/Content/Conversation.php:259 +#, php-format +msgid "%2$d people reshared this" +msgstr "%2$d people reshared this" + +#: src/Content/Conversation.php:307 +msgid "Visible to everybody" +msgstr "Visible to everybody" + +#: src/Content/Conversation.php:308 src/Module/Item/Compose.php:159 +#: src/Object/Post.php:973 +msgid "Please enter a image/video/audio/webpage URL:" +msgstr "Please enter an image/video/audio/webpage URL:" + +#: src/Content/Conversation.php:309 +msgid "Tag term:" +msgstr "Tag term:" + +#: src/Content/Conversation.php:310 src/Module/Filer/SaveTag.php:68 +msgid "Save to Folder:" +msgstr "Save to folder:" + +#: src/Content/Conversation.php:311 +msgid "Where are you right now?" +msgstr "Where are you right now?" + +#: src/Content/Conversation.php:312 +msgid "Delete item(s)?" +msgstr "Delete item(s)?" + +#: src/Content/Conversation.php:322 +msgid "New Post" +msgstr "New post" + +#: src/Content/Conversation.php:325 +msgid "Share" +msgstr "Share" + +#: src/Content/Conversation.php:331 src/Module/Item/Compose.php:151 +#: src/Object/Post.php:965 +msgid "Bold" +msgstr "Bold" + +#: src/Content/Conversation.php:332 src/Module/Item/Compose.php:152 +#: src/Object/Post.php:966 +msgid "Italic" +msgstr "Italic" + +#: src/Content/Conversation.php:333 src/Module/Item/Compose.php:153 +#: src/Object/Post.php:967 +msgid "Underline" +msgstr "Underline" + +#: src/Content/Conversation.php:334 src/Module/Item/Compose.php:154 +#: src/Object/Post.php:968 +msgid "Quote" +msgstr "Quote" + +#: src/Content/Conversation.php:335 src/Module/Item/Compose.php:155 +#: src/Object/Post.php:969 +msgid "Code" +msgstr "Code" + +#: src/Content/Conversation.php:336 src/Module/Item/Compose.php:156 +#: src/Object/Post.php:970 +msgid "Image" +msgstr "Image" + +#: src/Content/Conversation.php:337 src/Module/Item/Compose.php:157 +#: src/Object/Post.php:971 +msgid "Link" +msgstr "Link" + +#: src/Content/Conversation.php:338 src/Module/Item/Compose.php:158 +#: src/Object/Post.php:972 +msgid "Link or Media" +msgstr "Link or media" + +#: src/Content/Conversation.php:339 +msgid "Video" +msgstr "" + +#: src/Content/Conversation.php:352 src/Module/Item/Compose.php:172 +msgid "Scheduled at" +msgstr "" + +#: src/Content/Conversation.php:651 src/Object/Post.php:454 +#: src/Object/Post.php:455 +#, php-format +msgid "View %s's profile @ %s" +msgstr "View %s's profile @ %s" + +#: src/Content/Conversation.php:664 src/Object/Post.php:442 +msgid "Categories:" +msgstr "Categories:" + +#: src/Content/Conversation.php:665 src/Object/Post.php:443 +msgid "Filed under:" +msgstr "Filed under:" + +#: src/Content/Conversation.php:672 src/Object/Post.php:468 +#, php-format +msgid "%s from %s" +msgstr "%s from %s" + +#: src/Content/Conversation.php:687 +msgid "View in context" +msgstr "View in context" + +#: src/Content/Conversation.php:752 +msgid "remove" +msgstr "Remove" + +#: src/Content/Conversation.php:756 +msgid "Delete Selected Items" +msgstr "Delete selected items" + +#: src/Content/Conversation.php:820 src/Content/Conversation.php:823 +#: src/Content/Conversation.php:826 src/Content/Conversation.php:829 +#, php-format +msgid "You had been addressed (%s)." +msgstr "You have been addressed (%s)." + +#: src/Content/Conversation.php:832 +#, php-format +msgid "You are following %s." +msgstr "" + +#: src/Content/Conversation.php:835 +msgid "Tagged" +msgstr "" + +#: src/Content/Conversation.php:850 +msgid "Reshared" +msgstr "" + +#: src/Content/Conversation.php:850 +#, php-format +msgid "Reshared by %s <%s>" +msgstr "" + +#: src/Content/Conversation.php:853 +#, php-format +msgid "%s is participating in this thread." +msgstr "" + +#: src/Content/Conversation.php:856 +msgid "Stored" +msgstr "" + +#: src/Content/Conversation.php:859 +msgid "Global" +msgstr "" + +#: src/Content/Conversation.php:862 +msgid "Relayed" +msgstr "" + +#: src/Content/Conversation.php:862 +#, php-format +msgid "Relayed by %s <%s>" +msgstr "" + +#: src/Content/Conversation.php:865 +msgid "Fetched" +msgstr "" + +#: src/Content/Conversation.php:865 +#, php-format +msgid "Fetched because of %s <%s>" +msgstr "" + #: src/Content/Feature.php:96 msgid "General Features" msgstr "General" @@ -3354,8 +2711,8 @@ msgstr "Display membership date" msgid "Display membership date in profile" msgstr "Display membership date in profile" -#: src/Content/ForumManager.php:145 src/Content/Nav.php:229 -#: src/Content/Text/HTML.php:914 src/Content/Widget.php:533 +#: src/Content/ForumManager.php:145 src/Content/Nav.php:239 +#: src/Content/Text/HTML.php:906 src/Content/Widget.php:523 msgid "Forums" msgstr "Forums" @@ -3363,15 +2720,80 @@ msgstr "Forums" msgid "External link to forum" msgstr "External link to forum" -#: src/Content/ForumManager.php:150 src/Content/Widget.php:512 +#: src/Content/ForumManager.php:150 src/Content/Widget.php:502 msgid "show less" msgstr "" -#: src/Content/ForumManager.php:151 src/Content/Widget.php:411 -#: src/Content/Widget.php:513 +#: src/Content/ForumManager.php:151 src/Content/Widget.php:404 +#: src/Content/Widget.php:503 msgid "show more" msgstr "show more" +#: src/Content/Item.php:305 +#, php-format +msgid "%1$s poked %2$s" +msgstr "%1$s poked %2$s" + +#: src/Content/Item.php:338 src/Model/Item.php:2624 +msgid "event" +msgstr "event" + +#: src/Content/Item.php:442 view/theme/frio/theme.php:254 +msgid "Follow Thread" +msgstr "Follow thread" + +#: src/Content/Item.php:443 src/Model/Contact.php:1077 +msgid "View Status" +msgstr "View status" + +#: src/Content/Item.php:444 src/Content/Item.php:466 +#: src/Model/Contact.php:1011 src/Model/Contact.php:1069 +#: src/Model/Contact.php:1078 src/Module/Directory.php:160 +#: src/Module/Settings/Profile/Index.php:226 +msgid "View Profile" +msgstr "View profile" + +#: src/Content/Item.php:445 src/Model/Contact.php:1079 +msgid "View Photos" +msgstr "View photos" + +#: src/Content/Item.php:446 src/Model/Contact.php:1070 +#: src/Model/Contact.php:1080 +msgid "Network Posts" +msgstr "Network posts" + +#: src/Content/Item.php:447 src/Model/Contact.php:1071 +#: src/Model/Contact.php:1081 +msgid "View Contact" +msgstr "View contact" + +#: src/Content/Item.php:448 src/Model/Contact.php:1082 +msgid "Send PM" +msgstr "Send PM" + +#: src/Content/Item.php:449 src/Module/Admin/Blocklist/Contact.php:100 +#: src/Module/Admin/Users/Active.php:140 src/Module/Admin/Users/Index.php:154 +#: src/Module/Contact.php:544 src/Module/Contact.php:787 +#: src/Module/Contact.php:1064 +msgid "Block" +msgstr "Block" + +#: src/Content/Item.php:450 src/Module/Contact.php:545 +#: src/Module/Contact.php:788 src/Module/Contact.php:1072 +#: src/Module/Notifications/Introductions.php:112 +#: src/Module/Notifications/Introductions.php:184 +#: src/Module/Notifications/Notification.php:61 +msgid "Ignore" +msgstr "Ignore" + +#: src/Content/Item.php:454 src/Object/Post.php:429 +msgid "Languages" +msgstr "" + +#: src/Content/Item.php:458 src/Model/Contact.php:1083 +msgid "Poke" +msgstr "Poke" + #: src/Content/Nav.php:90 msgid "Nothing new here" msgstr "Nothing new here" @@ -3384,92 +2806,89 @@ msgstr "Go back" msgid "Clear notifications" msgstr "Clear notifications" -#: src/Content/Nav.php:96 src/Content/Text/HTML.php:901 +#: src/Content/Nav.php:96 src/Content/Text/HTML.php:893 msgid "@name, !forum, #tags, content" msgstr "@name, !forum, #tags, content" -#: src/Content/Nav.php:169 src/Module/Security/Login.php:141 +#: src/Content/Nav.php:183 src/Module/Security/Login.php:145 msgid "Logout" msgstr "Logout" -#: src/Content/Nav.php:169 +#: src/Content/Nav.php:183 msgid "End this session" msgstr "End this session" -#: src/Content/Nav.php:171 src/Module/Bookmarklet.php:46 -#: src/Module/Security/Login.php:142 +#: src/Content/Nav.php:185 src/Module/Bookmarklet.php:44 +#: src/Module/Security/Login.php:146 msgid "Login" msgstr "Login" -#: src/Content/Nav.php:171 +#: src/Content/Nav.php:185 msgid "Sign in" msgstr "Sign in" -#: src/Content/Nav.php:177 src/Module/BaseProfile.php:60 -#: src/Module/Contact.php:655 src/Module/Contact.php:920 +#: src/Content/Nav.php:190 src/Module/BaseProfile.php:56 +#: src/Module/Contact.php:576 src/Module/Contact.php:822 #: src/Module/Settings/TwoFactor/Index.php:112 view/theme/frio/theme.php:225 msgid "Status" msgstr "Status" -#: src/Content/Nav.php:177 src/Content/Nav.php:263 +#: src/Content/Nav.php:190 src/Content/Nav.php:273 #: view/theme/frio/theme.php:225 msgid "Your posts and conversations" msgstr "My posts and conversations" -#: src/Content/Nav.php:178 src/Module/BaseProfile.php:52 -#: src/Module/BaseSettings.php:57 src/Module/Contact.php:657 -#: src/Module/Contact.php:936 src/Module/Profile/Profile.php:237 +#: src/Content/Nav.php:191 src/Module/BaseProfile.php:48 +#: src/Module/BaseSettings.php:57 src/Module/Contact.php:578 +#: src/Module/Contact.php:846 src/Module/Profile/Profile.php:241 #: src/Module/Welcome.php:57 view/theme/frio/theme.php:226 msgid "Profile" msgstr "Profile" -#: src/Content/Nav.php:178 view/theme/frio/theme.php:226 +#: src/Content/Nav.php:191 view/theme/frio/theme.php:226 msgid "Your profile page" msgstr "My profile page" -#: src/Content/Nav.php:179 view/theme/frio/theme.php:227 +#: src/Content/Nav.php:192 view/theme/frio/theme.php:227 msgid "Your photos" msgstr "My photos" -#: src/Content/Nav.php:180 src/Module/BaseProfile.php:76 -#: src/Module/BaseProfile.php:79 view/theme/frio/theme.php:228 -msgid "Videos" -msgstr "Videos" +#: src/Content/Nav.php:193 src/Module/BaseProfile.php:72 +#: src/Module/BaseProfile.php:75 src/Module/Contact.php:838 +#: view/theme/frio/theme.php:228 +msgid "Media" +msgstr "" -#: src/Content/Nav.php:180 view/theme/frio/theme.php:228 -msgid "Your videos" -msgstr "My videos" +#: src/Content/Nav.php:193 view/theme/frio/theme.php:228 +msgid "Your postings with media" +msgstr "" -#: src/Content/Nav.php:181 view/theme/frio/theme.php:229 +#: src/Content/Nav.php:194 view/theme/frio/theme.php:229 msgid "Your events" msgstr "My events" -#: src/Content/Nav.php:182 +#: src/Content/Nav.php:195 msgid "Personal notes" msgstr "Personal notes" -#: src/Content/Nav.php:182 +#: src/Content/Nav.php:195 msgid "Your personal notes" msgstr "My personal notes" -#: src/Content/Nav.php:202 src/Content/Nav.php:263 +#: src/Content/Nav.php:212 src/Content/Nav.php:273 msgid "Home" msgstr "Home" -#: src/Content/Nav.php:202 -msgid "Home Page" -msgstr "Home page" - -#: src/Content/Nav.php:206 src/Module/Register.php:155 -#: src/Module/Security/Login.php:102 +#: src/Content/Nav.php:216 src/Module/Register.php:157 +#: src/Module/Security/Login.php:106 msgid "Register" msgstr "Sign up now >>" -#: src/Content/Nav.php:206 +#: src/Content/Nav.php:216 msgid "Create an account" msgstr "Create account" -#: src/Content/Nav.php:212 src/Module/Help.php:69 +#: src/Content/Nav.php:222 src/Module/Help.php:69 #: src/Module/Settings/TwoFactor/AppSpecific.php:115 #: src/Module/Settings/TwoFactor/Index.php:111 #: src/Module/Settings/TwoFactor/Recovery.php:93 @@ -3477,252 +2896,233 @@ msgstr "Create account" msgid "Help" msgstr "Help" -#: src/Content/Nav.php:212 +#: src/Content/Nav.php:222 msgid "Help and documentation" msgstr "Help and documentation" -#: src/Content/Nav.php:216 +#: src/Content/Nav.php:226 msgid "Apps" msgstr "Apps" -#: src/Content/Nav.php:216 +#: src/Content/Nav.php:226 msgid "Addon applications, utilities, games" msgstr "Addon applications, utilities, games" -#: src/Content/Nav.php:220 src/Content/Text/HTML.php:899 -#: src/Module/Search/Index.php:100 +#: src/Content/Nav.php:230 src/Content/Text/HTML.php:891 +#: src/Module/Admin/Logs/View.php:86 src/Module/Search/Index.php:99 msgid "Search" msgstr "Search" -#: src/Content/Nav.php:220 +#: src/Content/Nav.php:230 msgid "Search site content" msgstr "Search site content" -#: src/Content/Nav.php:223 src/Content/Text/HTML.php:908 +#: src/Content/Nav.php:233 src/Content/Text/HTML.php:900 msgid "Full Text" msgstr "Full text" -#: src/Content/Nav.php:224 src/Content/Text/HTML.php:909 +#: src/Content/Nav.php:234 src/Content/Text/HTML.php:901 #: src/Content/Widget/TagCloud.php:68 msgid "Tags" msgstr "Tags" -#: src/Content/Nav.php:225 src/Content/Nav.php:284 -#: src/Content/Text/HTML.php:910 src/Module/BaseProfile.php:121 -#: src/Module/BaseProfile.php:124 src/Module/Contact.php:855 -#: src/Module/Contact.php:943 view/theme/frio/theme.php:236 +#: src/Content/Nav.php:235 src/Content/Nav.php:294 +#: src/Content/Text/HTML.php:902 src/Module/BaseProfile.php:125 +#: src/Module/BaseProfile.php:128 src/Module/Contact.php:759 +#: src/Module/Contact.php:853 view/theme/frio/theme.php:236 msgid "Contacts" msgstr "Contacts" -#: src/Content/Nav.php:244 +#: src/Content/Nav.php:254 msgid "Community" msgstr "Community" -#: src/Content/Nav.php:244 +#: src/Content/Nav.php:254 msgid "Conversations on this and other servers" msgstr "Conversations on this and other servers" -#: src/Content/Nav.php:248 src/Module/BaseProfile.php:91 -#: src/Module/BaseProfile.php:102 view/theme/frio/theme.php:233 +#: src/Content/Nav.php:258 src/Module/BaseProfile.php:87 +#: src/Module/BaseProfile.php:98 view/theme/frio/theme.php:233 msgid "Events and Calendar" msgstr "Events and calendar" -#: src/Content/Nav.php:251 +#: src/Content/Nav.php:261 msgid "Directory" msgstr "Directory" -#: src/Content/Nav.php:251 +#: src/Content/Nav.php:261 msgid "People directory" msgstr "People directory" -#: src/Content/Nav.php:253 src/Module/BaseAdmin.php:85 +#: src/Content/Nav.php:263 src/Module/BaseAdmin.php:85 msgid "Information" msgstr "Information" -#: src/Content/Nav.php:253 +#: src/Content/Nav.php:263 msgid "Information about this friendica instance" msgstr "Information about this Friendica instance" -#: src/Content/Nav.php:256 src/Module/Admin/Tos.php:59 -#: src/Module/BaseAdmin.php:95 src/Module/Register.php:163 +#: src/Content/Nav.php:266 src/Module/Admin/Tos.php:59 +#: src/Module/BaseAdmin.php:96 src/Module/Register.php:165 #: src/Module/Tos.php:84 msgid "Terms of Service" msgstr "Terms of Service" -#: src/Content/Nav.php:256 +#: src/Content/Nav.php:266 msgid "Terms of Service of this Friendica instance" msgstr "Terms of Service of this Friendica instance" -#: src/Content/Nav.php:261 view/theme/frio/theme.php:232 +#: src/Content/Nav.php:271 view/theme/frio/theme.php:232 msgid "Network" msgstr "Network" -#: src/Content/Nav.php:261 view/theme/frio/theme.php:232 +#: src/Content/Nav.php:271 view/theme/frio/theme.php:232 msgid "Conversations from your friends" msgstr "My friends' conversations" -#: src/Content/Nav.php:267 +#: src/Content/Nav.php:277 msgid "Introductions" msgstr "Introductions" -#: src/Content/Nav.php:267 +#: src/Content/Nav.php:277 msgid "Friend Requests" msgstr "Friend requests" -#: src/Content/Nav.php:268 src/Module/BaseNotifications.php:139 -#: src/Module/Notifications/Introductions.php:54 +#: src/Content/Nav.php:278 src/Module/BaseNotifications.php:139 +#: src/Module/Notifications/Introductions.php:53 msgid "Notifications" msgstr "Notifications" -#: src/Content/Nav.php:269 +#: src/Content/Nav.php:279 msgid "See all notifications" msgstr "See all notifications" -#: src/Content/Nav.php:270 +#: src/Content/Nav.php:280 msgid "Mark all system notifications seen" msgstr "Mark notifications as seen" -#: src/Content/Nav.php:273 view/theme/frio/theme.php:234 +#: src/Content/Nav.php:283 view/theme/frio/theme.php:234 msgid "Private mail" msgstr "Private messages" -#: src/Content/Nav.php:274 +#: src/Content/Nav.php:284 msgid "Inbox" msgstr "Inbox" -#: src/Content/Nav.php:275 +#: src/Content/Nav.php:285 msgid "Outbox" msgstr "Outbox" -#: src/Content/Nav.php:279 +#: src/Content/Nav.php:289 msgid "Accounts" msgstr "" -#: src/Content/Nav.php:279 +#: src/Content/Nav.php:289 msgid "Manage other pages" msgstr "Manage other pages" -#: src/Content/Nav.php:282 src/Module/Admin/Addons/Details.php:114 +#: src/Content/Nav.php:292 src/Module/Admin/Addons/Details.php:114 #: src/Module/Admin/Themes/Details.php:93 src/Module/BaseSettings.php:124 #: src/Module/Welcome.php:52 view/theme/frio/theme.php:235 msgid "Settings" msgstr "Settings" -#: src/Content/Nav.php:282 view/theme/frio/theme.php:235 +#: src/Content/Nav.php:292 view/theme/frio/theme.php:235 msgid "Account settings" msgstr "Account settings" -#: src/Content/Nav.php:284 view/theme/frio/theme.php:236 +#: src/Content/Nav.php:294 view/theme/frio/theme.php:236 msgid "Manage/edit friends and contacts" msgstr "Manage/Edit friends and contacts" -#: src/Content/Nav.php:289 src/Module/BaseAdmin.php:125 +#: src/Content/Nav.php:299 src/Module/BaseAdmin.php:126 msgid "Admin" msgstr "Admin" -#: src/Content/Nav.php:289 +#: src/Content/Nav.php:299 msgid "Site setup and configuration" msgstr "Site setup and configuration" -#: src/Content/Nav.php:292 +#: src/Content/Nav.php:302 msgid "Navigation" msgstr "Navigation" -#: src/Content/Nav.php:292 +#: src/Content/Nav.php:302 msgid "Site map" msgstr "Site map" -#: src/Content/OEmbed.php:292 +#: src/Content/OEmbed.php:298 msgid "Embedding disabled" msgstr "Embedding disabled" -#: src/Content/OEmbed.php:410 +#: src/Content/OEmbed.php:416 msgid "Embedded content" msgstr "Embedded content" +#: src/Content/Pager.php:216 +msgid "first" +msgstr "first" + #: src/Content/Pager.php:221 msgid "prev" msgstr "prev" +#: src/Content/Pager.php:276 +msgid "next" +msgstr "next" + #: src/Content/Pager.php:281 msgid "last" msgstr "last" -#: src/Content/Text/BBCode.php:1015 src/Content/Text/BBCode.php:1669 -#: src/Content/Text/BBCode.php:1670 +#: src/Content/Text/BBCode.php:987 src/Content/Text/BBCode.php:1781 +#: src/Content/Text/BBCode.php:1782 msgid "Image/photo" msgstr "Image/Photo" -#: src/Content/Text/BBCode.php:1117 +#: src/Content/Text/BBCode.php:1160 #, php-format msgid "%2$s %3$s" msgstr "" -#: src/Content/Text/BBCode.php:1142 src/Model/Item.php:2773 -#: src/Model/Item.php:2779 -msgid "link to source" -msgstr "Link to source" +#: src/Content/Text/BBCode.php:1185 src/Model/Item.php:3154 +#: src/Model/Item.php:3160 src/Model/Item.php:3161 +msgid "Link to source" +msgstr "" -#: src/Content/Text/BBCode.php:1587 src/Content/Text/HTML.php:951 +#: src/Content/Text/BBCode.php:1699 src/Content/Text/HTML.php:943 msgid "Click to open/close" msgstr "Reveal/hide" -#: src/Content/Text/BBCode.php:1618 +#: src/Content/Text/BBCode.php:1730 msgid "$1 wrote:" msgstr "$1 wrote:" -#: src/Content/Text/BBCode.php:1672 src/Content/Text/BBCode.php:1673 +#: src/Content/Text/BBCode.php:1786 src/Content/Text/BBCode.php:1787 msgid "Encrypted content" msgstr "Encrypted content" -#: src/Content/Text/BBCode.php:1886 +#: src/Content/Text/BBCode.php:2002 msgid "Invalid source protocol" msgstr "Invalid source protocol" -#: src/Content/Text/BBCode.php:1901 +#: src/Content/Text/BBCode.php:2017 msgid "Invalid link protocol" msgstr "Invalid link protocol" -#: src/Content/Text/HTML.php:799 +#: src/Content/Text/HTML.php:807 msgid "Loading more entries..." msgstr "Loading more entries..." -#: src/Content/Text/HTML.php:800 +#: src/Content/Text/HTML.php:808 msgid "The end" msgstr "The end" -#: src/Content/Text/HTML.php:893 src/Model/Profile.php:439 -#: src/Module/Contact.php:340 +#: src/Content/Text/HTML.php:885 src/Content/Widget/VCard.php:103 +#: src/Model/Profile.php:454 msgid "Follow" msgstr "Follow" -#: src/Content/Widget/CalendarExport.php:63 -msgid "Export" -msgstr "Export" - -#: src/Content/Widget/CalendarExport.php:64 -msgid "Export calendar as ical" -msgstr "Export calendar as ical" - -#: src/Content/Widget/CalendarExport.php:65 -msgid "Export calendar as csv" -msgstr "Export calendar as csv" - -#: src/Content/Widget/ContactBlock.php:73 -msgid "No contacts" -msgstr "No contacts" - -#: src/Content/Widget/ContactBlock.php:105 -#, php-format -msgid "%d Contact" -msgid_plural "%d Contacts" -msgstr[0] "%d contact" -msgstr[1] "%d contacts" - -#: src/Content/Widget/ContactBlock.php:124 -msgid "View Contacts" -msgstr "View contacts" - #: src/Content/Widget.php:49 msgid "Add New Contact" msgstr "Add new contact" @@ -3758,8 +3158,8 @@ msgstr "Enter name or interest" msgid "Examples: Robert Morgenstein, Fishing" msgstr "Examples: Robert Morgenstein, fishing" -#: src/Content/Widget.php:78 src/Module/Contact.php:876 -#: src/Module/Directory.php:105 view/theme/vier/theme.php:174 +#: src/Content/Widget.php:78 src/Module/Contact.php:780 +#: src/Module/Directory.php:99 view/theme/vier/theme.php:174 msgid "Find" msgstr "Find" @@ -3775,7 +3175,7 @@ msgstr "Random profile" msgid "Invite Friends" msgstr "Invite friends" -#: src/Content/Widget.php:83 src/Module/Directory.php:97 +#: src/Content/Widget.php:83 src/Module/Directory.php:91 #: view/theme/vier/theme.php:179 msgid "Global Directory" msgstr "Global directory" @@ -3784,71 +3184,98 @@ msgstr "Global directory" msgid "Local Directory" msgstr "Local directory" -#: src/Content/Widget.php:214 src/Model/Group.php:535 -#: src/Module/Contact.php:839 src/Module/Welcome.php:76 +#: src/Content/Widget.php:207 src/Model/Group.php:535 +#: src/Module/Contact.php:743 src/Module/Welcome.php:76 msgid "Groups" msgstr "Groups" -#: src/Content/Widget.php:216 +#: src/Content/Widget.php:209 msgid "Everyone" msgstr "" -#: src/Content/Widget.php:245 +#: src/Content/Widget.php:238 msgid "Relationships" msgstr "Relationships" -#: src/Content/Widget.php:247 src/Module/Contact.php:791 +#: src/Content/Widget.php:240 src/Module/Contact.php:695 #: src/Module/Group.php:292 msgid "All Contacts" msgstr "All contacts" -#: src/Content/Widget.php:286 +#: src/Content/Widget.php:279 msgid "Protocols" msgstr "Protocols" -#: src/Content/Widget.php:288 +#: src/Content/Widget.php:281 msgid "All Protocols" msgstr "All protocols" -#: src/Content/Widget.php:316 +#: src/Content/Widget.php:309 msgid "Saved Folders" msgstr "Saved Folders" -#: src/Content/Widget.php:318 src/Content/Widget.php:352 +#: src/Content/Widget.php:311 src/Content/Widget.php:345 msgid "Everything" msgstr "Everything" -#: src/Content/Widget.php:350 +#: src/Content/Widget.php:343 msgid "Categories" msgstr "Categories" -#: src/Content/Widget.php:407 +#: src/Content/Widget.php:400 #, php-format msgid "%d contact in common" msgid_plural "%d contacts in common" msgstr[0] "%d contact in common" msgstr[1] "%d contacts in common" -#: src/Content/Widget.php:506 +#: src/Content/Widget.php:496 msgid "Archives" msgstr "Archives" -#: src/Content/Widget.php:530 +#: src/Content/Widget.php:520 msgid "Persons" msgstr "" -#: src/Content/Widget.php:531 +#: src/Content/Widget.php:521 msgid "Organisations" msgstr "Organizations" -#: src/Content/Widget.php:532 src/Model/Contact.php:1410 +#: src/Content/Widget.php:522 src/Model/Contact.php:1506 msgid "News" msgstr "News" -#: src/Content/Widget.php:537 src/Module/Admin/BaseUsers.php:50 +#: src/Content/Widget.php:527 src/Module/Admin/BaseUsers.php:50 msgid "All" msgstr "" +#: src/Content/Widget/CalendarExport.php:54 +msgid "Export" +msgstr "Export" + +#: src/Content/Widget/CalendarExport.php:55 +msgid "Export calendar as ical" +msgstr "Export calendar as ical" + +#: src/Content/Widget/CalendarExport.php:56 +msgid "Export calendar as csv" +msgstr "Export calendar as csv" + +#: src/Content/Widget/ContactBlock.php:79 +msgid "No contacts" +msgstr "No contacts" + +#: src/Content/Widget/ContactBlock.php:108 +#, php-format +msgid "%d Contact" +msgid_plural "%d Contacts" +msgstr[0] "%d contact" +msgstr[1] "%d contacts" + +#: src/Content/Widget/ContactBlock.php:125 +msgid "View Contacts" +msgstr "View contacts" + #: src/Content/Widget/SavedSearches.php:47 msgid "Remove term" msgstr "Remove term" @@ -3868,75 +3295,94 @@ msgstr[1] "Trending tags (last %d hours)" msgid "More Trending Tags" msgstr "More trending tags" -#: src/Core/ACL.php:154 src/Module/Profile/Profile.php:238 +#: src/Content/Widget/VCard.php:96 src/Model/Profile.php:373 +#: src/Module/Contact.php:567 src/Module/Profile/Profile.php:176 +msgid "XMPP:" +msgstr "XMPP:" + +#: src/Content/Widget/VCard.php:97 src/Model/Profile.php:374 +#: src/Module/Contact.php:569 src/Module/Profile/Profile.php:180 +msgid "Matrix:" +msgstr "" + +#: src/Content/Widget/VCard.php:101 src/Model/Profile.php:466 +#: src/Module/Notifications/Introductions.php:179 +msgid "Network:" +msgstr "Network:" + +#: src/Content/Widget/VCard.php:105 src/Model/Profile.php:456 +msgid "Unfollow" +msgstr "Unfollow" + +#: src/Core/ACL.php:164 src/Module/Profile/Profile.php:242 msgid "Yourself" msgstr "" -#: src/Core/ACL.php:190 src/Module/PermissionTooltip.php:83 -#: src/Module/PermissionTooltip.php:105 +#: src/Core/ACL.php:200 src/Module/PermissionTooltip.php:85 +#: src/Module/PermissionTooltip.php:107 msgid "Mutuals" msgstr "Mutuals" -#: src/Core/ACL.php:280 +#: src/Core/ACL.php:292 msgid "Post to Email" msgstr "Post to email" -#: src/Core/ACL.php:307 +#: src/Core/ACL.php:319 msgid "Public" msgstr "Public" -#: src/Core/ACL.php:308 +#: src/Core/ACL.php:320 msgid "" "This content will be shown to all your followers and can be seen in the " "community pages and by anyone with its link." msgstr "This post will be shown to all your followers and can be seen in the community pages and by anyone with its link." -#: src/Core/ACL.php:309 +#: src/Core/ACL.php:321 msgid "Limited/Private" msgstr "Limited/Private" -#: src/Core/ACL.php:310 +#: src/Core/ACL.php:322 msgid "" "This content will be shown only to the people in the first box, to the " "exception of the people mentioned in the second box. It won't appear " "anywhere public." msgstr "This post will be shown only to the people in the first box, to the exception of the people mentioned in the second box. It won't appear anywhere publicly." -#: src/Core/ACL.php:311 +#: src/Core/ACL.php:323 msgid "Show to:" msgstr "Show to:" -#: src/Core/ACL.php:312 +#: src/Core/ACL.php:324 msgid "Except to:" msgstr "Except to:" -#: src/Core/ACL.php:315 +#: src/Core/ACL.php:327 msgid "Connectors" msgstr "Connectors" -#: src/Core/Installer.php:179 +#: src/Core/Installer.php:183 msgid "" "The database configuration file \"config/local.config.php\" could not be " "written. Please use the enclosed text to create a configuration file in your" " web server root." msgstr "The database configuration file \"config/local.config.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root." -#: src/Core/Installer.php:198 +#: src/Core/Installer.php:202 msgid "" "You may need to import the file \"database.sql\" manually using phpmyadmin " "or mysql." msgstr "You may need to import the file \"database.sql\" manually using phpmyadmin or mysql." -#: src/Core/Installer.php:199 src/Module/Install.php:206 +#: src/Core/Installer.php:203 src/Module/Install.php:206 #: src/Module/Install.php:365 msgid "Please see the file \"doc/INSTALL.md\"." msgstr "" -#: src/Core/Installer.php:260 +#: src/Core/Installer.php:264 msgid "Could not find a command line version of PHP in the web server PATH." msgstr "Could not find a command line version of PHP in the web server PATH." -#: src/Core/Installer.php:261 +#: src/Core/Installer.php:265 msgid "" "If you don't have a command line version of PHP installed on your server, " "you will not be able to run the background processing. See 'Setup the worker'" msgstr "" -#: src/Core/Installer.php:266 +#: src/Core/Installer.php:270 msgid "PHP executable path" msgstr "PHP executable path" -#: src/Core/Installer.php:266 +#: src/Core/Installer.php:270 msgid "" "Enter full path to php executable. You can leave this blank to continue the " "installation." msgstr "Enter full path to php executable. You can leave this blank to continue the installation." -#: src/Core/Installer.php:271 +#: src/Core/Installer.php:275 msgid "Command line PHP" msgstr "Command line PHP" -#: src/Core/Installer.php:280 +#: src/Core/Installer.php:284 msgid "PHP executable is not the php cli binary (could be cgi-fgci version)" msgstr "PHP executable is not a php cli binary; it could possibly be a cgi-fgci version." -#: src/Core/Installer.php:281 +#: src/Core/Installer.php:285 msgid "Found PHP version: " msgstr "Found PHP version: " -#: src/Core/Installer.php:283 +#: src/Core/Installer.php:287 msgid "PHP cli binary" msgstr "PHP cli binary" -#: src/Core/Installer.php:296 +#: src/Core/Installer.php:300 msgid "" "The command line version of PHP on your system does not have " "\"register_argc_argv\" enabled." msgstr "The command line version of PHP on your system does not have \"register_argc_argv\" enabled." -#: src/Core/Installer.php:297 +#: src/Core/Installer.php:301 msgid "This is required for message delivery to work." msgstr "This is required for message delivery to work." -#: src/Core/Installer.php:302 +#: src/Core/Installer.php:306 msgid "PHP register_argc_argv" msgstr "PHP register_argc_argv" -#: src/Core/Installer.php:334 +#: src/Core/Installer.php:338 msgid "" "Error: the \"openssl_pkey_new\" function on this system is not able to " "generate encryption keys" msgstr "Error: the \"openssl_pkey_new\" function on this system is not able to generate encryption keys" -#: src/Core/Installer.php:335 +#: src/Core/Installer.php:339 msgid "" "If running under Windows, please see " "\"http://www.php.net/manual/en/openssl.installation.php\"." msgstr "If running under Windows OS, please see \"http://www.php.net/manual/en/openssl.installation.php\"." -#: src/Core/Installer.php:338 +#: src/Core/Installer.php:342 msgid "Generate encryption keys" msgstr "Generate encryption keys" -#: src/Core/Installer.php:390 +#: src/Core/Installer.php:394 msgid "" "Error: Apache webserver mod-rewrite module is required but not installed." msgstr "Error: Apache web server mod-rewrite module is required but not installed." -#: src/Core/Installer.php:395 +#: src/Core/Installer.php:399 msgid "Apache mod_rewrite module" msgstr "Apache mod_rewrite module" -#: src/Core/Installer.php:401 +#: src/Core/Installer.php:405 msgid "Error: PDO or MySQLi PHP module required but not installed." msgstr "Error: PDO or MySQLi PHP module required but not installed." -#: src/Core/Installer.php:406 +#: src/Core/Installer.php:410 msgid "Error: The MySQL driver for PDO is not installed." msgstr "Error: MySQL driver for PDO is not installed." -#: src/Core/Installer.php:410 +#: src/Core/Installer.php:414 msgid "PDO or MySQLi PHP module" msgstr "PDO or MySQLi PHP module" -#: src/Core/Installer.php:418 +#: src/Core/Installer.php:422 msgid "Error, XML PHP module required but not installed." msgstr "Error, XML PHP module required but not installed." -#: src/Core/Installer.php:422 +#: src/Core/Installer.php:426 msgid "XML PHP module" msgstr "XML PHP module" -#: src/Core/Installer.php:425 +#: src/Core/Installer.php:429 msgid "libCurl PHP module" msgstr "libCurl PHP module" -#: src/Core/Installer.php:426 +#: src/Core/Installer.php:430 msgid "Error: libCURL PHP module required but not installed." msgstr "Error: libCURL PHP module required but not installed." -#: src/Core/Installer.php:432 +#: src/Core/Installer.php:436 msgid "GD graphics PHP module" msgstr "GD graphics PHP module" -#: src/Core/Installer.php:433 +#: src/Core/Installer.php:437 msgid "" "Error: GD graphics PHP module with JPEG support required but not installed." msgstr "Error: GD graphics PHP module with JPEG support required but not installed." -#: src/Core/Installer.php:439 +#: src/Core/Installer.php:443 msgid "OpenSSL PHP module" msgstr "OpenSSL PHP module" -#: src/Core/Installer.php:440 +#: src/Core/Installer.php:444 msgid "Error: openssl PHP module required but not installed." msgstr "Error: openssl PHP module required but not installed." -#: src/Core/Installer.php:446 +#: src/Core/Installer.php:450 msgid "mb_string PHP module" msgstr "mb_string PHP module" -#: src/Core/Installer.php:447 +#: src/Core/Installer.php:451 msgid "Error: mb_string PHP module required but not installed." msgstr "Error: mb_string PHP module required but not installed." -#: src/Core/Installer.php:453 +#: src/Core/Installer.php:457 msgid "iconv PHP module" msgstr "iconv PHP module" -#: src/Core/Installer.php:454 +#: src/Core/Installer.php:458 msgid "Error: iconv PHP module required but not installed." msgstr "Error: iconv PHP module required but not installed." -#: src/Core/Installer.php:460 +#: src/Core/Installer.php:464 msgid "POSIX PHP module" msgstr "POSIX PHP module" -#: src/Core/Installer.php:461 +#: src/Core/Installer.php:465 msgid "Error: POSIX PHP module required but not installed." msgstr "Error: POSIX PHP module required but not installed." -#: src/Core/Installer.php:467 +#: src/Core/Installer.php:471 msgid "Program execution functions" msgstr "" -#: src/Core/Installer.php:468 -msgid "Error: Program execution functions required but not enabled." +#: src/Core/Installer.php:472 +msgid "" +"Error: Program execution functions (proc_open) required but not enabled." msgstr "" -#: src/Core/Installer.php:474 +#: src/Core/Installer.php:478 msgid "JSON PHP module" msgstr "JSON PHP module" -#: src/Core/Installer.php:475 +#: src/Core/Installer.php:479 msgid "Error: JSON PHP module required but not installed." msgstr "Error: JSON PHP module is required but not installed." -#: src/Core/Installer.php:481 +#: src/Core/Installer.php:485 msgid "File Information PHP module" msgstr "File Information PHP module" -#: src/Core/Installer.php:482 +#: src/Core/Installer.php:486 msgid "Error: File Information PHP module required but not installed." msgstr "Error: File Information PHP module required but not installed." -#: src/Core/Installer.php:505 +#: src/Core/Installer.php:509 msgid "" "The web installer needs to be able to create a file called " "\"local.config.php\" in the \"config\" folder of your web server and it is " "unable to do so." msgstr "The web installer needs to be able to create a file called \"local.config.php\" in the \"config\" folder of your web server, but is unable to do so." -#: src/Core/Installer.php:506 +#: src/Core/Installer.php:510 msgid "" "This is most often a permission setting, as the web server may not be able " "to write files in your folder - even if you can." msgstr "This is most often a permission setting issue, as the web server may not be able to write files in your directory - even if you can." -#: src/Core/Installer.php:507 +#: src/Core/Installer.php:511 msgid "" "At the end of this procedure, we will give you a text to save in a file " "named local.config.php in your Friendica \"config\" folder." msgstr "At the end of this procedure, we will give you a text to save in a file named local.config.php in your Friendica \"config\" folder." -#: src/Core/Installer.php:508 +#: src/Core/Installer.php:512 msgid "" "You can alternatively skip this procedure and perform a manual installation." " Please see the file \"doc/INSTALL.md\" for instructions." msgstr "" -#: src/Core/Installer.php:511 +#: src/Core/Installer.php:515 msgid "config/local.config.php is writable" msgstr "config/local.config.php is writable" -#: src/Core/Installer.php:531 +#: src/Core/Installer.php:535 msgid "" "Friendica uses the Smarty3 template engine to render its web views. Smarty3 " "compiles templates to PHP to speed up rendering." msgstr "Friendica uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering." -#: src/Core/Installer.php:532 +#: src/Core/Installer.php:536 msgid "" "In order to store these compiled templates, the web server needs to have " "write access to the directory view/smarty3/ under the Friendica top level " "folder." msgstr "In order to store these compiled templates, the web server needs to have write access to the directory view/smarty3/ under the Friendica top-level directory." -#: src/Core/Installer.php:533 +#: src/Core/Installer.php:537 msgid "" "Please ensure that the user that your web server runs as (e.g. www-data) has" " write access to this folder." msgstr "Please ensure the user that your web server runs as (e.g. www-data) has write access to this directory." -#: src/Core/Installer.php:534 +#: src/Core/Installer.php:538 msgid "" "Note: as a security measure, you should give the web server write access to " "view/smarty3/ only--not the template files (.tpl) that it contains." msgstr "Note: as a security measure, you should give the web server write access to view/smarty3/ only--not the template files (.tpl) that it contains." -#: src/Core/Installer.php:537 +#: src/Core/Installer.php:541 msgid "view/smarty3 is writable" msgstr "view/smarty3 is writable" -#: src/Core/Installer.php:565 +#: src/Core/Installer.php:569 msgid "" "Url rewrite in .htaccess seems not working. Make sure you copied .htaccess-" "dist to .htaccess." msgstr "Url rewrite in .htaccess does not seem to work. Make sure you copied .htaccess-dist to .htaccess." -#: src/Core/Installer.php:566 +#: src/Core/Installer.php:570 msgid "" "In some circumstances (like running inside containers), you can skip this " "error." msgstr "" -#: src/Core/Installer.php:568 +#: src/Core/Installer.php:572 msgid "Error message from Curl when fetching" msgstr "Error message from Curl while fetching" -#: src/Core/Installer.php:574 +#: src/Core/Installer.php:578 msgid "Url rewrite is working" msgstr "URL rewrite is working" -#: src/Core/Installer.php:603 +#: src/Core/Installer.php:607 +msgid "" +"The detection of TLS to secure the communication between the browser and the" +" new Friendica server failed." +msgstr "Failed to detect TLS that secures the communication between the browser and the new Friendica server." + +#: src/Core/Installer.php:608 +msgid "" +"It is highly encouraged to use Friendica only over a secure connection as " +"sensitive information like passwords will be transmitted." +msgstr "" + +#: src/Core/Installer.php:609 +msgid "Please ensure that the connection to the server is secure." +msgstr "" + +#: src/Core/Installer.php:610 +msgid "No TLS detected" +msgstr "" + +#: src/Core/Installer.php:612 +msgid "TLS detected" +msgstr "" + +#: src/Core/Installer.php:639 msgid "ImageMagick PHP extension is not installed" msgstr "ImageMagick PHP extension is not installed" -#: src/Core/Installer.php:605 +#: src/Core/Installer.php:641 msgid "ImageMagick PHP extension is installed" msgstr "ImageMagick PHP extension is installed" -#: src/Core/Installer.php:607 +#: src/Core/Installer.php:643 msgid "ImageMagick supports GIF" msgstr "ImageMagick supports GIF" -#: src/Core/Installer.php:629 +#: src/Core/Installer.php:665 msgid "Database already in use." msgstr "Database already in use." -#: src/Core/Installer.php:634 +#: src/Core/Installer.php:670 msgid "Could not connect to database." msgstr "Could not connect to database." -#: src/Core/L10n.php:371 src/Model/Event.php:432 -#: src/Module/Settings/Display.php:178 +#: src/Core/L10n.php:377 src/Model/Event.php:425 +#: src/Module/Settings/Display.php:183 msgid "Monday" msgstr "Monday" -#: src/Core/L10n.php:371 src/Model/Event.php:433 +#: src/Core/L10n.php:377 src/Model/Event.php:426 msgid "Tuesday" msgstr "Tuesday" -#: src/Core/L10n.php:371 src/Model/Event.php:434 +#: src/Core/L10n.php:377 src/Model/Event.php:427 msgid "Wednesday" msgstr "Wednesday" -#: src/Core/L10n.php:371 src/Model/Event.php:435 +#: src/Core/L10n.php:377 src/Model/Event.php:428 msgid "Thursday" msgstr "Thursday" -#: src/Core/L10n.php:371 src/Model/Event.php:436 +#: src/Core/L10n.php:377 src/Model/Event.php:429 msgid "Friday" msgstr "Friday" -#: src/Core/L10n.php:371 src/Model/Event.php:437 +#: src/Core/L10n.php:377 src/Model/Event.php:430 msgid "Saturday" msgstr "Saturday" -#: src/Core/L10n.php:371 src/Model/Event.php:431 -#: src/Module/Settings/Display.php:178 +#: src/Core/L10n.php:377 src/Model/Event.php:424 +#: src/Module/Settings/Display.php:183 msgid "Sunday" msgstr "Sunday" -#: src/Core/L10n.php:375 src/Model/Event.php:452 +#: src/Core/L10n.php:381 src/Model/Event.php:445 msgid "January" msgstr "January" -#: src/Core/L10n.php:375 src/Model/Event.php:453 +#: src/Core/L10n.php:381 src/Model/Event.php:446 msgid "February" msgstr "February" -#: src/Core/L10n.php:375 src/Model/Event.php:454 +#: src/Core/L10n.php:381 src/Model/Event.php:447 msgid "March" msgstr "March" -#: src/Core/L10n.php:375 src/Model/Event.php:455 +#: src/Core/L10n.php:381 src/Model/Event.php:448 msgid "April" msgstr "April" -#: src/Core/L10n.php:375 src/Core/L10n.php:395 src/Model/Event.php:443 +#: src/Core/L10n.php:381 src/Core/L10n.php:401 src/Model/Event.php:436 msgid "May" msgstr "May" -#: src/Core/L10n.php:375 src/Model/Event.php:456 +#: src/Core/L10n.php:381 src/Model/Event.php:449 msgid "June" msgstr "June" -#: src/Core/L10n.php:375 src/Model/Event.php:457 +#: src/Core/L10n.php:381 src/Model/Event.php:450 msgid "July" msgstr "July" -#: src/Core/L10n.php:375 src/Model/Event.php:458 +#: src/Core/L10n.php:381 src/Model/Event.php:451 msgid "August" msgstr "August" -#: src/Core/L10n.php:375 src/Model/Event.php:459 +#: src/Core/L10n.php:381 src/Model/Event.php:452 msgid "September" msgstr "September" -#: src/Core/L10n.php:375 src/Model/Event.php:460 +#: src/Core/L10n.php:381 src/Model/Event.php:453 msgid "October" msgstr "October" -#: src/Core/L10n.php:375 src/Model/Event.php:461 +#: src/Core/L10n.php:381 src/Model/Event.php:454 msgid "November" msgstr "November" -#: src/Core/L10n.php:375 src/Model/Event.php:462 +#: src/Core/L10n.php:381 src/Model/Event.php:455 msgid "December" msgstr "December" -#: src/Core/L10n.php:391 src/Model/Event.php:424 +#: src/Core/L10n.php:397 src/Model/Event.php:417 msgid "Mon" msgstr "Mon" -#: src/Core/L10n.php:391 src/Model/Event.php:425 +#: src/Core/L10n.php:397 src/Model/Event.php:418 msgid "Tue" msgstr "Tue" -#: src/Core/L10n.php:391 src/Model/Event.php:426 +#: src/Core/L10n.php:397 src/Model/Event.php:419 msgid "Wed" msgstr "Wed" -#: src/Core/L10n.php:391 src/Model/Event.php:427 +#: src/Core/L10n.php:397 src/Model/Event.php:420 msgid "Thu" msgstr "Thu" -#: src/Core/L10n.php:391 src/Model/Event.php:428 +#: src/Core/L10n.php:397 src/Model/Event.php:421 msgid "Fri" msgstr "Fri" -#: src/Core/L10n.php:391 src/Model/Event.php:429 +#: src/Core/L10n.php:397 src/Model/Event.php:422 msgid "Sat" msgstr "Sat" -#: src/Core/L10n.php:391 src/Model/Event.php:423 +#: src/Core/L10n.php:397 src/Model/Event.php:416 msgid "Sun" msgstr "Sun" -#: src/Core/L10n.php:395 src/Model/Event.php:439 +#: src/Core/L10n.php:401 src/Model/Event.php:432 msgid "Jan" msgstr "Jan" -#: src/Core/L10n.php:395 src/Model/Event.php:440 +#: src/Core/L10n.php:401 src/Model/Event.php:433 msgid "Feb" msgstr "Feb" -#: src/Core/L10n.php:395 src/Model/Event.php:441 +#: src/Core/L10n.php:401 src/Model/Event.php:434 msgid "Mar" msgstr "Mar" -#: src/Core/L10n.php:395 src/Model/Event.php:442 +#: src/Core/L10n.php:401 src/Model/Event.php:435 msgid "Apr" msgstr "Apr" -#: src/Core/L10n.php:395 src/Model/Event.php:444 +#: src/Core/L10n.php:401 src/Model/Event.php:437 msgid "Jun" msgstr "Jun" -#: src/Core/L10n.php:395 src/Model/Event.php:445 +#: src/Core/L10n.php:401 src/Model/Event.php:438 msgid "Jul" msgstr "Jul" -#: src/Core/L10n.php:395 src/Model/Event.php:446 +#: src/Core/L10n.php:401 src/Model/Event.php:439 msgid "Aug" msgstr "Aug" -#: src/Core/L10n.php:395 +#: src/Core/L10n.php:401 msgid "Sep" msgstr "Sep" -#: src/Core/L10n.php:395 src/Model/Event.php:448 +#: src/Core/L10n.php:401 src/Model/Event.php:441 msgid "Oct" msgstr "Oct" -#: src/Core/L10n.php:395 src/Model/Event.php:449 +#: src/Core/L10n.php:401 src/Model/Event.php:442 msgid "Nov" msgstr "Nov" -#: src/Core/L10n.php:395 src/Model/Event.php:450 +#: src/Core/L10n.php:401 src/Model/Event.php:443 msgid "Dec" msgstr "Dec" -#: src/Core/L10n.php:414 +#: src/Core/L10n.php:420 msgid "poke" msgstr "poke" -#: src/Core/L10n.php:414 +#: src/Core/L10n.php:420 msgid "poked" msgstr "poked" -#: src/Core/L10n.php:415 +#: src/Core/L10n.php:421 msgid "ping" msgstr "ping" -#: src/Core/L10n.php:415 +#: src/Core/L10n.php:421 msgid "pinged" msgstr "pinged" -#: src/Core/L10n.php:416 +#: src/Core/L10n.php:422 msgid "prod" msgstr "prod" -#: src/Core/L10n.php:416 +#: src/Core/L10n.php:422 msgid "prodded" msgstr "prodded" -#: src/Core/L10n.php:417 +#: src/Core/L10n.php:423 msgid "slap" msgstr "slap" -#: src/Core/L10n.php:417 +#: src/Core/L10n.php:423 msgid "slapped" msgstr "slapped" -#: src/Core/L10n.php:418 +#: src/Core/L10n.php:424 msgid "finger" msgstr "finger" -#: src/Core/L10n.php:418 +#: src/Core/L10n.php:424 msgid "fingered" msgstr "fingered" -#: src/Core/L10n.php:419 +#: src/Core/L10n.php:425 msgid "rebuff" msgstr "rebuff" -#: src/Core/L10n.php:419 +#: src/Core/L10n.php:425 msgid "rebuffed" msgstr "rebuffed" -#: src/Core/Renderer.php:90 src/Core/Renderer.php:119 -#: src/Core/Renderer.php:146 src/Core/Renderer.php:180 +#: src/Core/Renderer.php:89 src/Core/Renderer.php:118 +#: src/Core/Renderer.php:145 src/Core/Renderer.php:179 #: src/Render/FriendicaSmartyEngine.php:56 msgid "" "Friendica can't display this page at the moment, please contact the " "administrator." msgstr "" -#: src/Core/Renderer.php:142 +#: src/Core/Renderer.php:141 msgid "template engine cannot be registered without a name." msgstr "" -#: src/Core/Renderer.php:176 +#: src/Core/Renderer.php:175 msgid "template engine is not registered!" msgstr "" @@ -4438,12 +3909,12 @@ msgstr "" msgid "%s: executing post update %d" msgstr "" -#: src/Core/Update.php:259 +#: src/Core/Update.php:261 #, php-format msgid "Update %s failed. See error logs." msgstr "Update %s failed. See error logs." -#: src/Core/Update.php:312 +#: src/Core/Update.php:314 #, php-format msgid "" "\n" @@ -4453,81 +3924,81 @@ msgid "" "\t\t\t\tfriendica developer if you can not help me on your own. My database might be invalid." msgstr "\n\t\t\t\tThe friendica developers released update %s recently,\n\t\t\t\tbut when I tried to install it, something went terribly wrong.\n\t\t\t\tThis needs to be fixed soon and I can't do it alone. Please contact a\n\t\t\t\tfriendica developer if you can not help me on your own. My database might be invalid." -#: src/Core/Update.php:318 +#: src/Core/Update.php:320 #, php-format msgid "The error message is\\n[pre]%s[/pre]" msgstr "" -#: src/Core/Update.php:322 src/Core/Update.php:364 +#: src/Core/Update.php:324 src/Core/Update.php:366 msgid "[Friendica Notify] Database update" msgstr "[Friendica Notify] Database update" -#: src/Core/Update.php:358 +#: src/Core/Update.php:360 #, php-format msgid "" "\n" "\t\t\t\t\tThe friendica database was successfully updated from %s to %s." msgstr "\n\t\t\t\t\tThe friendica database was successfully updated from %s to %s." -#: src/Core/UserImport.php:126 +#: src/Core/UserImport.php:125 msgid "Error decoding account file" msgstr "Error decoding account file" -#: src/Core/UserImport.php:132 +#: src/Core/UserImport.php:131 msgid "Error! No version data in file! This is not a Friendica account file?" msgstr "Error! No version data in file! Is this a Friendica account file?" -#: src/Core/UserImport.php:140 +#: src/Core/UserImport.php:139 #, php-format msgid "User '%s' already exists on this server!" msgstr "User '%s' already exists on this server!" -#: src/Core/UserImport.php:176 +#: src/Core/UserImport.php:175 msgid "User creation error" msgstr "User creation error" -#: src/Core/UserImport.php:221 +#: src/Core/UserImport.php:220 #, php-format msgid "%d contact not imported" msgid_plural "%d contacts not imported" msgstr[0] "%d contact not imported" msgstr[1] "%d contacts not imported" -#: src/Core/UserImport.php:274 +#: src/Core/UserImport.php:273 msgid "User profile creation error" msgstr "User profile creation error" -#: src/Core/UserImport.php:330 +#: src/Core/UserImport.php:326 msgid "Done. You can now login with your username and password" msgstr "Done. You can now login with your username and password" -#: src/Database/DBStructure.php:64 +#: src/Database/DBStructure.php:65 #, php-format msgid "The database version had been set to %s." msgstr "The database version has been set to %s." -#: src/Database/DBStructure.php:77 +#: src/Database/DBStructure.php:78 #, php-format msgid "" "The post update is at version %d, it has to be at %d to safely drop the " "tables." msgstr "" -#: src/Database/DBStructure.php:89 +#: src/Database/DBStructure.php:91 msgid "No unused tables found." msgstr "" -#: src/Database/DBStructure.php:94 +#: src/Database/DBStructure.php:96 msgid "" "These tables are not used for friendica and will be deleted when you execute" " \"dbstructure drop -e\":" msgstr "" -#: src/Database/DBStructure.php:132 +#: src/Database/DBStructure.php:134 msgid "There are no tables on MyISAM or InnoDB with the Antelope file format." msgstr "" -#: src/Database/DBStructure.php:156 +#: src/Database/DBStructure.php:158 #, php-format msgid "" "\n" @@ -4535,230 +4006,198 @@ msgid "" "%s\n" msgstr "\nError %d occurred during database update:\n%s\n" -#: src/Database/DBStructure.php:159 +#: src/Database/DBStructure.php:161 msgid "Errors encountered performing database changes: " msgstr "Errors encountered performing database changes: " -#: src/Database/DBStructure.php:436 +#: src/Database/DBStructure.php:549 msgid "Another database update is currently running." msgstr "" -#: src/Database/DBStructure.php:440 +#: src/Database/DBStructure.php:553 #, php-format msgid "%s: Database update" msgstr "%s: Database update" -#: src/Database/DBStructure.php:740 +#: src/Database/DBStructure.php:803 #, php-format msgid "%s: updating %s table." msgstr "%s: updating %s table." -#: src/Factory/Api/Mastodon/Error.php:32 +#: src/Factory/Api/Mastodon/Error.php:55 msgid "Record not found" msgstr "" -#: src/Factory/Notification/Introduction.php:135 -msgid "Friend Suggestion" -msgstr "Friend suggestion" - -#: src/Factory/Notification/Introduction.php:161 -msgid "Friend/Connect Request" -msgstr "Friend/Contact request" - -#: src/Factory/Notification/Introduction.php:161 -msgid "New Follower" -msgstr "New follower" - -#: src/Factory/Notification/Notification.php:103 -#, php-format -msgid "%s created a new post" -msgstr "%s posted something new" - -#: src/Factory/Notification/Notification.php:104 -#: src/Factory/Notification/Notification.php:362 -#, php-format -msgid "%s commented on %s's post" -msgstr "%s commented on %s's post" - -#: src/Factory/Notification/Notification.php:130 -#, php-format -msgid "%s liked %s's post" -msgstr "%s liked %s's post" - -#: src/Factory/Notification/Notification.php:141 -#, php-format -msgid "%s disliked %s's post" -msgstr "%s disliked %s's post" - -#: src/Factory/Notification/Notification.php:152 -#, php-format -msgid "%s is attending %s's event" -msgstr "%s is going to %s's event" - -#: src/Factory/Notification/Notification.php:163 -#, php-format -msgid "%s is not attending %s's event" -msgstr "%s is not going to %s's event" - -#: src/Factory/Notification/Notification.php:174 -#, php-format -msgid "%s may attending %s's event" +#: src/Factory/Api/Mastodon/Error.php:65 +msgid "Unprocessable Entity" msgstr "" -#: src/Factory/Notification/Notification.php:201 -#, php-format -msgid "%s is now friends with %s" -msgstr "%s is now friends with %s" +#: src/Factory/Api/Mastodon/Error.php:75 +#: src/Module/Special/HTTPException.php:50 +msgid "Unauthorized" +msgstr "Unauthorized" + +#: src/Factory/Api/Mastodon/Error.php:85 +msgid "" +"Token is not authorized with a valid user or is missing a required scope" +msgstr "" + +#: src/Factory/Api/Mastodon/Error.php:95 +#: src/Module/Special/HTTPException.php:53 +msgid "Internal Server Error" +msgstr "Internal Server Error" #: src/LegacyModule.php:49 #, php-format msgid "Legacy module file not found: %s" msgstr "Legacy module file not found: %s" -#: src/Model/Contact.php:982 src/Model/Contact.php:995 +#: src/Model/Contact.php:1073 src/Model/Contact.php:1085 msgid "UnFollow" msgstr "Unfollow" -#: src/Model/Contact.php:991 -msgid "Drop Contact" -msgstr "Drop contact" - -#: src/Model/Contact.php:1001 src/Module/Admin/Users/Pending.php:107 -#: src/Module/Notifications/Introductions.php:111 -#: src/Module/Notifications/Introductions.php:189 +#: src/Model/Contact.php:1091 src/Module/Admin/Users/Pending.php:107 +#: src/Module/Notifications/Introductions.php:110 +#: src/Module/Notifications/Introductions.php:182 msgid "Approve" msgstr "Approve" -#: src/Model/Contact.php:1406 +#: src/Model/Contact.php:1502 msgid "Organisation" msgstr "Organization" -#: src/Model/Contact.php:1414 +#: src/Model/Contact.php:1510 msgid "Forum" msgstr "Forum" -#: src/Model/Contact.php:2169 +#: src/Model/Contact.php:2380 +msgid "Disallowed profile URL." +msgstr "Disallowed profile URL." + +#: src/Model/Contact.php:2385 src/Module/Friendica.php:81 +msgid "Blocked domain" +msgstr "Blocked domain" + +#: src/Model/Contact.php:2390 msgid "Connect URL missing." msgstr "Connect URL missing." -#: src/Model/Contact.php:2178 +#: src/Model/Contact.php:2399 msgid "" "The contact could not be added. Please check the relevant network " "credentials in your Settings -> Social Networks page." msgstr "The contact could not be added. Please check the relevant network credentials in your Settings -> Social Networks page." -#: src/Model/Contact.php:2219 -msgid "" -"This site is not configured to allow communications with other networks." -msgstr "This site is not configured to allow communications with other networks." - -#: src/Model/Contact.php:2220 src/Model/Contact.php:2233 -msgid "No compatible communication protocols or feeds were discovered." -msgstr "No compatible communication protocols or feeds were discovered." - -#: src/Model/Contact.php:2231 +#: src/Model/Contact.php:2436 msgid "The profile address specified does not provide adequate information." msgstr "The profile address specified does not provide adequate information." -#: src/Model/Contact.php:2236 +#: src/Model/Contact.php:2438 +msgid "No compatible communication protocols or feeds were discovered." +msgstr "No compatible communication protocols or feeds were discovered." + +#: src/Model/Contact.php:2441 msgid "An author or name was not found." msgstr "An author or name was not found." -#: src/Model/Contact.php:2239 +#: src/Model/Contact.php:2444 msgid "No browser URL could be matched to this address." msgstr "No browser URL could be matched to this address." -#: src/Model/Contact.php:2242 +#: src/Model/Contact.php:2447 msgid "" "Unable to match @-style Identity Address with a known protocol or email " "contact." msgstr "Unable to match @-style identity address with a known protocol or email contact." -#: src/Model/Contact.php:2243 +#: src/Model/Contact.php:2448 msgid "Use mailto: in front of address to force email check." msgstr "Use mailto: in front of address to force email check." -#: src/Model/Contact.php:2249 +#: src/Model/Contact.php:2454 msgid "" "The profile address specified belongs to a network which has been disabled " "on this site." msgstr "The profile address specified belongs to a network which has been disabled on this site." -#: src/Model/Contact.php:2254 +#: src/Model/Contact.php:2459 msgid "" "Limited profile. This person will be unable to receive direct/personal " "notifications from you." msgstr "Limited profile: This person will be unable to receive direct/private messages from you." -#: src/Model/Contact.php:2313 +#: src/Model/Contact.php:2518 msgid "Unable to retrieve contact information." msgstr "Unable to retrieve contact information." -#: src/Model/Event.php:50 src/Model/Event.php:872 -#: src/Module/Debug/Localtime.php:36 -msgid "l F d, Y \\@ g:i A" -msgstr "l F d, Y \\@ g:i A" +#: src/Model/Event.php:52 +msgid "l F d, Y \\@ g:i A \\G\\M\\TP (e)" +msgstr "" -#: src/Model/Event.php:77 src/Model/Event.php:94 src/Model/Event.php:471 -#: src/Model/Event.php:942 +#: src/Model/Event.php:73 src/Model/Event.php:90 src/Model/Event.php:464 +#: src/Model/Event.php:897 msgid "Starts:" msgstr "Starts:" -#: src/Model/Event.php:80 src/Model/Event.php:100 src/Model/Event.php:472 -#: src/Model/Event.php:946 +#: src/Model/Event.php:76 src/Model/Event.php:96 src/Model/Event.php:465 +#: src/Model/Event.php:901 msgid "Finishes:" msgstr "Finishes:" -#: src/Model/Event.php:421 +#: src/Model/Event.php:414 msgid "all-day" msgstr "All-day" -#: src/Model/Event.php:447 +#: src/Model/Event.php:440 msgid "Sept" msgstr "Sep" -#: src/Model/Event.php:469 +#: src/Model/Event.php:462 msgid "No events to display" msgstr "No events to display" -#: src/Model/Event.php:588 +#: src/Model/Event.php:578 msgid "l, F j" msgstr "l, F j" -#: src/Model/Event.php:619 +#: src/Model/Event.php:609 msgid "Edit event" msgstr "Edit event" -#: src/Model/Event.php:620 +#: src/Model/Event.php:610 msgid "Duplicate event" msgstr "Duplicate event" -#: src/Model/Event.php:621 +#: src/Model/Event.php:611 msgid "Delete event" msgstr "Delete event" -#: src/Model/Event.php:873 +#: src/Model/Event.php:853 src/Module/Debug/Localtime.php:38 +msgid "l F d, Y \\@ g:i A" +msgstr "l F d, Y \\@ g:i A" + +#: src/Model/Event.php:854 msgid "D g:i A" msgstr "D g:i A" -#: src/Model/Event.php:874 +#: src/Model/Event.php:855 msgid "g:i A" msgstr "g:i A" -#: src/Model/Event.php:961 src/Model/Event.php:963 +#: src/Model/Event.php:916 src/Model/Event.php:918 msgid "Show map" msgstr "Show map" -#: src/Model/Event.php:962 +#: src/Model/Event.php:917 msgid "Hide map" msgstr "Hide map" -#: src/Model/Event.php:1054 +#: src/Model/Event.php:1009 #, php-format msgid "%s's birthday" msgstr "%s's birthday" -#: src/Model/Event.php:1055 +#: src/Model/Event.php:1010 #, php-format msgid "Happy Birthday %s" msgstr "Happy Birthday, %s!" @@ -4807,287 +4246,330 @@ msgstr "Group name: " msgid "Edit groups" msgstr "Edit groups" -#: src/Model/Item.php:1556 +#: src/Model/Item.php:1677 #, php-format msgid "Detected languages in this post:\\n%s" msgstr "" -#: src/Model/Item.php:2501 +#: src/Model/Item.php:2628 msgid "activity" msgstr "activity" -#: src/Model/Item.php:2503 src/Object/Post.php:545 +#: src/Model/Item.php:2630 msgid "comment" -msgid_plural "comments" -msgstr[0] "comment" -msgstr[1] "comments" +msgstr "" -#: src/Model/Item.php:2506 +#: src/Model/Item.php:2633 msgid "post" msgstr "post" -#: src/Model/Item.php:2620 +#: src/Model/Item.php:2770 #, php-format msgid "Content warning: %s" msgstr "Content warning: %s" -#: src/Model/Item.php:2734 +#: src/Model/Item.php:3119 msgid "bytes" msgstr "bytes" -#: src/Model/Item.php:2767 +#: src/Model/Item.php:3148 src/Model/Item.php:3149 msgid "View on separate page" msgstr "View on separate page" -#: src/Model/Item.php:2768 -msgid "view on separate page" -msgstr "view on separate page" - -#: src/Model/Mail.php:120 src/Model/Mail.php:258 +#: src/Model/Mail.php:134 src/Model/Mail.php:266 msgid "[no subject]" msgstr "[no subject]" -#: src/Model/Profile.php:346 src/Module/Profile/Profile.php:252 -#: src/Module/Profile/Profile.php:254 +#: src/Model/Profile.php:356 src/Module/Profile/Profile.php:256 +#: src/Module/Profile/Profile.php:258 msgid "Edit profile" msgstr "Edit profile" -#: src/Model/Profile.php:348 +#: src/Model/Profile.php:358 msgid "Change profile photo" msgstr "Change profile photo" -#: src/Model/Profile.php:361 src/Module/Directory.php:161 -#: src/Module/Profile/Profile.php:180 +#: src/Model/Profile.php:371 src/Module/Directory.php:155 +#: src/Module/Profile/Profile.php:184 msgid "Homepage:" msgstr "Homepage:" -#: src/Model/Profile.php:362 src/Module/Contact.php:650 -#: src/Module/Notifications/Introductions.php:174 +#: src/Model/Profile.php:372 src/Module/Contact.php:571 +#: src/Module/Notifications/Introductions.php:167 msgid "About:" msgstr "About:" -#: src/Model/Profile.php:363 src/Module/Contact.php:648 -#: src/Module/Profile/Profile.php:176 -msgid "XMPP:" -msgstr "XMPP:" - -#: src/Model/Profile.php:441 src/Module/Contact.php:342 -msgid "Unfollow" -msgstr "Unfollow" - -#: src/Model/Profile.php:443 +#: src/Model/Profile.php:458 msgid "Atom feed" msgstr "Atom feed" -#: src/Model/Profile.php:451 src/Module/Contact.php:338 -#: src/Module/Notifications/Introductions.php:186 -msgid "Network:" -msgstr "Network:" - -#: src/Model/Profile.php:481 src/Model/Profile.php:578 +#: src/Model/Profile.php:496 src/Model/Profile.php:593 msgid "g A l F d" msgstr "g A l F d" -#: src/Model/Profile.php:482 +#: src/Model/Profile.php:497 msgid "F d" msgstr "F d" -#: src/Model/Profile.php:544 src/Model/Profile.php:629 +#: src/Model/Profile.php:559 src/Model/Profile.php:644 msgid "[today]" msgstr "[today]" -#: src/Model/Profile.php:554 +#: src/Model/Profile.php:569 msgid "Birthday Reminders" msgstr "Birthday reminders" -#: src/Model/Profile.php:555 +#: src/Model/Profile.php:570 msgid "Birthdays this week:" msgstr "Birthdays this week:" -#: src/Model/Profile.php:616 +#: src/Model/Profile.php:631 msgid "[No description]" msgstr "[No description]" -#: src/Model/Profile.php:642 +#: src/Model/Profile.php:657 msgid "Event Reminders" msgstr "Event reminders" -#: src/Model/Profile.php:643 +#: src/Model/Profile.php:658 msgid "Upcoming events the next 7 days:" msgstr "Upcoming events the next 7 days:" -#: src/Model/Profile.php:818 +#: src/Model/Profile.php:846 #, php-format msgid "OpenWebAuth: %1$s welcomes %2$s" msgstr "OpenWebAuth: %1$s welcomes %2$s" -#: src/Model/Storage/Database.php:74 -#, php-format -msgid "Database storage failed to update %s" -msgstr "Database storage failed to update %s" +#: src/Model/Profile.php:978 +msgid "Hometown:" +msgstr "Home town:" -#: src/Model/Storage/Database.php:82 -msgid "Database storage failed to insert data" -msgstr "Database storage failed to insert data" +#: src/Model/Profile.php:979 +msgid "Marital Status:" +msgstr "" -#: src/Model/Storage/Filesystem.php:100 -#, php-format -msgid "Filesystem storage failed to create \"%s\". Check you write permissions." -msgstr "Filesystem storage failed to create \"%s\". Check you write permissions." +#: src/Model/Profile.php:980 +msgid "With:" +msgstr "" -#: src/Model/Storage/Filesystem.php:148 -#, php-format -msgid "" -"Filesystem storage failed to save data to \"%s\". Check your write " -"permissions" -msgstr "Filesystem storage failed to save data to \"%s\". Check your write permissions" +#: src/Model/Profile.php:981 +msgid "Since:" +msgstr "" -#: src/Model/Storage/Filesystem.php:176 +#: src/Model/Profile.php:982 +msgid "Sexual Preference:" +msgstr "Sexual preference:" + +#: src/Model/Profile.php:983 +msgid "Political Views:" +msgstr "Political views:" + +#: src/Model/Profile.php:984 +msgid "Religious Views:" +msgstr "Religious views:" + +#: src/Model/Profile.php:985 +msgid "Likes:" +msgstr "Likes:" + +#: src/Model/Profile.php:986 +msgid "Dislikes:" +msgstr "Dislikes:" + +#: src/Model/Profile.php:987 +msgid "Title/Description:" +msgstr "Title/Description:" + +#: src/Model/Profile.php:988 src/Module/Admin/Summary.php:234 +msgid "Summary" +msgstr "Summary" + +#: src/Model/Profile.php:989 +msgid "Musical interests" +msgstr "Music:" + +#: src/Model/Profile.php:990 +msgid "Books, literature" +msgstr "Books, literature, poetry:" + +#: src/Model/Profile.php:991 +msgid "Television" +msgstr "Television:" + +#: src/Model/Profile.php:992 +msgid "Film/dance/culture/entertainment" +msgstr "Film, dance, culture, entertainment" + +#: src/Model/Profile.php:993 +msgid "Hobbies/Interests" +msgstr "Hobbies/Interests:" + +#: src/Model/Profile.php:994 +msgid "Love/romance" +msgstr "Love/Romance:" + +#: src/Model/Profile.php:995 +msgid "Work/employment" +msgstr "Work/Employment:" + +#: src/Model/Profile.php:996 +msgid "School/education" +msgstr "School/Education:" + +#: src/Model/Profile.php:997 +msgid "Contact information and Social Networks" +msgstr "Contact information and other social networks:" + +#: src/Model/Storage/FilesystemConfig.php:77 msgid "Storage base path" msgstr "Storage base path" -#: src/Model/Storage/Filesystem.php:178 +#: src/Model/Storage/FilesystemConfig.php:79 msgid "" "Folder where uploaded files are saved. For maximum security, This should be " "a path outside web server folder tree" msgstr "Folder where uploaded files are saved. For maximum security, this should be a path outside web server folder tree" -#: src/Model/Storage/Filesystem.php:191 +#: src/Model/Storage/FilesystemConfig.php:92 msgid "Enter a valid existing folder" msgstr "Enter a valid existing folder" -#: src/Model/User.php:186 src/Model/User.php:931 +#: src/Model/User.php:208 src/Model/User.php:1050 msgid "SERIOUS ERROR: Generation of security keys failed." msgstr "SERIOUS ERROR: Generation of security keys failed." -#: src/Model/User.php:549 +#: src/Model/User.php:589 src/Model/User.php:622 msgid "Login failed" msgstr "Login failed" -#: src/Model/User.php:581 +#: src/Model/User.php:654 msgid "Not enough information to authenticate" msgstr "Not enough information to authenticate" -#: src/Model/User.php:676 +#: src/Model/User.php:749 msgid "Password can't be empty" msgstr "Password can't be empty" -#: src/Model/User.php:695 +#: src/Model/User.php:768 msgid "Empty passwords are not allowed." msgstr "Empty passwords are not allowed." -#: src/Model/User.php:699 +#: src/Model/User.php:772 msgid "" "The new password has been exposed in a public data dump, please choose " "another." msgstr "The new password has been exposed in a public data dump; please choose another." -#: src/Model/User.php:705 +#: src/Model/User.php:778 msgid "" "The password can't contain accentuated letters, white spaces or colons (:)" msgstr "The password can't contain accentuated letters, white spaces or colons (:)" -#: src/Model/User.php:811 +#: src/Model/User.php:930 msgid "Passwords do not match. Password unchanged." msgstr "Passwords do not match. Password unchanged." -#: src/Model/User.php:818 +#: src/Model/User.php:937 msgid "An invitation is required." msgstr "An invitation is required." -#: src/Model/User.php:822 +#: src/Model/User.php:941 msgid "Invitation could not be verified." msgstr "Invitation could not be verified." -#: src/Model/User.php:830 +#: src/Model/User.php:949 msgid "Invalid OpenID url" msgstr "Invalid OpenID URL" -#: src/Model/User.php:843 src/Security/Authentication.php:223 +#: src/Model/User.php:962 src/Security/Authentication.php:223 msgid "" "We encountered a problem while logging in with the OpenID you provided. " "Please check the correct spelling of the ID." msgstr "We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID." -#: src/Model/User.php:843 src/Security/Authentication.php:223 +#: src/Model/User.php:962 src/Security/Authentication.php:223 msgid "The error message was:" msgstr "The error message was:" -#: src/Model/User.php:849 +#: src/Model/User.php:968 msgid "Please enter the required information." msgstr "Please enter the required information." -#: src/Model/User.php:863 +#: src/Model/User.php:982 #, php-format msgid "" "system.username_min_length (%s) and system.username_max_length (%s) are " "excluding each other, swapping values." msgstr "system.username_min_length (%s) and system.username_max_length (%s) are excluding each other, swapping values." -#: src/Model/User.php:870 +#: src/Model/User.php:989 #, php-format msgid "Username should be at least %s character." msgid_plural "Username should be at least %s characters." msgstr[0] "Username should be at least %s character." msgstr[1] "Username should be at least %s characters." -#: src/Model/User.php:874 +#: src/Model/User.php:993 #, php-format msgid "Username should be at most %s character." msgid_plural "Username should be at most %s characters." msgstr[0] "Username should be at most %s character." msgstr[1] "Username should be at most %s characters." -#: src/Model/User.php:882 +#: src/Model/User.php:1001 msgid "That doesn't appear to be your full (First Last) name." msgstr "That doesn't appear to be your full (i.e first and last) name." -#: src/Model/User.php:887 +#: src/Model/User.php:1006 msgid "Your email domain is not among those allowed on this site." msgstr "Your email domain is not allowed on this site." -#: src/Model/User.php:891 +#: src/Model/User.php:1010 msgid "Not a valid email address." msgstr "Not a valid email address." -#: src/Model/User.php:894 +#: src/Model/User.php:1013 msgid "The nickname was blocked from registration by the nodes admin." msgstr "The nickname was blocked from registration by the nodes admin." -#: src/Model/User.php:898 src/Model/User.php:906 +#: src/Model/User.php:1017 src/Model/User.php:1025 msgid "Cannot use that email." msgstr "Cannot use that email." -#: src/Model/User.php:913 +#: src/Model/User.php:1032 msgid "Your nickname can only contain a-z, 0-9 and _." msgstr "Your nickname can only contain a-z, 0-9 and _." -#: src/Model/User.php:921 src/Model/User.php:978 +#: src/Model/User.php:1040 src/Model/User.php:1097 msgid "Nickname is already registered. Please choose another." msgstr "Nickname is already registered. Please choose another." -#: src/Model/User.php:965 src/Model/User.php:969 +#: src/Model/User.php:1084 src/Model/User.php:1088 msgid "An error occurred during registration. Please try again." msgstr "An error occurred during registration. Please try again." -#: src/Model/User.php:992 +#: src/Model/User.php:1111 msgid "An error occurred creating your default profile. Please try again." msgstr "An error occurred creating your default profile. Please try again." -#: src/Model/User.php:999 +#: src/Model/User.php:1118 msgid "An error occurred creating your self contact. Please try again." msgstr "An error occurred creating your self contact. Please try again." -#: src/Model/User.php:1004 +#: src/Model/User.php:1123 msgid "Friends" msgstr "Friends" -#: src/Model/User.php:1008 +#: src/Model/User.php:1127 msgid "" "An error occurred creating your default contact group. Please try again." msgstr "An error occurred while creating your default contact group. Please try again." -#: src/Model/User.php:1199 +#: src/Model/User.php:1165 +msgid "Profile Photos" +msgstr "Profile photos" + +#: src/Model/User.php:1359 #, php-format msgid "" "\n" @@ -5095,7 +4577,7 @@ msgid "" "\t\t\tthe administrator of %2$s has set up an account for you." msgstr "" -#: src/Model/User.php:1202 +#: src/Model/User.php:1362 #, php-format msgid "" "\n" @@ -5127,12 +4609,12 @@ msgid "" "\t\tThank you and welcome to %4$s." msgstr "" -#: src/Model/User.php:1235 src/Model/User.php:1342 +#: src/Model/User.php:1395 src/Model/User.php:1502 #, php-format msgid "Registration details for %s" msgstr "Registration details for %s" -#: src/Model/User.php:1255 +#: src/Model/User.php:1415 #, php-format msgid "" "\n" @@ -5147,12 +4629,12 @@ msgid "" "\t\t" msgstr "\n\t\t\tDear %1$s,\n\t\t\t\tThank you for registering at %2$s. Your account is pending for approval by the administrator.\n\n\t\t\tYour login details are as follows:\n\n\t\t\tSite Location:\t%3$s\n\t\t\tLogin Name:\t\t%4$s\n\t\t\tPassword:\t\t%5$s\n\t\t" -#: src/Model/User.php:1274 +#: src/Model/User.php:1434 #, php-format msgid "Registration at %s" msgstr "Registration at %s" -#: src/Model/User.php:1298 +#: src/Model/User.php:1458 #, php-format msgid "" "\n" @@ -5161,7 +4643,7 @@ msgid "" "\t\t\t" msgstr "\n\t\t\t\tDear %1$s,\n\t\t\t\tThank you for registering at %2$s. Your account has been created.\n\t\t\t" -#: src/Model/User.php:1306 +#: src/Model/User.php:1466 #, php-format msgid "" "\n" @@ -5219,12 +4701,13 @@ msgstr "Enable" #: src/Module/Admin/Addons/Details.php:111 #: src/Module/Admin/Addons/Index.php:67 -#: src/Module/Admin/Blocklist/Contact.php:78 +#: src/Module/Admin/Blocklist/Contact.php:94 #: src/Module/Admin/Blocklist/Server.php:88 -#: src/Module/Admin/Federation.php:141 src/Module/Admin/Item/Delete.php:65 -#: src/Module/Admin/Logs/Settings.php:80 src/Module/Admin/Logs/View.php:64 -#: src/Module/Admin/Queue.php:72 src/Module/Admin/Site.php:579 -#: src/Module/Admin/Summary.php:232 src/Module/Admin/Themes/Details.php:90 +#: src/Module/Admin/Federation.php:159 src/Module/Admin/Item/Delete.php:65 +#: src/Module/Admin/Logs/Settings.php:80 src/Module/Admin/Logs/View.php:83 +#: src/Module/Admin/Queue.php:72 src/Module/Admin/Site.php:499 +#: src/Module/Admin/Storage.php:139 src/Module/Admin/Summary.php:233 +#: src/Module/Admin/Themes/Details.php:90 #: src/Module/Admin/Themes/Index.php:111 src/Module/Admin/Tos.php:58 #: src/Module/Admin/Users/Active.php:136 #: src/Module/Admin/Users/Blocked.php:137 src/Module/Admin/Users/Create.php:61 @@ -5234,7 +4717,7 @@ msgid "Administration" msgstr "Administration" #: src/Module/Admin/Addons/Details.php:112 -#: src/Module/Admin/Addons/Index.php:68 src/Module/BaseAdmin.php:92 +#: src/Module/Admin/Addons/Index.php:68 src/Module/BaseAdmin.php:93 #: src/Module/BaseSettings.php:87 msgid "Addons" msgstr "Addons" @@ -5287,8 +4770,8 @@ msgstr "" msgid "List of active accounts" msgstr "" -#: src/Module/Admin/BaseUsers.php:66 src/Module/Contact.php:799 -#: src/Module/Contact.php:859 +#: src/Module/Admin/BaseUsers.php:66 src/Module/Contact.php:703 +#: src/Module/Contact.php:763 msgid "Pending" msgstr "Pending" @@ -5296,8 +4779,8 @@ msgstr "Pending" msgid "List of pending registrations" msgstr "" -#: src/Module/Admin/BaseUsers.php:74 src/Module/Contact.php:807 -#: src/Module/Contact.php:860 +#: src/Module/Admin/BaseUsers.php:74 src/Module/Contact.php:711 +#: src/Module/Contact.php:764 msgid "Blocked" msgstr "Blocked" @@ -5321,77 +4804,91 @@ msgstr "Private Forum" msgid "Relay" msgstr "Relay" -#: src/Module/Admin/Blocklist/Contact.php:57 +#: src/Module/Admin/Blocklist/Contact.php:54 +msgid "You can't block a local contact, please block the user instead" +msgstr "" + +#: src/Module/Admin/Blocklist/Contact.php:73 #, php-format msgid "%s contact unblocked" msgid_plural "%s contacts unblocked" msgstr[0] "%s contact unblocked" msgstr[1] "%s contacts unblocked" -#: src/Module/Admin/Blocklist/Contact.php:79 +#: src/Module/Admin/Blocklist/Contact.php:95 msgid "Remote Contact Blocklist" msgstr "Remote contact block-list" -#: src/Module/Admin/Blocklist/Contact.php:80 +#: src/Module/Admin/Blocklist/Contact.php:96 msgid "" "This page allows you to prevent any message from a remote contact to reach " "your node." msgstr "This page allows you to prevent any message from a remote contact to reach your node." -#: src/Module/Admin/Blocklist/Contact.php:81 +#: src/Module/Admin/Blocklist/Contact.php:97 msgid "Block Remote Contact" msgstr "Block remote contact" -#: src/Module/Admin/Blocklist/Contact.php:82 +#: src/Module/Admin/Blocklist/Contact.php:98 #: src/Module/Admin/Users/Active.php:138 #: src/Module/Admin/Users/Blocked.php:139 src/Module/Admin/Users/Index.php:151 #: src/Module/Admin/Users/Pending.php:103 msgid "select all" msgstr "select all" -#: src/Module/Admin/Blocklist/Contact.php:83 +#: src/Module/Admin/Blocklist/Contact.php:99 msgid "select none" msgstr "select none" -#: src/Module/Admin/Blocklist/Contact.php:85 +#: src/Module/Admin/Blocklist/Contact.php:101 #: src/Module/Admin/Users/Blocked.php:142 src/Module/Admin/Users/Index.php:156 -#: src/Module/Contact.php:625 src/Module/Contact.php:883 -#: src/Module/Contact.php:1165 +#: src/Module/Contact.php:544 src/Module/Contact.php:787 +#: src/Module/Contact.php:1064 msgid "Unblock" msgstr "Unblock" -#: src/Module/Admin/Blocklist/Contact.php:86 +#: src/Module/Admin/Blocklist/Contact.php:102 msgid "No remote contact is blocked from this node." msgstr "No remote contact is blocked from this node." -#: src/Module/Admin/Blocklist/Contact.php:88 +#: src/Module/Admin/Blocklist/Contact.php:104 msgid "Blocked Remote Contacts" msgstr "Blocked remote contacts" -#: src/Module/Admin/Blocklist/Contact.php:89 +#: src/Module/Admin/Blocklist/Contact.php:105 msgid "Block New Remote Contact" msgstr "Block new remote contact" -#: src/Module/Admin/Blocklist/Contact.php:90 +#: src/Module/Admin/Blocklist/Contact.php:106 msgid "Photo" msgstr "Photo" -#: src/Module/Admin/Blocklist/Contact.php:90 +#: src/Module/Admin/Blocklist/Contact.php:106 msgid "Reason" msgstr "Reason" -#: src/Module/Admin/Blocklist/Contact.php:98 +#: src/Module/Admin/Blocklist/Contact.php:114 #, php-format msgid "%s total blocked contact" msgid_plural "%s total blocked contacts" msgstr[0] "%s total blocked contact" msgstr[1] "%s blocked contacts" -#: src/Module/Admin/Blocklist/Contact.php:100 +#: src/Module/Admin/Blocklist/Contact.php:116 msgid "URL of the remote contact to block." msgstr "URL of the remote contact to block." -#: src/Module/Admin/Blocklist/Contact.php:101 +#: src/Module/Admin/Blocklist/Contact.php:117 +msgid "Also purge contact" +msgstr "" + +#: src/Module/Admin/Blocklist/Contact.php:117 +msgid "" +"Removes all content related to this contact from the node. Keeps the contact" +" record. This action canoot be undone." +msgstr "" + +#: src/Module/Admin/Blocklist/Contact.php:118 msgid "Block Reason" msgstr "Block reason" @@ -5405,7 +4902,7 @@ msgid "Blocked server domain pattern" msgstr "Blocked server domain pattern" #: src/Module/Admin/Blocklist/Server.php:80 -#: src/Module/Admin/Blocklist/Server.php:105 src/Module/Friendica.php:81 +#: src/Module/Admin/Blocklist/Server.php:105 src/Module/Friendica.php:82 msgid "Reason for the block" msgstr "Reason for the block" @@ -5555,26 +5052,26 @@ msgstr "Lock feature %s" msgid "Manage Additional Features" msgstr "Manage additional features" -#: src/Module/Admin/Federation.php:54 +#: src/Module/Admin/Federation.php:56 msgid "Other" msgstr "Other" -#: src/Module/Admin/Federation.php:108 src/Module/Admin/Federation.php:268 +#: src/Module/Admin/Federation.php:118 src/Module/Admin/Federation.php:348 msgid "unknown" msgstr "unknown" -#: src/Module/Admin/Federation.php:136 +#: src/Module/Admin/Federation.php:154 msgid "" "This page offers you some numbers to the known part of the federated social " "network your Friendica node is part of. These numbers are not complete but " "only reflect the part of the network your node is aware of." msgstr "This page offers statistics about the federated social network, of which your Friendica node is one part. These numbers do not represent the entire network, but merely the parts that are connected to your node.\"" -#: src/Module/Admin/Federation.php:142 src/Module/BaseAdmin.php:87 +#: src/Module/Admin/Federation.php:160 src/Module/BaseAdmin.php:87 msgid "Federation Statistics" msgstr "Federation statistics" -#: src/Module/Admin/Federation.php:146 +#: src/Module/Admin/Federation.php:164 #, php-format msgid "" "Currently this node is aware of %d nodes with %d registered users from the " @@ -5585,7 +5082,7 @@ msgstr "Currently, this node is aware of %d nodes with %d registered users from msgid "Item marked for deletion." msgstr "Item marked for deletion." -#: src/Module/Admin/Item/Delete.php:66 src/Module/BaseAdmin.php:105 +#: src/Module/Admin/Item/Delete.php:66 src/Module/BaseAdmin.php:106 msgid "Delete Item" msgstr "Delete item" @@ -5614,7 +5111,7 @@ msgstr "GUID" msgid "The GUID of the item you want to delete." msgstr "GUID of item to be deleted." -#: src/Module/Admin/Item/Source.php:57 src/Module/BaseAdmin.php:115 +#: src/Module/Admin/Item/Source.php:57 src/Module/BaseAdmin.php:116 msgid "Item Source" msgstr "Item source" @@ -5659,7 +5156,7 @@ msgstr "" msgid "Implicit Mention" msgstr "" -#: src/Module/Admin/Item/Source.php:73 +#: src/Module/Admin/Item/Source.php:73 src/Module/Admin/Logs/View.php:98 #: src/Module/Debug/ActivityPubConversion.php:62 msgid "Source" msgstr "" @@ -5677,8 +5174,8 @@ msgstr "PHP log currently enabled." msgid "PHP log currently disabled." msgstr "PHP log currently disabled." -#: src/Module/Admin/Logs/Settings.php:81 src/Module/BaseAdmin.php:107 -#: src/Module/BaseAdmin.php:108 +#: src/Module/Admin/Logs/Settings.php:81 src/Module/BaseAdmin.php:108 +#: src/Module/BaseAdmin.php:109 msgid "Logs" msgstr "Logs" @@ -5717,24 +5214,85 @@ msgid "" "'display_errors' is to enable these options, set to '0' to disable them." msgstr "To temporarily enable logging of PHP errors and warnings you can prepend the following to the index.php file of your installation. The filename set in the 'error_log' line is relative to the friendica top-level directory and must be writeable by the web server. The option '1' for 'log_errors' and 'display_errors' is to enable these options, set to '0' to disable them." -#: src/Module/Admin/Logs/View.php:40 +#: src/Module/Admin/Logs/View.php:70 #, php-format msgid "" -"Error trying to open %1$s log file.\\r\\n
Check to see " -"if file %1$s exist and is readable." -msgstr "Error trying to open %1$s log file.\\r\\n
Check to see if file %1$s exist and is readable." +"Error trying to open %1$s log file.
Check to see if " +"file %1$s exist and is readable." +msgstr "" -#: src/Module/Admin/Logs/View.php:44 +#: src/Module/Admin/Logs/View.php:79 #, php-format msgid "" -"Couldn't open %1$s log file.\\r\\n
Check to see if file" -" %1$s is readable." -msgstr "Couldn't open %1$s log file.\\r\\n
Check if file %1$s is readable." +"Couldn't open %1$s log file.
Check to see if file %1$s " +"is readable." +msgstr "" -#: src/Module/Admin/Logs/View.php:65 src/Module/BaseAdmin.php:109 +#: src/Module/Admin/Logs/View.php:84 src/Module/BaseAdmin.php:110 msgid "View Logs" msgstr "View logs" +#: src/Module/Admin/Logs/View.php:87 +msgid "Search in logs" +msgstr "" + +#: src/Module/Admin/Logs/View.php:88 +#: src/Module/Notifications/Notifications.php:126 +msgid "Show all" +msgstr "Show all" + +#: src/Module/Admin/Logs/View.php:89 +msgid "Date" +msgstr "" + +#: src/Module/Admin/Logs/View.php:90 +msgid "Level" +msgstr "" + +#: src/Module/Admin/Logs/View.php:91 +msgid "Context" +msgstr "" + +#: src/Module/Admin/Logs/View.php:93 +msgid "ALL" +msgstr "" + +#: src/Module/Admin/Logs/View.php:94 +msgid "View details" +msgstr "" + +#: src/Module/Admin/Logs/View.php:95 +msgid "Click to view details" +msgstr "" + +#: src/Module/Admin/Logs/View.php:97 +msgid "Data" +msgstr "" + +#: src/Module/Admin/Logs/View.php:99 +msgid "File" +msgstr "" + +#: src/Module/Admin/Logs/View.php:100 +msgid "Line" +msgstr "" + +#: src/Module/Admin/Logs/View.php:101 +msgid "Function" +msgstr "" + +#: src/Module/Admin/Logs/View.php:102 +msgid "UID" +msgstr "" + +#: src/Module/Admin/Logs/View.php:103 +msgid "Process ID" +msgstr "" + +#: src/Module/Admin/Logs/View.php:104 +msgid "Close" +msgstr "" + #: src/Module/Admin/Queue.php:50 msgid "Inspect Deferred Worker Queue" msgstr "Inspect deferred worker queue" @@ -5760,479 +5318,472 @@ msgid "ID" msgstr "ID" #: src/Module/Admin/Queue.php:76 +msgid "Command" +msgstr "" + +#: src/Module/Admin/Queue.php:77 msgid "Job Parameters" msgstr "Job parameters" -#: src/Module/Admin/Queue.php:77 -msgid "Created" -msgstr "Created" - -#: src/Module/Admin/Queue.php:78 +#: src/Module/Admin/Queue.php:79 msgid "Priority" msgstr "Priority" -#: src/Module/Admin/Site.php:69 +#: src/Module/Admin/Site.php:70 msgid "Can not parse base url. Must have at least ://" msgstr "Can not parse base URL. Must have at least ://" -#: src/Module/Admin/Site.php:123 +#: src/Module/Admin/Site.php:124 msgid "Relocation started. Could take a while to complete." msgstr "" -#: src/Module/Admin/Site.php:249 -msgid "Invalid storage backend setting value." -msgstr "Invalid storage backend setting." - -#: src/Module/Admin/Site.php:449 src/Module/Settings/Display.php:134 +#: src/Module/Admin/Site.php:404 src/Module/Settings/Display.php:139 msgid "No special theme for mobile devices" msgstr "No special theme for mobile devices" -#: src/Module/Admin/Site.php:466 src/Module/Settings/Display.php:144 +#: src/Module/Admin/Site.php:421 src/Module/Settings/Display.php:149 #, php-format msgid "%s - (Experimental)" msgstr "%s - (Experimental)" -#: src/Module/Admin/Site.php:478 +#: src/Module/Admin/Site.php:433 msgid "No community page for local users" msgstr "No community page for local users" -#: src/Module/Admin/Site.php:479 +#: src/Module/Admin/Site.php:434 msgid "No community page" msgstr "No community page" -#: src/Module/Admin/Site.php:480 +#: src/Module/Admin/Site.php:435 msgid "Public postings from users of this site" msgstr "Public postings from users of this site" -#: src/Module/Admin/Site.php:481 +#: src/Module/Admin/Site.php:436 msgid "Public postings from the federated network" msgstr "Public postings from the federated network" -#: src/Module/Admin/Site.php:482 +#: src/Module/Admin/Site.php:437 msgid "Public postings from local users and the federated network" msgstr "Public postings from local users and the federated network" -#: src/Module/Admin/Site.php:488 +#: src/Module/Admin/Site.php:443 msgid "Multi user instance" msgstr "Multi user instance" -#: src/Module/Admin/Site.php:516 +#: src/Module/Admin/Site.php:470 msgid "Closed" msgstr "Closed" -#: src/Module/Admin/Site.php:517 +#: src/Module/Admin/Site.php:471 msgid "Requires approval" msgstr "Requires approval" -#: src/Module/Admin/Site.php:518 +#: src/Module/Admin/Site.php:472 msgid "Open" msgstr "Open" -#: src/Module/Admin/Site.php:522 src/Module/Install.php:215 +#: src/Module/Admin/Site.php:476 src/Module/Install.php:215 msgid "No SSL policy, links will track page SSL state" msgstr "No SSL policy, links will track page SSL state" -#: src/Module/Admin/Site.php:523 src/Module/Install.php:216 +#: src/Module/Admin/Site.php:477 src/Module/Install.php:216 msgid "Force all links to use SSL" msgstr "Force all links to use SSL" -#: src/Module/Admin/Site.php:524 src/Module/Install.php:217 +#: src/Module/Admin/Site.php:478 src/Module/Install.php:217 msgid "Self-signed certificate, use SSL for local links only (discouraged)" msgstr "Self-signed certificate, use SSL for local links only (discouraged)" -#: src/Module/Admin/Site.php:528 +#: src/Module/Admin/Site.php:482 msgid "Don't check" msgstr "Don't check" -#: src/Module/Admin/Site.php:529 +#: src/Module/Admin/Site.php:483 msgid "check the stable version" msgstr "check for stable version updates" -#: src/Module/Admin/Site.php:530 +#: src/Module/Admin/Site.php:484 msgid "check the development version" msgstr "check for development version updates" -#: src/Module/Admin/Site.php:534 +#: src/Module/Admin/Site.php:488 msgid "none" msgstr "" -#: src/Module/Admin/Site.php:535 +#: src/Module/Admin/Site.php:489 msgid "Local contacts" msgstr "" -#: src/Module/Admin/Site.php:536 +#: src/Module/Admin/Site.php:490 msgid "Interactors" msgstr "" -#: src/Module/Admin/Site.php:549 -msgid "Database (legacy)" -msgstr "Database (legacy)" - -#: src/Module/Admin/Site.php:580 src/Module/BaseAdmin.php:90 +#: src/Module/Admin/Site.php:500 src/Module/BaseAdmin.php:90 msgid "Site" msgstr "Site" -#: src/Module/Admin/Site.php:581 +#: src/Module/Admin/Site.php:501 msgid "General Information" msgstr "" -#: src/Module/Admin/Site.php:583 +#: src/Module/Admin/Site.php:503 msgid "Republish users to directory" msgstr "Republish users to directory" -#: src/Module/Admin/Site.php:584 src/Module/Register.php:139 +#: src/Module/Admin/Site.php:504 src/Module/Register.php:141 msgid "Registration" msgstr "Registration" -#: src/Module/Admin/Site.php:585 +#: src/Module/Admin/Site.php:505 msgid "File upload" msgstr "File upload" -#: src/Module/Admin/Site.php:586 +#: src/Module/Admin/Site.php:506 msgid "Policies" msgstr "Policies" -#: src/Module/Admin/Site.php:588 +#: src/Module/Admin/Site.php:508 msgid "Auto Discovered Contact Directory" msgstr "Auto-discovered contact directory" -#: src/Module/Admin/Site.php:589 +#: src/Module/Admin/Site.php:509 msgid "Performance" msgstr "Performance" -#: src/Module/Admin/Site.php:590 +#: src/Module/Admin/Site.php:510 msgid "Worker" msgstr "Worker" -#: src/Module/Admin/Site.php:591 +#: src/Module/Admin/Site.php:511 msgid "Message Relay" msgstr "Message relay" -#: src/Module/Admin/Site.php:592 +#: src/Module/Admin/Site.php:512 +msgid "" +"Use the command \"console relay\" in the command line to add or remove " +"relays." +msgstr "" + +#: src/Module/Admin/Site.php:513 +msgid "The system is not subscribed to any relays at the moment." +msgstr "" + +#: src/Module/Admin/Site.php:514 +msgid "The system is currently subscribed to the following relays:" +msgstr "" + +#: src/Module/Admin/Site.php:516 msgid "Relocate Instance" msgstr "Relocate Instance" -#: src/Module/Admin/Site.php:593 +#: src/Module/Admin/Site.php:517 msgid "" "Warning! Advanced function. Could make this server " "unreachable." msgstr "" -#: src/Module/Admin/Site.php:597 +#: src/Module/Admin/Site.php:521 msgid "Site name" msgstr "Site name" -#: src/Module/Admin/Site.php:598 +#: src/Module/Admin/Site.php:522 msgid "Sender Email" msgstr "Sender email" -#: src/Module/Admin/Site.php:598 +#: src/Module/Admin/Site.php:522 msgid "" "The email address your server shall use to send notification emails from." msgstr "The email address your server shall use to send notification emails from." -#: src/Module/Admin/Site.php:599 +#: src/Module/Admin/Site.php:523 msgid "Name of the system actor" msgstr "" -#: src/Module/Admin/Site.php:599 +#: src/Module/Admin/Site.php:523 msgid "" "Name of the internal system account that is used to perform ActivityPub " "requests. This must be an unused username. If set, this can't be changed " "again." msgstr "" -#: src/Module/Admin/Site.php:600 +#: src/Module/Admin/Site.php:524 msgid "Banner/Logo" msgstr "Banner/Logo" -#: src/Module/Admin/Site.php:601 +#: src/Module/Admin/Site.php:525 msgid "Email Banner/Logo" msgstr "" -#: src/Module/Admin/Site.php:602 +#: src/Module/Admin/Site.php:526 msgid "Shortcut icon" msgstr "Shortcut icon" -#: src/Module/Admin/Site.php:602 +#: src/Module/Admin/Site.php:526 msgid "Link to an icon that will be used for browsers." msgstr "Link to an icon that will be used for browsers." -#: src/Module/Admin/Site.php:603 +#: src/Module/Admin/Site.php:527 msgid "Touch icon" msgstr "Touch icon" -#: src/Module/Admin/Site.php:603 +#: src/Module/Admin/Site.php:527 msgid "Link to an icon that will be used for tablets and mobiles." msgstr "Link to an icon that will be used for tablets and mobiles." -#: src/Module/Admin/Site.php:604 +#: src/Module/Admin/Site.php:528 msgid "Additional Info" msgstr "Additional Info" -#: src/Module/Admin/Site.php:604 +#: src/Module/Admin/Site.php:528 #, php-format msgid "" "For public servers: you can add additional information here that will be " "listed at %s/servers." msgstr "For public servers: You can add additional information here that will be listed at %s/servers." -#: src/Module/Admin/Site.php:605 +#: src/Module/Admin/Site.php:529 msgid "System language" msgstr "System language" -#: src/Module/Admin/Site.php:606 +#: src/Module/Admin/Site.php:530 msgid "System theme" msgstr "System theme" -#: src/Module/Admin/Site.php:606 +#: src/Module/Admin/Site.php:530 msgid "" "Default system theme - may be over-ridden by user profiles - Change default theme settings" msgstr "Default system theme - may be over-ridden by user profiles - Change default theme settings" -#: src/Module/Admin/Site.php:607 +#: src/Module/Admin/Site.php:531 msgid "Mobile system theme" msgstr "Mobile system theme" -#: src/Module/Admin/Site.php:607 +#: src/Module/Admin/Site.php:531 msgid "Theme for mobile devices" msgstr "Theme for mobile devices" -#: src/Module/Admin/Site.php:608 src/Module/Install.php:225 +#: src/Module/Admin/Site.php:532 src/Module/Install.php:225 msgid "SSL link policy" msgstr "SSL link policy" -#: src/Module/Admin/Site.php:608 src/Module/Install.php:227 +#: src/Module/Admin/Site.php:532 src/Module/Install.php:227 msgid "Determines whether generated links should be forced to use SSL" msgstr "Determines whether generated links should be forced to use SSL" -#: src/Module/Admin/Site.php:609 +#: src/Module/Admin/Site.php:533 msgid "Force SSL" msgstr "Force SSL" -#: src/Module/Admin/Site.php:609 +#: src/Module/Admin/Site.php:533 msgid "" "Force all Non-SSL requests to SSL - Attention: on some systems it could lead" " to endless loops." msgstr "Force all Non-SSL requests to SSL - Attention: on some systems it could lead to endless loops." -#: src/Module/Admin/Site.php:610 -msgid "Hide help entry from navigation menu" -msgstr "Hide help entry from navigation menu" +#: src/Module/Admin/Site.php:534 +msgid "Show help entry from navigation menu" +msgstr "" -#: src/Module/Admin/Site.php:610 +#: src/Module/Admin/Site.php:534 msgid "" -"Hides the menu entry for the Help pages from the navigation menu. You can " -"still access it calling /help directly." -msgstr "Hides the menu entry for the Help pages from the navigation menu. Help pages can still be accessed by calling ../help directly via its URL." +"Displays the menu entry for the Help pages from the navigation menu. It is " +"always accessible by calling /help directly." +msgstr "" -#: src/Module/Admin/Site.php:611 +#: src/Module/Admin/Site.php:535 msgid "Single user instance" msgstr "Single user instance" -#: src/Module/Admin/Site.php:611 +#: src/Module/Admin/Site.php:535 msgid "Make this instance multi-user or single-user for the named user" msgstr "Make this instance multi-user or single-user for the named user" -#: src/Module/Admin/Site.php:613 -msgid "File storage backend" -msgstr "File storage backend" - -#: src/Module/Admin/Site.php:613 -msgid "" -"The backend used to store uploaded data. If you change the storage backend, " -"you can manually move the existing files. If you do not do so, the files " -"uploaded before the change will still be available at the old backend. " -"Please see the settings documentation" -" for more information about the choices and the moving procedure." -msgstr "The backend used to store uploaded data. If you change the storage backend, you can manually move the existing files. If you do not do so, the files uploaded before the change will still be available at the old backend. Please see the settings documentation for more information about the choices and the moving procedure." - -#: src/Module/Admin/Site.php:615 +#: src/Module/Admin/Site.php:537 msgid "Maximum image size" msgstr "Maximum image size" -#: src/Module/Admin/Site.php:615 +#: src/Module/Admin/Site.php:537 msgid "" "Maximum size in bytes of uploaded images. Default is 0, which means no " "limits." msgstr "Maximum size in bytes of uploaded images. Default is 0, which means no limits." -#: src/Module/Admin/Site.php:616 +#: src/Module/Admin/Site.php:538 msgid "Maximum image length" msgstr "Maximum image length" -#: src/Module/Admin/Site.php:616 +#: src/Module/Admin/Site.php:538 msgid "" "Maximum length in pixels of the longest side of uploaded images. Default is " "-1, which means no limits." msgstr "Maximum length in pixels of the longest side of uploaded images. Default is -1, which means no limits." -#: src/Module/Admin/Site.php:617 +#: src/Module/Admin/Site.php:539 msgid "JPEG image quality" msgstr "JPEG image quality" -#: src/Module/Admin/Site.php:617 +#: src/Module/Admin/Site.php:539 msgid "" "Uploaded JPEGS will be saved at this quality setting [0-100]. Default is " "100, which is full quality." msgstr "Uploaded JPEGs will be saved at this quality setting [0-100]. Default is 100, which is the original quality level." -#: src/Module/Admin/Site.php:619 +#: src/Module/Admin/Site.php:541 msgid "Register policy" msgstr "Registration policy" -#: src/Module/Admin/Site.php:620 +#: src/Module/Admin/Site.php:542 msgid "Maximum Daily Registrations" msgstr "Maximum daily registrations" -#: src/Module/Admin/Site.php:620 +#: src/Module/Admin/Site.php:542 msgid "" "If registration is permitted above, this sets the maximum number of new user" " registrations to accept per day. If register is set to closed, this " "setting has no effect." msgstr "If open registration is permitted, this sets the maximum number of new registrations per day. This setting has no effect for registrations by approval." -#: src/Module/Admin/Site.php:621 +#: src/Module/Admin/Site.php:543 msgid "Register text" msgstr "Registration text" -#: src/Module/Admin/Site.php:621 +#: src/Module/Admin/Site.php:543 msgid "" "Will be displayed prominently on the registration page. You can use BBCode " "here." msgstr "Will be displayed prominently on the registration page. You may use BBCode here." -#: src/Module/Admin/Site.php:622 +#: src/Module/Admin/Site.php:544 msgid "Forbidden Nicknames" msgstr "Forbidden Nicknames" -#: src/Module/Admin/Site.php:622 +#: src/Module/Admin/Site.php:544 msgid "" "Comma separated list of nicknames that are forbidden from registration. " "Preset is a list of role names according RFC 2142." msgstr "Comma separated list of nicknames that are forbidden from registration. Preset is a list of role names according RFC 2142." -#: src/Module/Admin/Site.php:623 +#: src/Module/Admin/Site.php:545 msgid "Accounts abandoned after x days" msgstr "Accounts abandoned after so many days" -#: src/Module/Admin/Site.php:623 +#: src/Module/Admin/Site.php:545 msgid "" "Will not waste system resources polling external sites for abandonded " "accounts. Enter 0 for no time limit." msgstr "Will not waste system resources polling external sites for abandoned accounts. Enter 0 for no time limit." -#: src/Module/Admin/Site.php:624 +#: src/Module/Admin/Site.php:546 msgid "Allowed friend domains" msgstr "Allowed friend domains" -#: src/Module/Admin/Site.php:624 +#: src/Module/Admin/Site.php:546 msgid "" "Comma separated list of domains which are allowed to establish friendships " "with this site. Wildcards are accepted. Empty to allow any domains" msgstr "Comma-separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Leave empty to allow any domains" -#: src/Module/Admin/Site.php:625 +#: src/Module/Admin/Site.php:547 msgid "Allowed email domains" msgstr "Allowed email domains" -#: src/Module/Admin/Site.php:625 +#: src/Module/Admin/Site.php:547 msgid "" "Comma separated list of domains which are allowed in email addresses for " "registrations to this site. Wildcards are accepted. Empty to allow any " "domains" msgstr "Comma-separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Leave empty to allow any domains" -#: src/Module/Admin/Site.php:626 +#: src/Module/Admin/Site.php:548 msgid "No OEmbed rich content" msgstr "No OEmbed rich content" -#: src/Module/Admin/Site.php:626 +#: src/Module/Admin/Site.php:548 msgid "" "Don't show the rich content (e.g. embedded PDF), except from the domains " "listed below." msgstr "Don't show rich content (e.g. embedded PDF), except from the domains listed below." -#: src/Module/Admin/Site.php:627 +#: src/Module/Admin/Site.php:549 msgid "Trusted third-party domains" msgstr "" -#: src/Module/Admin/Site.php:627 +#: src/Module/Admin/Site.php:549 msgid "" "Comma separated list of domains from which content is allowed to be embedded" " in posts like with OEmbed. All sub-domains of the listed domains are " "allowed as well." msgstr "" -#: src/Module/Admin/Site.php:628 +#: src/Module/Admin/Site.php:550 msgid "Block public" msgstr "Block public" -#: src/Module/Admin/Site.php:628 +#: src/Module/Admin/Site.php:550 msgid "" "Check to block public access to all otherwise public personal pages on this " "site unless you are currently logged in." msgstr "Block public access to all otherwise public personal pages on this site, except for local users when logged in." -#: src/Module/Admin/Site.php:629 +#: src/Module/Admin/Site.php:551 msgid "Force publish" msgstr "Mandatory directory listing" -#: src/Module/Admin/Site.php:629 +#: src/Module/Admin/Site.php:551 msgid "" "Check to force all profiles on this site to be listed in the site directory." msgstr "Force all profiles on this site to be listed in the site directory." -#: src/Module/Admin/Site.php:629 +#: src/Module/Admin/Site.php:551 msgid "Enabling this may violate privacy laws like the GDPR" msgstr "Enabling this may violate privacy laws like the GDPR" -#: src/Module/Admin/Site.php:630 +#: src/Module/Admin/Site.php:552 msgid "Global directory URL" msgstr "Global directory URL" -#: src/Module/Admin/Site.php:630 +#: src/Module/Admin/Site.php:552 msgid "" "URL to the global directory. If this is not set, the global directory is " "completely unavailable to the application." msgstr "URL to the global directory: If this is not set, the global directory is completely unavailable to the application." -#: src/Module/Admin/Site.php:631 +#: src/Module/Admin/Site.php:553 msgid "Private posts by default for new users" msgstr "Private posts by default for new users" -#: src/Module/Admin/Site.php:631 +#: src/Module/Admin/Site.php:553 msgid "" "Set default post permissions for all new members to the default privacy " "group rather than public." msgstr "Set default post permissions for all new members to the default privacy group rather than public." -#: src/Module/Admin/Site.php:632 +#: src/Module/Admin/Site.php:554 msgid "Don't include post content in email notifications" msgstr "Don't include post content in email notifications" -#: src/Module/Admin/Site.php:632 +#: src/Module/Admin/Site.php:554 msgid "" "Don't include the content of a post/comment/private message/etc. in the " "email notifications that are sent out from this site, as a privacy measure." msgstr "Don't include the content of a post/comment/private message in the email notifications sent from this site, as a privacy measure." -#: src/Module/Admin/Site.php:633 +#: src/Module/Admin/Site.php:555 msgid "Disallow public access to addons listed in the apps menu." msgstr "Disallow public access to addons listed in the apps menu." -#: src/Module/Admin/Site.php:633 +#: src/Module/Admin/Site.php:555 msgid "" "Checking this box will restrict addons listed in the apps menu to members " "only." msgstr "Checking this box will restrict addons listed in the apps menu to members only." -#: src/Module/Admin/Site.php:634 +#: src/Module/Admin/Site.php:556 msgid "Don't embed private images in posts" msgstr "Don't embed private images in posts" -#: src/Module/Admin/Site.php:634 +#: src/Module/Admin/Site.php:556 msgid "" "Don't replace locally-hosted private photos in posts with an embedded copy " "of the image. This means that contacts who receive posts containing private " @@ -6240,11 +5791,11 @@ msgid "" "while." msgstr "Don't replace locally-hosted private photos in posts with an embedded copy of the image. This means that contacts who receive posts containing private photos will have to authenticate and load each image, which may take a while." -#: src/Module/Admin/Site.php:635 +#: src/Module/Admin/Site.php:557 msgid "Explicit Content" msgstr "Explicit Content" -#: src/Module/Admin/Site.php:635 +#: src/Module/Admin/Site.php:557 msgid "" "Set this to announce that your node is used mostly for explicit content that" " might not be suited for minors. This information will be published in the " @@ -6253,234 +5804,255 @@ msgid "" "will be shown at the user registration page." msgstr "Set this to announce that your node is used mostly for explicit content that might not be suited for minors. This information will be published in the node information and might be used, e.g. by the global directory, to filter your node from listings of nodes to join. Additionally a note about this will be shown at the user registration page." -#: src/Module/Admin/Site.php:636 +#: src/Module/Admin/Site.php:558 +msgid "Proxify external content" +msgstr "" + +#: src/Module/Admin/Site.php:558 +msgid "" +"Route external content via the proxy functionality. This is used for example" +" for some OEmbed accesses and in some other rare cases." +msgstr "" + +#: src/Module/Admin/Site.php:559 +msgid "Cache contact avatars" +msgstr "" + +#: src/Module/Admin/Site.php:559 +msgid "" +"Locally store the avatar pictures of the contacts. This uses a lot of " +"storage space but it increases the performance." +msgstr "" + +#: src/Module/Admin/Site.php:560 msgid "Allow Users to set remote_self" msgstr "Allow users to set \"Remote self\"" -#: src/Module/Admin/Site.php:636 +#: src/Module/Admin/Site.php:560 msgid "" "With checking this, every user is allowed to mark every contact as a " "remote_self in the repair contact dialog. Setting this flag on a contact " "causes mirroring every posting of that contact in the users stream." msgstr "This allows every user to mark contacts as a \"Remote self\" in the repair contact dialogue. Setting this flag on a contact will mirror every posting of that contact in the users stream." -#: src/Module/Admin/Site.php:637 -msgid "Block multiple registrations" -msgstr "Block multiple registrations" +#: src/Module/Admin/Site.php:561 +msgid "Enable multiple registrations" +msgstr "" -#: src/Module/Admin/Site.php:637 -msgid "Disallow users to register additional accounts for use as pages." -msgstr "Disallow users to sign up for additional accounts." +#: src/Module/Admin/Site.php:561 +msgid "Enable users to register additional accounts for use as pages." +msgstr "" -#: src/Module/Admin/Site.php:638 -msgid "Disable OpenID" -msgstr "Disable OpenID" +#: src/Module/Admin/Site.php:562 +msgid "Enable OpenID" +msgstr "" -#: src/Module/Admin/Site.php:638 -msgid "Disable OpenID support for registration and logins." -msgstr "Disable OpenID support for registration and logins." +#: src/Module/Admin/Site.php:562 +msgid "Enable OpenID support for registration and logins." +msgstr "" -#: src/Module/Admin/Site.php:639 -msgid "No Fullname check" -msgstr "No full name check" +#: src/Module/Admin/Site.php:563 +msgid "Enable Fullname check" +msgstr "" -#: src/Module/Admin/Site.php:639 +#: src/Module/Admin/Site.php:563 msgid "" -"Allow users to register without a space between the first name and the last " -"name in their full name." -msgstr "Allow users to register without a space between the first name and the last name in their full name." +"Enable check to only allow users to register with a space between the first " +"name and the last name in their full name." +msgstr "" -#: src/Module/Admin/Site.php:640 +#: src/Module/Admin/Site.php:564 msgid "Community pages for visitors" msgstr "Community pages for visitors" -#: src/Module/Admin/Site.php:640 +#: src/Module/Admin/Site.php:564 msgid "" "Which community pages should be available for visitors. Local users always " "see both pages." msgstr "Which community pages should be available for visitors. Local users always see both pages." -#: src/Module/Admin/Site.php:641 +#: src/Module/Admin/Site.php:565 msgid "Posts per user on community page" msgstr "Posts per user on community page" -#: src/Module/Admin/Site.php:641 +#: src/Module/Admin/Site.php:565 msgid "" "The maximum number of posts per user on the community page. (Not valid for " "\"Global Community\")" msgstr "The maximum number of posts per user on the community page. (Not valid for \"Global Community\")" -#: src/Module/Admin/Site.php:642 -msgid "Disable OStatus support" -msgstr "Disable OStatus support" +#: src/Module/Admin/Site.php:567 +msgid "Enable Mail support" +msgstr "" -#: src/Module/Admin/Site.php:642 +#: src/Module/Admin/Site.php:567 msgid "" -"Disable built-in OStatus (StatusNet, GNU Social etc.) compatibility. All " -"communications in OStatus are public, so privacy warnings will be " -"occasionally displayed." -msgstr "Disable built-in OStatus (StatusNet, GNU Social etc.) compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed." +"Enable built-in mail support to poll IMAP folders and to reply via mail." +msgstr "" -#: src/Module/Admin/Site.php:643 -msgid "OStatus support can only be enabled if threading is enabled." -msgstr "OStatus support can only be enabled if threading is enabled." +#: src/Module/Admin/Site.php:568 +msgid "" +"Mail support can't be enabled because the PHP IMAP module is not installed." +msgstr "" -#: src/Module/Admin/Site.php:645 +#: src/Module/Admin/Site.php:569 +msgid "Enable OStatus support" +msgstr "" + +#: src/Module/Admin/Site.php:569 +msgid "" +"Enable built-in OStatus (StatusNet, GNU Social etc.) compatibility. All " +"communications in OStatus are public." +msgstr "" + +#: src/Module/Admin/Site.php:571 msgid "" "Diaspora support can't be enabled because Friendica was installed into a sub" " directory." msgstr "diaspora* support can't be enabled because Friendica was installed into a sub directory." -#: src/Module/Admin/Site.php:646 +#: src/Module/Admin/Site.php:572 msgid "Enable Diaspora support" msgstr "Enable diaspora* support" -#: src/Module/Admin/Site.php:646 -msgid "Provide built-in Diaspora network compatibility." -msgstr "Provide built-in diaspora* network compatibility." - -#: src/Module/Admin/Site.php:647 -msgid "Only allow Friendica contacts" -msgstr "Only allow Friendica contacts" - -#: src/Module/Admin/Site.php:647 +#: src/Module/Admin/Site.php:572 msgid "" -"All contacts must use Friendica protocols. All other built-in communication " -"protocols disabled." -msgstr "All contacts must use Friendica protocols. All other built-in communication protocols will be disabled." +"Enable built-in Diaspora network compatibility for communicating with " +"diaspora servers." +msgstr "" -#: src/Module/Admin/Site.php:648 +#: src/Module/Admin/Site.php:573 msgid "Verify SSL" msgstr "Verify SSL" -#: src/Module/Admin/Site.php:648 +#: src/Module/Admin/Site.php:573 msgid "" "If you wish, you can turn on strict certificate checking. This will mean you" " cannot connect (at all) to self-signed SSL sites." msgstr "If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites." -#: src/Module/Admin/Site.php:649 +#: src/Module/Admin/Site.php:574 msgid "Proxy user" msgstr "Proxy user" -#: src/Module/Admin/Site.php:650 +#: src/Module/Admin/Site.php:575 msgid "Proxy URL" msgstr "Proxy URL" -#: src/Module/Admin/Site.php:651 +#: src/Module/Admin/Site.php:576 msgid "Network timeout" msgstr "Network timeout" -#: src/Module/Admin/Site.php:651 +#: src/Module/Admin/Site.php:576 msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." msgstr "Value is in seconds. Set to 0 for unlimited (not recommended)." -#: src/Module/Admin/Site.php:652 +#: src/Module/Admin/Site.php:577 msgid "Maximum Load Average" msgstr "Maximum load average" -#: src/Module/Admin/Site.php:652 +#: src/Module/Admin/Site.php:577 #, php-format msgid "" "Maximum system load before delivery and poll processes are deferred - " "default %d." msgstr "Maximum system load before delivery and poll processes are deferred - default %d." -#: src/Module/Admin/Site.php:653 +#: src/Module/Admin/Site.php:578 msgid "Maximum Load Average (Frontend)" msgstr "Maximum load average (frontend)" -#: src/Module/Admin/Site.php:653 +#: src/Module/Admin/Site.php:578 msgid "Maximum system load before the frontend quits service - default 50." msgstr "Maximum system load before the frontend quits service (default 50)." -#: src/Module/Admin/Site.php:654 +#: src/Module/Admin/Site.php:579 msgid "Minimal Memory" msgstr "Minimal memory" -#: src/Module/Admin/Site.php:654 +#: src/Module/Admin/Site.php:579 msgid "" "Minimal free memory in MB for the worker. Needs access to /proc/meminfo - " "default 0 (deactivated)." msgstr "Minimal free memory in MB for the worker. Needs access to /proc/meminfo - default 0 (deactivated)." -#: src/Module/Admin/Site.php:655 +#: src/Module/Admin/Site.php:580 msgid "Periodically optimize tables" msgstr "" -#: src/Module/Admin/Site.php:655 +#: src/Module/Admin/Site.php:580 msgid "Periodically optimize tables like the cache and the workerqueue" msgstr "" -#: src/Module/Admin/Site.php:657 +#: src/Module/Admin/Site.php:582 msgid "Discover followers/followings from contacts" msgstr "" -#: src/Module/Admin/Site.php:657 +#: src/Module/Admin/Site.php:582 msgid "" "If enabled, contacts are checked for their followers and following contacts." msgstr "" -#: src/Module/Admin/Site.php:658 +#: src/Module/Admin/Site.php:583 msgid "None - deactivated" msgstr "" -#: src/Module/Admin/Site.php:659 +#: src/Module/Admin/Site.php:584 msgid "" "Local contacts - contacts of our local contacts are discovered for their " "followers/followings." msgstr "" -#: src/Module/Admin/Site.php:660 +#: src/Module/Admin/Site.php:585 msgid "" "Interactors - contacts of our local contacts and contacts who interacted on " "locally visible postings are discovered for their followers/followings." msgstr "" -#: src/Module/Admin/Site.php:662 +#: src/Module/Admin/Site.php:587 msgid "Synchronize the contacts with the directory server" msgstr "" -#: src/Module/Admin/Site.php:662 +#: src/Module/Admin/Site.php:587 msgid "" "if enabled, the system will check periodically for new contacts on the " "defined directory server." msgstr "" -#: src/Module/Admin/Site.php:664 +#: src/Module/Admin/Site.php:589 msgid "Days between requery" msgstr "Days between enquiry" -#: src/Module/Admin/Site.php:664 +#: src/Module/Admin/Site.php:589 msgid "Number of days after which a server is requeried for his contacts." msgstr "Number of days after which a server is rechecked for contacts." -#: src/Module/Admin/Site.php:665 +#: src/Module/Admin/Site.php:590 msgid "Discover contacts from other servers" msgstr "Discover contacts from other servers" -#: src/Module/Admin/Site.php:665 +#: src/Module/Admin/Site.php:590 msgid "" "Periodically query other servers for contacts. The system queries Friendica," " Mastodon and Hubzilla servers." msgstr "" -#: src/Module/Admin/Site.php:666 +#: src/Module/Admin/Site.php:591 msgid "Search the local directory" msgstr "Search the local directory" -#: src/Module/Admin/Site.php:666 +#: src/Module/Admin/Site.php:591 msgid "" "Search the local directory instead of the global directory. When searching " "locally, every search will be executed on the global directory in the " "background. This improves the search results when the search is repeated." msgstr "Search the local directory instead of the global directory. When searching locally, every search will be executed on the global directory in the background. This improves the search results when the search is repeated." -#: src/Module/Admin/Site.php:668 +#: src/Module/Admin/Site.php:593 msgid "Publish server information" msgstr "Publish server information" -#: src/Module/Admin/Site.php:668 +#: src/Module/Admin/Site.php:593 msgid "" "If enabled, general server and usage data will be published. The data " "contains the name and version of the server, number of users with public " @@ -6488,50 +6060,50 @@ msgid "" " href=\"http://the-federation.info/\">the-federation.info for details." msgstr "If enabled, general server and usage data will be published. The data contains the name and version of the server, number of users with public profiles, number of posts and the activated protocols and connectors. See the-federation.info for details." -#: src/Module/Admin/Site.php:670 +#: src/Module/Admin/Site.php:595 msgid "Check upstream version" msgstr "Check upstream version" -#: src/Module/Admin/Site.php:670 +#: src/Module/Admin/Site.php:595 msgid "" "Enables checking for new Friendica versions at github. If there is a new " "version, you will be informed in the admin panel overview." msgstr "Enables checking for new Friendica versions at github. If there is a new version, you will be informed in the admin panel overview." -#: src/Module/Admin/Site.php:671 +#: src/Module/Admin/Site.php:596 msgid "Suppress Tags" msgstr "Suppress tags" -#: src/Module/Admin/Site.php:671 +#: src/Module/Admin/Site.php:596 msgid "Suppress showing a list of hashtags at the end of the posting." msgstr "Suppress listed hashtags at the end of posts." -#: src/Module/Admin/Site.php:672 +#: src/Module/Admin/Site.php:597 msgid "Clean database" msgstr "Clean database" -#: src/Module/Admin/Site.php:672 +#: src/Module/Admin/Site.php:597 msgid "" "Remove old remote items, orphaned database records and old content from some" " other helper tables." msgstr "Remove old remote items, orphaned database records, and old content from some other helper tables." -#: src/Module/Admin/Site.php:673 +#: src/Module/Admin/Site.php:598 msgid "Lifespan of remote items" msgstr "Lifespan of remote items" -#: src/Module/Admin/Site.php:673 +#: src/Module/Admin/Site.php:598 msgid "" "When the database cleanup is enabled, this defines the days after which " "remote items will be deleted. Own items, and marked or filed items are " "always kept. 0 disables this behaviour." msgstr "If the database cleanup is enabled, this defines the days after which remote items will be deleted. Own items, and marked or filed items, are always kept. 0 disables this behavior." -#: src/Module/Admin/Site.php:674 +#: src/Module/Admin/Site.php:599 msgid "Lifespan of unclaimed items" msgstr "Lifespan of unclaimed items" -#: src/Module/Admin/Site.php:674 +#: src/Module/Admin/Site.php:599 msgid "" "When the database cleanup is enabled, this defines the days after which " "unclaimed remote items (mostly content from the relay) will be deleted. " @@ -6539,215 +6111,199 @@ msgid "" "items if set to 0." msgstr "If the database cleanup is enabled, this defines the days after which unclaimed remote items (mostly content from the relay) will be deleted. Default value is 90 days. Defaults to the general lifespan value of remote items if set to 0." -#: src/Module/Admin/Site.php:675 +#: src/Module/Admin/Site.php:600 msgid "Lifespan of raw conversation data" msgstr "Lifespan of raw conversation data" -#: src/Module/Admin/Site.php:675 +#: src/Module/Admin/Site.php:600 msgid "" "The conversation data is used for ActivityPub and OStatus, as well as for " "debug purposes. It should be safe to remove it after 14 days, default is 90 " "days." msgstr "The conversation data is used for ActivityPub and OStatus, as well as for debug purposes. It should be safe to remove it after 14 days, default is 90 days." -#: src/Module/Admin/Site.php:676 -msgid "Path to item cache" -msgstr "Path to item cache" - -#: src/Module/Admin/Site.php:676 -msgid "The item caches buffers generated bbcode and external images." -msgstr "The item cache retains expanded bbcode and external images." - -#: src/Module/Admin/Site.php:677 -msgid "Cache duration in seconds" -msgstr "Cache duration in seconds" - -#: src/Module/Admin/Site.php:677 -msgid "" -"How long should the cache files be hold? Default value is 86400 seconds (One" -" day). To disable the item cache, set the value to -1." -msgstr "How long should cache files be held? (Default 86400 seconds - one day; -1 disables item cache)" - -#: src/Module/Admin/Site.php:678 +#: src/Module/Admin/Site.php:601 msgid "Maximum numbers of comments per post" msgstr "Maximum number of comments per post" -#: src/Module/Admin/Site.php:678 +#: src/Module/Admin/Site.php:601 msgid "How much comments should be shown for each post? Default value is 100." msgstr "How many comments should be shown for each post? (Default 100)" -#: src/Module/Admin/Site.php:679 +#: src/Module/Admin/Site.php:602 msgid "Maximum numbers of comments per post on the display page" msgstr "" -#: src/Module/Admin/Site.php:679 +#: src/Module/Admin/Site.php:602 msgid "" "How many comments should be shown on the single view for each post? Default " "value is 1000." msgstr "" -#: src/Module/Admin/Site.php:680 +#: src/Module/Admin/Site.php:603 msgid "Temp path" msgstr "Temp path" -#: src/Module/Admin/Site.php:680 +#: src/Module/Admin/Site.php:603 msgid "" "If you have a restricted system where the webserver can't access the system " "temp path, enter another path here." msgstr "Enter a different temp path if your system restricts the webserver's access to the system temp path." -#: src/Module/Admin/Site.php:681 -msgid "Disable picture proxy" -msgstr "Disable picture proxy" - -#: src/Module/Admin/Site.php:681 -msgid "" -"The picture proxy increases performance and privacy. It shouldn't be used on" -" systems with very low bandwidth." -msgstr "The picture proxy increases performance and privacy. It shouldn't be used on systems with very low bandwidth." - -#: src/Module/Admin/Site.php:682 +#: src/Module/Admin/Site.php:604 msgid "Only search in tags" msgstr "Only search in tags" -#: src/Module/Admin/Site.php:682 +#: src/Module/Admin/Site.php:604 msgid "On large systems the text search can slow down the system extremely." msgstr "On large systems, the text search can slow down the system significantly." -#: src/Module/Admin/Site.php:684 +#: src/Module/Admin/Site.php:606 msgid "New base url" msgstr "New base URL" -#: src/Module/Admin/Site.php:684 +#: src/Module/Admin/Site.php:606 msgid "" "Change base url for this server. Sends relocate message to all Friendica and" " Diaspora* contacts of all users." msgstr "Change base URL for this server. Sends a relocate message to all Friendica and diaspora* contacts, for all users." -#: src/Module/Admin/Site.php:686 -msgid "RINO Encryption" -msgstr "RINO Encryption" - -#: src/Module/Admin/Site.php:686 -msgid "Encryption layer between nodes." -msgstr "Encryption layer between nodes." - -#: src/Module/Admin/Site.php:686 src/Module/Admin/Site.php:694 -#: src/Module/Contact.php:554 src/Module/Settings/TwoFactor/Index.php:118 -msgid "Disabled" -msgstr "Disabled" - -#: src/Module/Admin/Site.php:686 -msgid "Enabled" -msgstr "Enabled" - -#: src/Module/Admin/Site.php:688 +#: src/Module/Admin/Site.php:608 msgid "Maximum number of parallel workers" msgstr "Maximum number of parallel workers" -#: src/Module/Admin/Site.php:688 +#: src/Module/Admin/Site.php:608 #, php-format msgid "" "On shared hosters set this to %d. On larger systems, values of %d are great." " Default value is %d." msgstr "On shared hosters set this to %d. On larger systems, values of %d are great. Default value is %d." -#: src/Module/Admin/Site.php:689 +#: src/Module/Admin/Site.php:609 msgid "Enable fastlane" msgstr "Enable fast-lane" -#: src/Module/Admin/Site.php:689 +#: src/Module/Admin/Site.php:609 msgid "" "When enabed, the fastlane mechanism starts an additional worker if processes" " with higher priority are blocked by processes of lower priority." msgstr "The fast-lane mechanism starts an additional worker if processes with higher priority are blocked by processes of lower priority." -#: src/Module/Admin/Site.php:691 -msgid "Use relay servers" -msgstr "" - -#: src/Module/Admin/Site.php:691 -msgid "" -"Enables the receiving of public posts from relay servers. They will be " -"included in the search, subscribed tags and on the global community page." -msgstr "" - -#: src/Module/Admin/Site.php:692 -msgid "\"Social Relay\" server" -msgstr "" - -#: src/Module/Admin/Site.php:692 -#, php-format -msgid "" -"Address of the \"Social Relay\" server where public posts should be send to." -" For example %s. ActivityRelay servers are administrated via the \"console " -"relay\" command line command." -msgstr "" - -#: src/Module/Admin/Site.php:693 +#: src/Module/Admin/Site.php:611 msgid "Direct relay transfer" msgstr "Direct relay transfer" -#: src/Module/Admin/Site.php:693 +#: src/Module/Admin/Site.php:611 msgid "" "Enables the direct transfer to other servers without using the relay servers" msgstr "Enables direct transfer to other servers without using a relay server." -#: src/Module/Admin/Site.php:694 +#: src/Module/Admin/Site.php:612 msgid "Relay scope" msgstr "Relay scope" -#: src/Module/Admin/Site.php:694 +#: src/Module/Admin/Site.php:612 msgid "" "Can be \"all\" or \"tags\". \"all\" means that every public post should be " "received. \"tags\" means that only posts with selected tags should be " "received." msgstr "Can be \"all\" or \"tags\". \"all\" means that every public post should be received. \"tags\" means that only posts with selected tags should be received." -#: src/Module/Admin/Site.php:694 +#: src/Module/Admin/Site.php:612 src/Module/Contact.php:473 +#: src/Module/Settings/TwoFactor/Index.php:118 +msgid "Disabled" +msgstr "Disabled" + +#: src/Module/Admin/Site.php:612 msgid "all" msgstr "all" -#: src/Module/Admin/Site.php:694 +#: src/Module/Admin/Site.php:612 msgid "tags" msgstr "tags" -#: src/Module/Admin/Site.php:695 +#: src/Module/Admin/Site.php:613 msgid "Server tags" msgstr "Server tags" -#: src/Module/Admin/Site.php:695 +#: src/Module/Admin/Site.php:613 msgid "Comma separated list of tags for the \"tags\" subscription." msgstr "Comma separated list of tags for the \"tags\" subscription." -#: src/Module/Admin/Site.php:696 +#: src/Module/Admin/Site.php:614 msgid "Deny Server tags" msgstr "Deny server tags" -#: src/Module/Admin/Site.php:696 +#: src/Module/Admin/Site.php:614 msgid "Comma separated list of tags that are rejected." msgstr "" -#: src/Module/Admin/Site.php:697 +#: src/Module/Admin/Site.php:615 msgid "Allow user tags" msgstr "Allow user tags" -#: src/Module/Admin/Site.php:697 +#: src/Module/Admin/Site.php:615 msgid "" "If enabled, the tags from the saved searches will used for the \"tags\" " "subscription in addition to the \"relay_server_tags\"." msgstr "If enabled, the tags from the saved searches will used for the \"tags\" subscription in addition to the \"relay_server_tags\"." -#: src/Module/Admin/Site.php:700 +#: src/Module/Admin/Site.php:618 msgid "Start Relocation" msgstr "Start relocation" -#: src/Module/Admin/Summary.php:53 +#: src/Module/Admin/Storage.php:46 +#, php-format +msgid "Storage backend, %s is invalid." +msgstr "" + +#: src/Module/Admin/Storage.php:73 +#, php-format +msgid "Storage backend %s error: %s" +msgstr "" + +#: src/Module/Admin/Storage.php:85 src/Module/Admin/Storage.php:88 +msgid "Invalid storage backend setting value." +msgstr "Invalid storage backend setting." + +#: src/Module/Admin/Storage.php:140 +msgid "Current Storage Backend" +msgstr "" + +#: src/Module/Admin/Storage.php:141 +msgid "Storage Configuration" +msgstr "" + +#: src/Module/Admin/Storage.php:142 src/Module/BaseAdmin.php:91 +msgid "Storage" +msgstr "" + +#: src/Module/Admin/Storage.php:144 +msgid "Save & Use storage backend" +msgstr "" + +#: src/Module/Admin/Storage.php:145 +msgid "Use storage backend" +msgstr "" + +#: src/Module/Admin/Storage.php:146 +msgid "Save & Reload" +msgstr "" + +#: src/Module/Admin/Storage.php:147 +msgid "This backend doesn't have custom settings" +msgstr "" + +#: src/Module/Admin/Storage.php:150 +msgid "Database (legacy)" +msgstr "Database (legacy)" + +#: src/Module/Admin/Summary.php:54 #, php-format msgid "Template engine (%s) error: %s" msgstr "" -#: src/Module/Admin/Summary.php:57 +#: src/Module/Admin/Summary.php:58 #, php-format msgid "" "Your DB still runs with MyISAM tables. You should change the engine type to " @@ -6758,7 +6314,7 @@ msgid "" " an automatic conversion.
" msgstr "Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB-only features in the future, you should change this! See here for a guide that may be helpful converting the table engines. You may also use the command php bin/console.php dbstructure toinnodb of your Friendica installation for an automatic conversion.
" -#: src/Module/Admin/Summary.php:62 +#: src/Module/Admin/Summary.php:63 #, php-format msgid "" "Your DB still runs with InnoDB tables in the Antelope file format. You " @@ -6769,7 +6325,7 @@ msgid "" " installation for an automatic conversion.
" msgstr "" -#: src/Module/Admin/Summary.php:72 +#: src/Module/Admin/Summary.php:73 #, php-format msgid "" "Your table_definition_cache is too low (%d). This can lead to the database " @@ -6777,39 +6333,39 @@ msgid "" " to %d. See here for more information.
" msgstr "" -#: src/Module/Admin/Summary.php:82 +#: src/Module/Admin/Summary.php:83 #, php-format msgid "" "There is a new version of Friendica available for download. Your current " "version is %1$s, upstream version is %2$s" msgstr "A new Friendica version is available now. Your current version is %1$s, upstream version is %2$s" -#: src/Module/Admin/Summary.php:91 +#: src/Module/Admin/Summary.php:92 msgid "" "The database update failed. Please run \"php bin/console.php dbstructure " "update\" from the command line and have a look at the errors that might " "appear." msgstr "The database update failed. Please run \"php bin/console.php dbstructure update\" from the command line and check for errors that may appear." -#: src/Module/Admin/Summary.php:95 +#: src/Module/Admin/Summary.php:96 msgid "" "The last update failed. Please run \"php bin/console.php dbstructure " "update\" from the command line and have a look at the errors that might " "appear. (Some of the errors are possibly inside the logfile.)" msgstr "The last update failed. Please run \"php bin/console.php dbstructure update\" from the command line and have a look at the errors that may appear in the console and logfile output." -#: src/Module/Admin/Summary.php:100 +#: src/Module/Admin/Summary.php:101 msgid "The worker was never executed. Please check your database structure!" msgstr "The worker process has never been executed. Please check your database structure!" -#: src/Module/Admin/Summary.php:102 +#: src/Module/Admin/Summary.php:103 #, php-format msgid "" "The last worker execution was on %s UTC. This is older than one hour. Please" " check your crontab settings." msgstr "The last worker process started at %s UTC. This is more than one hour ago. Please adjust your crontab settings." -#: src/Module/Admin/Summary.php:107 +#: src/Module/Admin/Summary.php:108 #, php-format msgid "" "Friendica's configuration now is stored in config/local.config.php, please " @@ -6818,7 +6374,7 @@ msgid "" "help with the transition." msgstr "Friendica's configuration is now stored in config/local.config.php; please copy config/local-sample.config.php and move your config from config/local.ini.php. See the Config help page for help with the transition..htconfig.php. See the Config help page for help with the transition." -#: src/Module/Admin/Summary.php:111 +#: src/Module/Admin/Summary.php:112 #, php-format msgid "" "Friendica's configuration now is stored in config/local.config.php, please " @@ -6827,7 +6383,7 @@ msgid "" "page for help with the transition." msgstr "Friendica's configuration is now stored in config/local.config.php; please copy config/local-sample.config.php and move your config from config/local.ini.php. See the Config help page for help with the transition." -#: src/Module/Admin/Summary.php:117 +#: src/Module/Admin/Summary.php:118 #, php-format msgid "" "%s is not reachable on your system. This is a severe " @@ -6835,87 +6391,83 @@ msgid "" "href=\"%s\">the installation page for help." msgstr "%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help." -#: src/Module/Admin/Summary.php:135 +#: src/Module/Admin/Summary.php:136 #, php-format msgid "The logfile '%s' is not usable. No logging possible (error: '%s')" msgstr "The logfile '%s' is not usable. No logging is possible (error: '%s')" -#: src/Module/Admin/Summary.php:149 +#: src/Module/Admin/Summary.php:150 #, php-format msgid "" "The debug logfile '%s' is not usable. No logging possible (error: '%s')" msgstr "The debug logfile '%s' is not usable. No logging is possible (error: '%s')" -#: src/Module/Admin/Summary.php:165 +#: src/Module/Admin/Summary.php:166 #, php-format msgid "" "Friendica's system.basepath was updated from '%s' to '%s'. Please remove the" " system.basepath from your db to avoid differences." msgstr "The system.basepath was updated from '%s' to '%s'. Please remove the system.basepath from your db to avoid differences." -#: src/Module/Admin/Summary.php:173 +#: src/Module/Admin/Summary.php:174 #, php-format msgid "" "Friendica's current system.basepath '%s' is wrong and the config file '%s' " "isn't used." msgstr "The current system.basepath '%s' is wrong and the config file '%s' isn't used." -#: src/Module/Admin/Summary.php:181 +#: src/Module/Admin/Summary.php:182 #, php-format msgid "" "Friendica's current system.basepath '%s' is not equal to the config file " "'%s'. Please fix your configuration." msgstr "The current system.basepath '%s' is not equal to the config file '%s'. Please fix your configuration." -#: src/Module/Admin/Summary.php:188 +#: src/Module/Admin/Summary.php:189 msgid "Normal Account" msgstr "Standard account" -#: src/Module/Admin/Summary.php:189 +#: src/Module/Admin/Summary.php:190 msgid "Automatic Follower Account" msgstr "Automatic follower account" -#: src/Module/Admin/Summary.php:190 +#: src/Module/Admin/Summary.php:191 msgid "Public Forum Account" msgstr "Public forum account" -#: src/Module/Admin/Summary.php:191 +#: src/Module/Admin/Summary.php:192 msgid "Automatic Friend Account" msgstr "Automatic friend account" -#: src/Module/Admin/Summary.php:192 +#: src/Module/Admin/Summary.php:193 msgid "Blog Account" msgstr "Blog account" -#: src/Module/Admin/Summary.php:193 +#: src/Module/Admin/Summary.php:194 msgid "Private Forum Account" msgstr "Private forum account" -#: src/Module/Admin/Summary.php:213 +#: src/Module/Admin/Summary.php:214 msgid "Message queues" msgstr "Message queues" -#: src/Module/Admin/Summary.php:219 +#: src/Module/Admin/Summary.php:220 msgid "Server Settings" msgstr "Server Settings" -#: src/Module/Admin/Summary.php:233 src/Repository/ProfileField.php:285 -msgid "Summary" -msgstr "Summary" - -#: src/Module/Admin/Summary.php:235 +#: src/Module/Admin/Summary.php:236 msgid "Registered users" msgstr "Signed up users" -#: src/Module/Admin/Summary.php:237 +#: src/Module/Admin/Summary.php:238 msgid "Pending registrations" msgstr "Pending registrations" -#: src/Module/Admin/Summary.php:238 +#: src/Module/Admin/Summary.php:239 msgid "Version" msgstr "Version" -#: src/Module/Admin/Summary.php:242 +#: src/Module/Admin/Summary.php:243 msgid "Active addons" msgstr "Active addons" @@ -6939,7 +6491,7 @@ msgid "Screenshot" msgstr "Screenshot" #: src/Module/Admin/Themes/Details.php:91 -#: src/Module/Admin/Themes/Index.php:112 src/Module/BaseAdmin.php:93 +#: src/Module/Admin/Themes/Index.php:112 src/Module/BaseAdmin.php:94 msgid "Themes" msgstr "Theme selection" @@ -7143,7 +6695,7 @@ msgid "Permanent deletion" msgstr "Permanent deletion" #: src/Module/Admin/Users/Index.php:150 src/Module/Admin/Users/Index.php:160 -#: src/Module/BaseAdmin.php:91 +#: src/Module/BaseAdmin.php:92 msgid "Users" msgstr "Users" @@ -7193,21 +6745,47 @@ msgstr "Note from the user" msgid "Deny" msgstr "Deny" -#: src/Module/Api/Mastodon/Unimplemented.php:42 +#: src/Module/Api/Mastodon/Apps.php:58 +msgid "Missing parameters" +msgstr "" + +#: src/Module/Api/Mastodon/Statuses/Bookmark.php:51 +msgid "Only starting posts can be bookmarked" +msgstr "" + +#: src/Module/Api/Mastodon/Statuses/Mute.php:50 +msgid "Only starting posts can be muted" +msgstr "" + +#: src/Module/Api/Mastodon/Statuses/Pin.php:50 +#: src/Module/Api/Mastodon/Statuses/Unpin.php:50 +msgid "Only starting posts can be pinned" +msgstr "" + +#: src/Module/Api/Mastodon/Statuses/Reblog.php:53 #, php-format -msgid "API endpoint \"%s\" is not implemented" +msgid "Posts from %s can't be shared" msgstr "" -#: src/Module/Api/Mastodon/Unimplemented.php:43 -msgid "" -"The API endpoint is currently not implemented but might be in the future." +#: src/Module/Api/Mastodon/Statuses/Unbookmark.php:51 +msgid "Only starting posts can be unbookmarked" msgstr "" -#: src/Module/Api/Twitter/ContactEndpoint.php:65 src/Module/Contact.php:400 +#: src/Module/Api/Mastodon/Statuses/Unmute.php:50 +msgid "Only starting posts can be unmuted" +msgstr "" + +#: src/Module/Api/Mastodon/Statuses/Unreblog.php:53 +#, php-format +msgid "Posts from %s can't be unshared" +msgstr "" + +#: src/Module/Api/Twitter/ContactEndpoint.php:63 src/Module/Contact.php:343 +#: src/Module/Contact.php:358 msgid "Contact not found" msgstr "Contact not found" -#: src/Module/Api/Twitter/ContactEndpoint.php:135 +#: src/Module/Api/Twitter/ContactEndpoint.php:133 msgid "Profile not found" msgstr "" @@ -7219,10 +6797,14 @@ msgstr "No installed applications." msgid "Applications" msgstr "Applications" -#: src/Module/Attach.php:50 src/Module/Attach.php:62 +#: src/Module/Attach.php:49 src/Module/Attach.php:61 msgid "Item was not found." msgstr "Item was not found." +#: src/Module/BaseAdmin.php:54 src/Module/BaseAdmin.php:58 +msgid "Please login to continue." +msgstr "Please login to continue." + #: src/Module/BaseAdmin.php:63 msgid "You don't have access to administration pages." msgstr "" @@ -7241,79 +6823,102 @@ msgstr "Overview" msgid "Configuration" msgstr "Configuration" -#: src/Module/BaseAdmin.php:94 src/Module/BaseSettings.php:65 +#: src/Module/BaseAdmin.php:95 src/Module/BaseSettings.php:65 msgid "Additional features" msgstr "Additional features" -#: src/Module/BaseAdmin.php:97 +#: src/Module/BaseAdmin.php:98 msgid "Database" msgstr "Database" -#: src/Module/BaseAdmin.php:98 +#: src/Module/BaseAdmin.php:99 msgid "DB updates" msgstr "DB updates" -#: src/Module/BaseAdmin.php:99 +#: src/Module/BaseAdmin.php:100 msgid "Inspect Deferred Workers" msgstr "Inspect deferred workers" -#: src/Module/BaseAdmin.php:100 +#: src/Module/BaseAdmin.php:101 msgid "Inspect worker Queue" msgstr "Inspect worker queue" -#: src/Module/BaseAdmin.php:102 +#: src/Module/BaseAdmin.php:103 msgid "Tools" msgstr "Tools" -#: src/Module/BaseAdmin.php:103 +#: src/Module/BaseAdmin.php:104 msgid "Contact Blocklist" msgstr "Contact block-list" -#: src/Module/BaseAdmin.php:104 +#: src/Module/BaseAdmin.php:105 msgid "Server Blocklist" msgstr "Server block-list" -#: src/Module/BaseAdmin.php:111 +#: src/Module/BaseAdmin.php:112 msgid "Diagnostics" msgstr "Diagnostics" -#: src/Module/BaseAdmin.php:112 +#: src/Module/BaseAdmin.php:113 msgid "PHP Info" msgstr "PHP info" -#: src/Module/BaseAdmin.php:113 +#: src/Module/BaseAdmin.php:114 msgid "probe address" msgstr "Probe address" -#: src/Module/BaseAdmin.php:114 +#: src/Module/BaseAdmin.php:115 msgid "check webfinger" msgstr "check WebFinger" -#: src/Module/BaseAdmin.php:116 +#: src/Module/BaseAdmin.php:117 msgid "Babel" msgstr "Babel" -#: src/Module/BaseAdmin.php:117 src/Module/Debug/ActivityPubConversion.php:138 +#: src/Module/BaseAdmin.php:118 src/Module/Debug/ActivityPubConversion.php:138 msgid "ActivityPub Conversion" msgstr "" -#: src/Module/BaseAdmin.php:126 +#: src/Module/BaseAdmin.php:127 msgid "Addon Features" msgstr "Addon features" -#: src/Module/BaseAdmin.php:127 +#: src/Module/BaseAdmin.php:128 msgid "User registrations waiting for confirmation" msgstr "User registrations awaiting confirmation" -#: src/Module/BaseProfile.php:55 src/Module/Contact.php:939 +#: src/Module/BaseApi.php:120 +#, php-format +msgid "API endpoint %s %s is not implemented" +msgstr "" + +#: src/Module/BaseApi.php:121 +msgid "" +"The API endpoint is currently not implemented but might be in the future." +msgstr "" + +#: src/Module/BaseApi.php:293 src/Module/BaseApi.php:309 +#: src/Module/BaseApi.php:325 +msgid "Too Many Requests" +msgstr "" + +#: src/Module/BaseProfile.php:51 src/Module/Contact.php:849 msgid "Profile Details" msgstr "Profile Details" -#: src/Module/BaseProfile.php:113 +#: src/Module/BaseProfile.php:109 msgid "Only You Can See This" msgstr "Only you can see this." -#: src/Module/BaseProfile.php:132 src/Module/BaseProfile.php:135 +#: src/Module/BaseProfile.php:114 src/Module/Profile/Schedule.php:82 +msgid "Scheduled Posts" +msgstr "" + +#: src/Module/BaseProfile.php:117 +msgid "Posts that are scheduled for publishing" +msgstr "" + +#: src/Module/BaseProfile.php:136 src/Module/BaseProfile.php:139 msgid "Tips for New Members" msgstr "Tips for New Members" @@ -7331,7 +6936,7 @@ msgstr "Forum search - %s" msgid "Account" msgstr "Account" -#: src/Module/BaseSettings.php:50 src/Module/Security/TwoFactor/Verify.php:94 +#: src/Module/BaseSettings.php:50 src/Module/Security/TwoFactor/Verify.php:95 #: src/Module/Settings/TwoFactor/Index.php:110 msgid "Two-factor authentication" msgstr "Two-factor authentication" @@ -7348,7 +6953,7 @@ msgstr "" msgid "Connected apps" msgstr "Connected apps" -#: src/Module/BaseSettings.php:108 src/Module/Settings/UserExport.php:77 +#: src/Module/BaseSettings.php:108 src/Module/Settings/UserExport.php:76 msgid "Export personal data" msgstr "Export personal data" @@ -7356,71 +6961,424 @@ msgstr "Export personal data" msgid "Remove account" msgstr "Remove account" -#: src/Module/Bookmarklet.php:56 +#: src/Module/Bookmarklet.php:54 msgid "This page is missing a url parameter." msgstr "This page is missing a URL parameter." -#: src/Module/Bookmarklet.php:78 +#: src/Module/Bookmarklet.php:66 msgid "The post was created" msgstr "The post was created" -#: src/Module/Contact/Advanced.php:92 +#: src/Module/Contact.php:93 +#, php-format +msgid "%d contact edited." +msgid_plural "%d contacts edited." +msgstr[0] "%d contact edited." +msgstr[1] "%d contacts edited." + +#: src/Module/Contact.php:118 +msgid "Could not access contact record." +msgstr "Could not access contact record." + +#: src/Module/Contact.php:154 +msgid "Failed to update contact record." +msgstr "Failed to update contact record." + +#: src/Module/Contact.php:375 +msgid "You can't block yourself" +msgstr "" + +#: src/Module/Contact.php:381 +msgid "Contact has been blocked" +msgstr "Contact has been blocked" + +#: src/Module/Contact.php:381 +msgid "Contact has been unblocked" +msgstr "Contact has been unblocked" + +#: src/Module/Contact.php:389 +msgid "You can't ignore yourself" +msgstr "" + +#: src/Module/Contact.php:395 +msgid "Contact has been ignored" +msgstr "Contact has been ignored" + +#: src/Module/Contact.php:395 +msgid "Contact has been unignored" +msgstr "Contact has been unignored" + +#: src/Module/Contact.php:415 +#, php-format +msgid "You are mutual friends with %s" +msgstr "You are mutual friends with %s" + +#: src/Module/Contact.php:419 +#, php-format +msgid "You are sharing with %s" +msgstr "You are sharing with %s" + +#: src/Module/Contact.php:423 +#, php-format +msgid "%s is sharing with you" +msgstr "%s is sharing with you" + +#: src/Module/Contact.php:447 +msgid "Private communications are not available for this contact." +msgstr "Private communications are not available for this contact." + +#: src/Module/Contact.php:449 +msgid "Never" +msgstr "Never" + +#: src/Module/Contact.php:452 +msgid "(Update was not successful)" +msgstr "(Update was not successful)" + +#: src/Module/Contact.php:452 +msgid "(Update was successful)" +msgstr "(Update was successful)" + +#: src/Module/Contact.php:454 src/Module/Contact.php:1035 +msgid "Suggest friends" +msgstr "Suggest friends" + +#: src/Module/Contact.php:458 +#, php-format +msgid "Network type: %s" +msgstr "Network type: %s" + +#: src/Module/Contact.php:463 +msgid "Communications lost with this contact!" +msgstr "Communications lost with this contact!" + +#: src/Module/Contact.php:469 +msgid "Fetch further information for feeds" +msgstr "Fetch further information for feeds" + +#: src/Module/Contact.php:471 +msgid "" +"Fetch information like preview pictures, title and teaser from the feed " +"item. You can activate this if the feed doesn't contain much text. Keywords " +"are taken from the meta header in the feed item and are posted as hash tags." +msgstr "Fetch information like preview pictures, title, and teaser from the feed item. You can activate this if the feed doesn't contain much text. Keywords are taken from the meta header in the feed item and are posted as hash tags." + +#: src/Module/Contact.php:474 +msgid "Fetch information" +msgstr "Fetch information" + +#: src/Module/Contact.php:475 +msgid "Fetch keywords" +msgstr "Fetch keywords" + +#: src/Module/Contact.php:476 +msgid "Fetch information and keywords" +msgstr "Fetch information and keywords" + +#: src/Module/Contact.php:488 src/Module/Contact.php:492 +#: src/Module/Contact.php:495 src/Module/Contact.php:499 +msgid "No mirroring" +msgstr "No mirroring" + +#: src/Module/Contact.php:489 +msgid "Mirror as forwarded posting" +msgstr "Mirror as forwarded posting" + +#: src/Module/Contact.php:490 src/Module/Contact.php:496 +#: src/Module/Contact.php:500 +msgid "Mirror as my own posting" +msgstr "Mirror as my own posting" + +#: src/Module/Contact.php:493 src/Module/Contact.php:497 +msgid "Native reshare" +msgstr "" + +#: src/Module/Contact.php:512 +msgid "Contact Information / Notes" +msgstr "Personal note" + +#: src/Module/Contact.php:513 +msgid "Contact Settings" +msgstr "Notification and privacy " + +#: src/Module/Contact.php:521 +msgid "Contact" +msgstr "Contact" + +#: src/Module/Contact.php:525 +msgid "Their personal note" +msgstr "Their personal note" + +#: src/Module/Contact.php:527 +msgid "Edit contact notes" +msgstr "Edit contact notes" + +#: src/Module/Contact.php:530 src/Module/Contact.php:1001 +#, php-format +msgid "Visit %s's profile [%s]" +msgstr "Visit %s's profile [%s]" + +#: src/Module/Contact.php:531 +msgid "Block/Unblock contact" +msgstr "Block/Unblock contact" + +#: src/Module/Contact.php:532 +msgid "Ignore contact" +msgstr "Ignore contact" + +#: src/Module/Contact.php:533 +msgid "View conversations" +msgstr "View conversations" + +#: src/Module/Contact.php:538 +msgid "Last update:" +msgstr "Last update:" + +#: src/Module/Contact.php:540 +msgid "Update public posts" +msgstr "Update public posts" + +#: src/Module/Contact.php:542 src/Module/Contact.php:1045 +msgid "Update now" +msgstr "Update now" + +#: src/Module/Contact.php:545 src/Module/Contact.php:788 +#: src/Module/Contact.php:1072 +msgid "Unignore" +msgstr "Unignore" + +#: src/Module/Contact.php:549 +msgid "Currently blocked" +msgstr "Currently blocked" + +#: src/Module/Contact.php:550 +msgid "Currently ignored" +msgstr "Currently ignored" + +#: src/Module/Contact.php:551 +msgid "Currently archived" +msgstr "Currently archived" + +#: src/Module/Contact.php:552 +msgid "Awaiting connection acknowledge" +msgstr "Awaiting connection acknowledgement" + +#: src/Module/Contact.php:553 src/Module/Notifications/Introductions.php:170 +msgid "Hide this contact from others" +msgstr "Hide this contact from others" + +#: src/Module/Contact.php:553 +msgid "" +"Replies/likes to your public posts may still be visible" +msgstr "Replies/Likes to your public posts may still be visible" + +#: src/Module/Contact.php:554 +msgid "Notification for new posts" +msgstr "Notification for new posts" + +#: src/Module/Contact.php:554 +msgid "Send a notification of every new post of this contact" +msgstr "Send notification for every new post from this contact" + +#: src/Module/Contact.php:556 +msgid "Keyword Deny List" +msgstr "" + +#: src/Module/Contact.php:556 +msgid "" +"Comma separated list of keywords that should not be converted to hashtags, " +"when \"Fetch information and keywords\" is selected" +msgstr "Comma-separated list of keywords that should not be converted to hashtags, when \"Fetch information and keywords\" is selected" + +#: src/Module/Contact.php:574 src/Module/Settings/TwoFactor/Index.php:132 +msgid "Actions" +msgstr "Actions" + +#: src/Module/Contact.php:581 +msgid "Mirror postings from this contact" +msgstr "Mirror postings from this contact:" + +#: src/Module/Contact.php:583 +msgid "" +"Mark this contact as remote_self, this will cause friendica to repost new " +"entries from this contact." +msgstr "This will cause Friendica to repost new entries from this contact." + +#: src/Module/Contact.php:698 +msgid "Show all contacts" +msgstr "Show all contacts" + +#: src/Module/Contact.php:706 +msgid "Only show pending contacts" +msgstr "Only show pending contacts." + +#: src/Module/Contact.php:714 +msgid "Only show blocked contacts" +msgstr "Only show blocked contacts" + +#: src/Module/Contact.php:719 src/Module/Contact.php:766 +#: src/Object/Post.php:309 +msgid "Ignored" +msgstr "Ignored" + +#: src/Module/Contact.php:722 +msgid "Only show ignored contacts" +msgstr "Only show ignored contacts" + +#: src/Module/Contact.php:727 src/Module/Contact.php:767 +msgid "Archived" +msgstr "Archived" + +#: src/Module/Contact.php:730 +msgid "Only show archived contacts" +msgstr "Only show archived contacts" + +#: src/Module/Contact.php:735 src/Module/Contact.php:765 +msgid "Hidden" +msgstr "Hidden" + +#: src/Module/Contact.php:738 +msgid "Only show hidden contacts" +msgstr "Only show hidden contacts" + +#: src/Module/Contact.php:746 +msgid "Organize your contact groups" +msgstr "Organize your contact groups" + +#: src/Module/Contact.php:778 +msgid "Search your contacts" +msgstr "Search your contacts" + +#: src/Module/Contact.php:779 src/Module/Search/Index.php:194 +#, php-format +msgid "Results for: %s" +msgstr "Results for: %s" + +#: src/Module/Contact.php:786 +msgid "Update" +msgstr "Update" + +#: src/Module/Contact.php:790 +msgid "Batch Actions" +msgstr "Batch actions" + +#: src/Module/Contact.php:825 +msgid "Conversations started by this contact" +msgstr "Conversations started by this contact" + +#: src/Module/Contact.php:830 +msgid "Posts and Comments" +msgstr "Posts and Comments" + +#: src/Module/Contact.php:841 +msgid "Posts containing media objects" +msgstr "" + +#: src/Module/Contact.php:856 +msgid "View all known contacts" +msgstr "" + +#: src/Module/Contact.php:866 +msgid "Advanced Contact Settings" +msgstr "Advanced contact settings" + +#: src/Module/Contact.php:960 +msgid "Mutual Friendship" +msgstr "Mutual friendship" + +#: src/Module/Contact.php:964 +msgid "is a fan of yours" +msgstr "is a fan of yours" + +#: src/Module/Contact.php:968 +msgid "you are a fan of" +msgstr "I follow them" + +#: src/Module/Contact.php:986 +msgid "Pending outgoing contact request" +msgstr "Pending outgoing contact request." + +#: src/Module/Contact.php:988 +msgid "Pending incoming contact request" +msgstr "Pending incoming contact request." + +#: src/Module/Contact.php:1055 +msgid "Refetch contact data" +msgstr "Re-fetch contact data." + +#: src/Module/Contact.php:1066 +msgid "Toggle Blocked status" +msgstr "Toggle blocked status" + +#: src/Module/Contact.php:1074 +msgid "Toggle Ignored status" +msgstr "Toggle ignored status" + +#: src/Module/Contact.php:1081 src/Module/Contact/Revoke.php:96 +msgid "Revoke Follow" +msgstr "" + +#: src/Module/Contact.php:1083 +msgid "Revoke the follow from this contact" +msgstr "" + +#: src/Module/Contact/Advanced.php:93 msgid "Contact update failed." msgstr "Contact update failed." -#: src/Module/Contact/Advanced.php:109 +#: src/Module/Contact/Advanced.php:110 msgid "" "WARNING: This is highly advanced and if you enter incorrect" " information your communications with this contact may stop working." msgstr "Warning: These are highly advanced settings. If you enter incorrect information, your communications with this contact might be disrupted." -#: src/Module/Contact/Advanced.php:110 +#: src/Module/Contact/Advanced.php:111 msgid "" "Please use your browser 'Back' button now if you are " "uncertain what to do on this page." msgstr "Please use your browser 'Back' button now if you are uncertain what to do on this page." -#: src/Module/Contact/Advanced.php:130 +#: src/Module/Contact/Advanced.php:131 msgid "Return to contact editor" msgstr "Return to contact editor" -#: src/Module/Contact/Advanced.php:135 +#: src/Module/Contact/Advanced.php:136 msgid "Account Nickname" msgstr "Account nickname:" -#: src/Module/Contact/Advanced.php:136 +#: src/Module/Contact/Advanced.php:137 msgid "@Tagname - overrides Name/Nickname" msgstr "@Tag name - overrides name/nickname:" -#: src/Module/Contact/Advanced.php:137 +#: src/Module/Contact/Advanced.php:138 msgid "Account URL" msgstr "Account URL:" -#: src/Module/Contact/Advanced.php:138 +#: src/Module/Contact/Advanced.php:139 msgid "Account URL Alias" msgstr "Account URL alias" -#: src/Module/Contact/Advanced.php:139 +#: src/Module/Contact/Advanced.php:140 msgid "Friend Request URL" msgstr "Friend request URL:" -#: src/Module/Contact/Advanced.php:140 +#: src/Module/Contact/Advanced.php:141 msgid "Friend Confirm URL" msgstr "Friend confirm URL:" -#: src/Module/Contact/Advanced.php:141 +#: src/Module/Contact/Advanced.php:142 msgid "Notification Endpoint URL" msgstr "Notification endpoint URL" -#: src/Module/Contact/Advanced.php:142 +#: src/Module/Contact/Advanced.php:143 msgid "Poll/Feed URL" msgstr "Poll/Feed URL:" -#: src/Module/Contact/Advanced.php:143 +#: src/Module/Contact/Advanced.php:144 msgid "New photo from this URL" msgstr "New photo from this URL:" -#: src/Module/Contact/Contacts.php:31 src/Module/Conversation/Network.php:175 +#: src/Module/Contact/Contacts.php:31 src/Module/Conversation/Network.php:168 msgid "Invalid contact." msgstr "Invalid contact." @@ -7428,527 +7386,207 @@ msgstr "Invalid contact." msgid "No known contacts." msgstr "" -#: src/Module/Contact/Contacts.php:68 src/Module/Profile/Common.php:99 +#: src/Module/Contact/Contacts.php:68 src/Module/Profile/Common.php:98 msgid "No common contacts." msgstr "" -#: src/Module/Contact/Contacts.php:80 src/Module/Profile/Contacts.php:97 +#: src/Module/Contact/Contacts.php:80 src/Module/Profile/Contacts.php:96 #, php-format msgid "Follower (%s)" msgid_plural "Followers (%s)" msgstr[0] "Follower (%s)" msgstr[1] "Followers (%s)" -#: src/Module/Contact/Contacts.php:84 src/Module/Profile/Contacts.php:100 +#: src/Module/Contact/Contacts.php:84 src/Module/Profile/Contacts.php:99 #, php-format msgid "Following (%s)" msgid_plural "Following (%s)" msgstr[0] "Following (%s)" msgstr[1] "Following (%s)" -#: src/Module/Contact/Contacts.php:88 src/Module/Profile/Contacts.php:103 +#: src/Module/Contact/Contacts.php:88 src/Module/Profile/Contacts.php:102 #, php-format msgid "Mutual friend (%s)" msgid_plural "Mutual friends (%s)" msgstr[0] "Mutual friend (%s)" msgstr[1] "Mutual friends (%s)" -#: src/Module/Contact/Contacts.php:90 src/Module/Profile/Contacts.php:105 +#: src/Module/Contact/Contacts.php:90 src/Module/Profile/Contacts.php:104 #, php-format msgid "These contacts both follow and are followed by %s." msgstr "" -#: src/Module/Contact/Contacts.php:96 src/Module/Profile/Common.php:87 +#: src/Module/Contact/Contacts.php:96 src/Module/Profile/Common.php:86 #, php-format msgid "Common contact (%s)" msgid_plural "Common contacts (%s)" msgstr[0] "" msgstr[1] "" -#: src/Module/Contact/Contacts.php:98 src/Module/Profile/Common.php:89 +#: src/Module/Contact/Contacts.php:98 src/Module/Profile/Common.php:88 #, php-format msgid "" "Both %s and yourself have publicly interacted with these " "contacts (follow, comment or likes on public posts)." msgstr "" -#: src/Module/Contact/Contacts.php:104 src/Module/Profile/Contacts.php:111 +#: src/Module/Contact/Contacts.php:104 src/Module/Profile/Contacts.php:110 #, php-format msgid "Contact (%s)" msgid_plural "Contacts (%s)" msgstr[0] "Contact (%s)" msgstr[1] "Contacts (%s)" -#: src/Module/Contact.php:94 -#, php-format -msgid "%d contact edited." -msgid_plural "%d contacts edited." -msgstr[0] "%d contact edited." -msgstr[1] "%d contacts edited." - -#: src/Module/Contact.php:121 -msgid "Could not access contact record." -msgstr "Could not access contact record." - -#: src/Module/Contact.php:419 -msgid "Contact has been blocked" -msgstr "Contact has been blocked" - -#: src/Module/Contact.php:419 -msgid "Contact has been unblocked" -msgstr "Contact has been unblocked" - -#: src/Module/Contact.php:429 -msgid "Contact has been ignored" -msgstr "Contact has been ignored" - -#: src/Module/Contact.php:429 -msgid "Contact has been unignored" -msgstr "Contact has been unignored" - -#: src/Module/Contact.php:439 -msgid "Contact has been archived" -msgstr "Contact has been archived" - -#: src/Module/Contact.php:439 -msgid "Contact has been unarchived" -msgstr "Contact has been unarchived" - -#: src/Module/Contact.php:452 -msgid "Drop contact" -msgstr "Drop contact" - -#: src/Module/Contact.php:455 src/Module/Contact.php:879 -msgid "Do you really want to delete this contact?" -msgstr "Do you really want to delete this contact?" - -#: src/Module/Contact.php:468 -msgid "Contact has been removed." -msgstr "Contact has been removed." - -#: src/Module/Contact.php:496 -#, php-format -msgid "You are mutual friends with %s" -msgstr "You are mutual friends with %s" - -#: src/Module/Contact.php:500 -#, php-format -msgid "You are sharing with %s" -msgstr "You are sharing with %s" - -#: src/Module/Contact.php:504 -#, php-format -msgid "%s is sharing with you" -msgstr "%s is sharing with you" - -#: src/Module/Contact.php:528 -msgid "Private communications are not available for this contact." -msgstr "Private communications are not available for this contact." - -#: src/Module/Contact.php:530 -msgid "Never" -msgstr "Never" - -#: src/Module/Contact.php:533 -msgid "(Update was not successful)" -msgstr "(Update was not successful)" - -#: src/Module/Contact.php:533 -msgid "(Update was successful)" -msgstr "(Update was successful)" - -#: src/Module/Contact.php:535 src/Module/Contact.php:1136 -msgid "Suggest friends" -msgstr "Suggest friends" - -#: src/Module/Contact.php:539 -#, php-format -msgid "Network type: %s" -msgstr "Network type: %s" - -#: src/Module/Contact.php:544 -msgid "Communications lost with this contact!" -msgstr "Communications lost with this contact!" - -#: src/Module/Contact.php:550 -msgid "Fetch further information for feeds" -msgstr "Fetch further information for feeds" - -#: src/Module/Contact.php:552 -msgid "" -"Fetch information like preview pictures, title and teaser from the feed " -"item. You can activate this if the feed doesn't contain much text. Keywords " -"are taken from the meta header in the feed item and are posted as hash tags." -msgstr "Fetch information like preview pictures, title, and teaser from the feed item. You can activate this if the feed doesn't contain much text. Keywords are taken from the meta header in the feed item and are posted as hash tags." - -#: src/Module/Contact.php:555 -msgid "Fetch information" -msgstr "Fetch information" - -#: src/Module/Contact.php:556 -msgid "Fetch keywords" -msgstr "Fetch keywords" - -#: src/Module/Contact.php:557 -msgid "Fetch information and keywords" -msgstr "Fetch information and keywords" - -#: src/Module/Contact.php:569 src/Module/Contact.php:573 -#: src/Module/Contact.php:576 src/Module/Contact.php:580 -msgid "No mirroring" -msgstr "No mirroring" - -#: src/Module/Contact.php:570 -msgid "Mirror as forwarded posting" -msgstr "Mirror as forwarded posting" - -#: src/Module/Contact.php:571 src/Module/Contact.php:577 -#: src/Module/Contact.php:581 -msgid "Mirror as my own posting" -msgstr "Mirror as my own posting" - -#: src/Module/Contact.php:574 src/Module/Contact.php:578 -msgid "Native reshare" -msgstr "" - -#: src/Module/Contact.php:593 -msgid "Contact Information / Notes" -msgstr "Personal note" - -#: src/Module/Contact.php:594 -msgid "Contact Settings" -msgstr "Notification and privacy " - -#: src/Module/Contact.php:602 -msgid "Contact" -msgstr "Contact" - -#: src/Module/Contact.php:606 -msgid "Their personal note" -msgstr "Their personal note" - -#: src/Module/Contact.php:608 -msgid "Edit contact notes" -msgstr "Edit contact notes" - -#: src/Module/Contact.php:611 src/Module/Contact.php:1104 -#, php-format -msgid "Visit %s's profile [%s]" -msgstr "Visit %s's profile [%s]" - -#: src/Module/Contact.php:612 -msgid "Block/Unblock contact" -msgstr "Block/Unblock contact" - -#: src/Module/Contact.php:613 -msgid "Ignore contact" -msgstr "Ignore contact" - -#: src/Module/Contact.php:614 -msgid "View conversations" -msgstr "View conversations" - -#: src/Module/Contact.php:619 -msgid "Last update:" -msgstr "Last update:" - -#: src/Module/Contact.php:621 -msgid "Update public posts" -msgstr "Update public posts" - -#: src/Module/Contact.php:623 src/Module/Contact.php:1146 -msgid "Update now" -msgstr "Update now" - -#: src/Module/Contact.php:626 src/Module/Contact.php:884 -#: src/Module/Contact.php:1173 -msgid "Unignore" -msgstr "Unignore" - -#: src/Module/Contact.php:630 -msgid "Currently blocked" -msgstr "Currently blocked" - -#: src/Module/Contact.php:631 -msgid "Currently ignored" -msgstr "Currently ignored" - -#: src/Module/Contact.php:632 -msgid "Currently archived" -msgstr "Currently archived" - -#: src/Module/Contact.php:633 -msgid "Awaiting connection acknowledge" -msgstr "Awaiting connection acknowledgement" - -#: src/Module/Contact.php:634 src/Module/Notifications/Introductions.php:177 -msgid "Hide this contact from others" -msgstr "Hide this contact from others" - -#: src/Module/Contact.php:634 -msgid "" -"Replies/likes to your public posts may still be visible" -msgstr "Replies/Likes to your public posts may still be visible" - -#: src/Module/Contact.php:635 -msgid "Notification for new posts" -msgstr "Notification for new posts" - -#: src/Module/Contact.php:635 -msgid "Send a notification of every new post of this contact" -msgstr "Send notification for every new post from this contact" - -#: src/Module/Contact.php:637 -msgid "Keyword Deny List" -msgstr "" - -#: src/Module/Contact.php:637 -msgid "" -"Comma separated list of keywords that should not be converted to hashtags, " -"when \"Fetch information and keywords\" is selected" -msgstr "Comma-separated list of keywords that should not be converted to hashtags, when \"Fetch information and keywords\" is selected" - -#: src/Module/Contact.php:653 src/Module/Settings/TwoFactor/Index.php:132 -msgid "Actions" -msgstr "Actions" - -#: src/Module/Contact.php:660 -msgid "Mirror postings from this contact" -msgstr "Mirror postings from this contact:" - -#: src/Module/Contact.php:662 -msgid "" -"Mark this contact as remote_self, this will cause friendica to repost new " -"entries from this contact." -msgstr "This will cause Friendica to repost new entries from this contact." - -#: src/Module/Contact.php:794 -msgid "Show all contacts" -msgstr "Show all contacts" - -#: src/Module/Contact.php:802 -msgid "Only show pending contacts" -msgstr "Only show pending contacts." - -#: src/Module/Contact.php:810 -msgid "Only show blocked contacts" -msgstr "Only show blocked contacts" - -#: src/Module/Contact.php:815 src/Module/Contact.php:862 -msgid "Ignored" -msgstr "Ignored" - -#: src/Module/Contact.php:818 -msgid "Only show ignored contacts" -msgstr "Only show ignored contacts" - -#: src/Module/Contact.php:823 src/Module/Contact.php:863 -msgid "Archived" -msgstr "Archived" - -#: src/Module/Contact.php:826 -msgid "Only show archived contacts" -msgstr "Only show archived contacts" - -#: src/Module/Contact.php:831 src/Module/Contact.php:861 -msgid "Hidden" -msgstr "Hidden" - -#: src/Module/Contact.php:834 -msgid "Only show hidden contacts" -msgstr "Only show hidden contacts" - -#: src/Module/Contact.php:842 -msgid "Organize your contact groups" -msgstr "Organize your contact groups" - -#: src/Module/Contact.php:874 -msgid "Search your contacts" -msgstr "Search your contacts" - -#: src/Module/Contact.php:875 src/Module/Search/Index.php:193 -#, php-format -msgid "Results for: %s" -msgstr "Results for: %s" - -#: src/Module/Contact.php:885 src/Module/Contact.php:1182 -msgid "Archive" -msgstr "Archive" - -#: src/Module/Contact.php:885 src/Module/Contact.php:1182 -msgid "Unarchive" -msgstr "Unarchive" - -#: src/Module/Contact.php:888 -msgid "Batch Actions" -msgstr "Batch actions" - -#: src/Module/Contact.php:923 -msgid "Conversations started by this contact" -msgstr "Conversations started by this contact" - -#: src/Module/Contact.php:928 -msgid "Posts and Comments" -msgstr "Posts and Comments" - -#: src/Module/Contact.php:946 -msgid "View all known contacts" -msgstr "" - -#: src/Module/Contact.php:956 -msgid "Advanced Contact Settings" -msgstr "Advanced contact settings" - -#: src/Module/Contact.php:1063 -msgid "Mutual Friendship" -msgstr "Mutual friendship" - -#: src/Module/Contact.php:1067 -msgid "is a fan of yours" -msgstr "is a fan of yours" - -#: src/Module/Contact.php:1071 -msgid "you are a fan of" -msgstr "I follow them" - -#: src/Module/Contact.php:1089 -msgid "Pending outgoing contact request" -msgstr "Pending outgoing contact request." - -#: src/Module/Contact.php:1091 -msgid "Pending incoming contact request" -msgstr "Pending incoming contact request." - -#: src/Module/Contact.php:1156 -msgid "Refetch contact data" -msgstr "Re-fetch contact data." - -#: src/Module/Contact.php:1167 -msgid "Toggle Blocked status" -msgstr "Toggle blocked status" - -#: src/Module/Contact.php:1175 -msgid "Toggle Ignored status" -msgstr "Toggle ignored status" - -#: src/Module/Contact.php:1184 -msgid "Toggle Archive status" -msgstr "Toggle archive status" - -#: src/Module/Contact.php:1192 -msgid "Delete contact" -msgstr "Delete contact" - -#: src/Module/Contact/Poke.php:113 +#: src/Module/Contact/Poke.php:116 msgid "Error while sending poke, please retry." msgstr "" -#: src/Module/Contact/Poke.php:126 src/Module/Search/Acl.php:55 +#: src/Module/Contact/Poke.php:129 src/Module/Search/Acl.php:55 msgid "You must be logged in to use this module." msgstr "You must be logged in to use this module." -#: src/Module/Contact/Poke.php:149 +#: src/Module/Contact/Poke.php:152 msgid "Poke/Prod" msgstr "Poke/Prod" -#: src/Module/Contact/Poke.php:150 +#: src/Module/Contact/Poke.php:153 msgid "poke, prod or do other things to somebody" msgstr "Poke, prod or do other things to somebody" -#: src/Module/Contact/Poke.php:152 +#: src/Module/Contact/Poke.php:155 msgid "Choose what you wish to do to recipient" msgstr "Choose what you wish to do:" -#: src/Module/Contact/Poke.php:153 +#: src/Module/Contact/Poke.php:156 msgid "Make this post private" msgstr "Make this post private" -#: src/Module/Conversation/Community.php:69 +#: src/Module/Contact/Revoke.php:48 +msgid "Unknown contact." +msgstr "" + +#: src/Module/Contact/Revoke.php:58 src/Module/Group.php:109 +msgid "Contact is deleted." +msgstr "Contact is deleted." + +#: src/Module/Contact/Revoke.php:62 +msgid "Contact is being deleted." +msgstr "" + +#: src/Module/Contact/Revoke.php:76 +msgid "Follow was successfully revoked." +msgstr "" + +#: src/Module/Contact/Revoke.php:78 +msgid "" +"Follow was successfully revoked, however the remote contact won't be aware " +"of this revokation." +msgstr "" + +#: src/Module/Contact/Revoke.php:80 +msgid "" +"Unable to revoke follow, please try again later or contact the " +"administrator." +msgstr "" + +#: src/Module/Contact/Revoke.php:97 +msgid "" +"Do you really want to revoke this contact's follow? This cannot be undone " +"and they will have to manually follow you back again." +msgstr "" + +#: src/Module/Contact/Revoke.php:98 +#: src/Module/Notifications/Introductions.php:122 +#: src/Module/OAuth/Acknowledge.php:47 src/Module/Register.php:117 +msgid "Yes" +msgstr "Yes" + +#: src/Module/Conversation/Community.php:68 msgid "Local Community" msgstr "Local community" -#: src/Module/Conversation/Community.php:72 +#: src/Module/Conversation/Community.php:71 msgid "Posts from local users on this server" msgstr "Posts from local users on this server" -#: src/Module/Conversation/Community.php:80 +#: src/Module/Conversation/Community.php:79 msgid "Global Community" msgstr "Global community" -#: src/Module/Conversation/Community.php:83 +#: src/Module/Conversation/Community.php:82 msgid "Posts from users of the whole federated network" msgstr "Posts from users of the whole federated network" -#: src/Module/Conversation/Community.php:116 +#: src/Module/Conversation/Community.php:115 msgid "Own Contacts" msgstr "" -#: src/Module/Conversation/Community.php:120 +#: src/Module/Conversation/Community.php:119 msgid "Include" msgstr "" -#: src/Module/Conversation/Community.php:121 +#: src/Module/Conversation/Community.php:120 msgid "Hide" msgstr "" -#: src/Module/Conversation/Community.php:149 src/Module/Search/Index.php:140 -#: src/Module/Search/Index.php:180 +#: src/Module/Conversation/Community.php:137 src/Module/Search/Index.php:139 +#: src/Module/Search/Index.php:181 msgid "No results." msgstr "No results." -#: src/Module/Conversation/Community.php:174 +#: src/Module/Conversation/Community.php:162 msgid "" "This community stream shows all public posts received by this node. They may" " not reflect the opinions of this node’s users." msgstr "This community stream shows all public posts received by this node. They may not reflect the opinions of this node’s users." -#: src/Module/Conversation/Community.php:212 +#: src/Module/Conversation/Community.php:200 msgid "Community option not available." msgstr "Community option not available." -#: src/Module/Conversation/Community.php:228 +#: src/Module/Conversation/Community.php:216 msgid "Not available." msgstr "Not available." -#: src/Module/Conversation/Network.php:161 +#: src/Module/Conversation/Network.php:154 msgid "No such group" msgstr "No such group" -#: src/Module/Conversation/Network.php:165 +#: src/Module/Conversation/Network.php:158 #, php-format msgid "Group: %s" msgstr "Group: %s" -#: src/Module/Conversation/Network.php:241 +#: src/Module/Conversation/Network.php:234 msgid "Latest Activity" msgstr "Latest activity" -#: src/Module/Conversation/Network.php:244 +#: src/Module/Conversation/Network.php:237 msgid "Sort by latest activity" msgstr "Sort by latest activity" -#: src/Module/Conversation/Network.php:249 +#: src/Module/Conversation/Network.php:242 msgid "Latest Posts" msgstr "Latest posts" -#: src/Module/Conversation/Network.php:252 +#: src/Module/Conversation/Network.php:245 msgid "Sort by post received date" msgstr "Sort by post received date" -#: src/Module/Conversation/Network.php:257 -#: src/Module/Settings/Profile/Index.php:242 +#: src/Module/Conversation/Network.php:250 +#: src/Module/Settings/Profile/Index.php:228 msgid "Personal" msgstr "Personal" -#: src/Module/Conversation/Network.php:260 +#: src/Module/Conversation/Network.php:253 msgid "Posts that mention or involve you" msgstr "Posts mentioning or involving me" -#: src/Module/Conversation/Network.php:265 +#: src/Module/Conversation/Network.php:258 src/Object/Post.php:321 msgid "Starred" msgstr "Starred" -#: src/Module/Conversation/Network.php:268 +#: src/Module/Conversation/Network.php:261 msgid "Favourite Posts" msgstr "My favorite posts" @@ -8160,7 +7798,7 @@ msgid "Twitter Source / Tweet URL (requires API key)" msgstr "" #: src/Module/Debug/Feed.php:38 src/Module/Filer/SaveTag.php:40 -#: src/Module/Settings/Profile/Index.php:158 +#: src/Module/Settings/Profile/Index.php:142 msgid "You must be logged in to use this module" msgstr "You must be logged in to use this module" @@ -8201,15 +7839,15 @@ msgstr "Please select your time zone:" msgid "Only logged in users are permitted to perform a probing." msgstr "Only logged in users are permitted to use the Probe feature." -#: src/Module/Debug/Probe.php:53 +#: src/Module/Debug/Probe.php:54 msgid "Probe Diagnostic" msgstr "" -#: src/Module/Debug/Probe.php:54 +#: src/Module/Debug/Probe.php:55 msgid "Output" msgstr "" -#: src/Module/Debug/Probe.php:57 +#: src/Module/Debug/Probe.php:58 msgid "Lookup address" msgstr "Lookup address" @@ -8221,21 +7859,21 @@ msgstr "" msgid "Lookup address:" msgstr "" -#: src/Module/Delegation.php:147 +#: src/Module/Delegation.php:142 msgid "Switch between your accounts" msgstr "" -#: src/Module/Delegation.php:148 +#: src/Module/Delegation.php:143 msgid "Manage your accounts" msgstr "" -#: src/Module/Delegation.php:149 +#: src/Module/Delegation.php:144 msgid "" "Toggle between different identities or community/group pages which share " "your account details or which you have been granted \"manage\" permissions" msgstr "Accounts that I manage or own." -#: src/Module/Delegation.php:150 +#: src/Module/Delegation.php:145 msgid "Select an identity to manage: " msgstr "Select identity:" @@ -8243,89 +7881,89 @@ msgstr "Select identity:" msgid "No entries (some entries may be hidden)." msgstr "No entries (entries may be hidden)." -#: src/Module/Directory.php:99 +#: src/Module/Directory.php:93 msgid "Find on this site" msgstr "Find on this site" -#: src/Module/Directory.php:101 +#: src/Module/Directory.php:95 msgid "Results for:" msgstr "Results for:" -#: src/Module/Directory.php:103 +#: src/Module/Directory.php:97 msgid "Site Directory" msgstr "Site directory" -#: src/Module/Filer/RemoveTag.php:69 +#: src/Module/Filer/RemoveTag.php:68 msgid "Item was not removed" msgstr "" -#: src/Module/Filer/RemoveTag.php:72 +#: src/Module/Filer/RemoveTag.php:71 msgid "Item was not deleted" msgstr "" -#: src/Module/Filer/SaveTag.php:69 +#: src/Module/Filer/SaveTag.php:68 msgid "- select -" msgstr "- select -" -#: src/Module/Friendica.php:61 +#: src/Module/FriendSuggest.php:65 +msgid "Suggested contact not found." +msgstr "Suggested contact not found." + +#: src/Module/FriendSuggest.php:83 +msgid "Friend suggestion sent." +msgstr "Friend suggestion sent" + +#: src/Module/FriendSuggest.php:120 +msgid "Suggest Friends" +msgstr "Suggest friends" + +#: src/Module/FriendSuggest.php:123 +#, php-format +msgid "Suggest a friend for %s" +msgstr "Suggest a friend for %s" + +#: src/Module/Friendica.php:62 msgid "Installed addons/apps:" msgstr "Installed addons/apps:" -#: src/Module/Friendica.php:66 +#: src/Module/Friendica.php:67 msgid "No installed addons/apps" msgstr "No installed addons/apps" -#: src/Module/Friendica.php:71 +#: src/Module/Friendica.php:72 #, php-format msgid "Read about the Terms of Service of this node." msgstr "Read about the Terms of Service of this node." -#: src/Module/Friendica.php:78 +#: src/Module/Friendica.php:79 msgid "On this server the following remote servers are blocked." msgstr "On this server the following remote servers are blocked." -#: src/Module/Friendica.php:96 +#: src/Module/Friendica.php:97 #, php-format msgid "" "This is Friendica, version %s that is running at the web location %s. The " "database version is %s, the post update version is %s." msgstr "This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s." -#: src/Module/Friendica.php:101 +#: src/Module/Friendica.php:102 msgid "" "Please visit Friendi.ca to learn more " "about the Friendica project." msgstr "Please visit Friendi.ca to learn more about the Friendica project." -#: src/Module/Friendica.php:102 +#: src/Module/Friendica.php:103 msgid "Bug reports and issues: please visit" msgstr "Bug reports and issues: please visit" -#: src/Module/Friendica.php:102 +#: src/Module/Friendica.php:103 msgid "the bugtracker at github" msgstr "the bugtracker at github" -#: src/Module/Friendica.php:103 +#: src/Module/Friendica.php:104 msgid "Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca" msgstr "Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca" -#: src/Module/FriendSuggest.php:65 -msgid "Suggested contact not found." -msgstr "Suggested contact not found." - -#: src/Module/FriendSuggest.php:84 -msgid "Friend suggestion sent." -msgstr "Friend suggestion sent" - -#: src/Module/FriendSuggest.php:121 -msgid "Suggest Friends" -msgstr "Suggest friends" - -#: src/Module/FriendSuggest.php:124 -#, php-format -msgid "Suggest a friend for %s" -msgstr "Suggest a friend for %s" - #: src/Module/Group.php:61 msgid "Could not create group." msgstr "Could not create group." @@ -8342,10 +7980,6 @@ msgstr "" msgid "Unknown group." msgstr "Unknown group." -#: src/Module/Group.php:109 -msgid "Contact is deleted." -msgstr "Contact is deleted." - #: src/Module/Group.php:115 msgid "Unable to add the contact to the group." msgstr "Unable to add contact to group." @@ -8414,6 +8048,14 @@ msgstr "Click on a contact to add or remove it." msgid "Add contact to group" msgstr "Add contact to group" +#: src/Module/HCard.php:46 +msgid "No profile" +msgstr "No profile" + +#: src/Module/HTTPException/MethodNotAllowed.php:32 +msgid "Method Not Allowed." +msgstr "Method not allowed." + #: src/Module/Help.php:62 msgid "Help:" msgstr "Help:" @@ -8423,14 +8065,6 @@ msgstr "Help:" msgid "Welcome to %s" msgstr "Welcome to %s" -#: src/Module/HoverCard.php:47 -msgid "No profile" -msgstr "No profile" - -#: src/Module/HTTPException/MethodNotAllowed.php:32 -msgid "Method Not Allowed." -msgstr "Method not allowed." - #: src/Module/Install.php:188 msgid "Friendica Communications Server - Setup" msgstr "Friendica Communications Server - Setup" @@ -8588,40 +8222,40 @@ msgid "" " administrator email. This will allow you to enter the site admin panel." msgstr "Go to your new Friendica node registration page and register as new user. Remember to use the same email you have entered as administrator email. This will allow you to enter the site admin panel." -#: src/Module/Invite.php:55 +#: src/Module/Invite.php:56 msgid "Total invitation limit exceeded." msgstr "Total invitation limit exceeded" -#: src/Module/Invite.php:78 +#: src/Module/Invite.php:81 #, php-format msgid "%s : Not a valid email address." msgstr "%s : Not a valid email address" -#: src/Module/Invite.php:104 +#: src/Module/Invite.php:107 msgid "Please join us on Friendica" msgstr "Please join us on Friendica." -#: src/Module/Invite.php:113 +#: src/Module/Invite.php:116 msgid "Invitation limit exceeded. Please contact your site administrator." msgstr "Invitation limit is exceeded. Please contact your site administrator." -#: src/Module/Invite.php:117 +#: src/Module/Invite.php:120 #, php-format msgid "%s : Message delivery failed." msgstr "%s : Message delivery failed" -#: src/Module/Invite.php:121 +#: src/Module/Invite.php:124 #, php-format msgid "%d message sent." msgid_plural "%d messages sent." msgstr[0] "%d message sent." msgstr[1] "%d messages sent." -#: src/Module/Invite.php:139 +#: src/Module/Invite.php:142 msgid "You have no more invitations available" msgstr "You have no more invitations available." -#: src/Module/Invite.php:146 +#: src/Module/Invite.php:149 #, php-format msgid "" "Visit %s for a list of public sites that you can join. Friendica members on " @@ -8629,14 +8263,14 @@ msgid "" " other social networks." msgstr "Visit %s for a list of public sites that you can join. Friendica members on other sites can all connect with each other, as well as with members of many other social networks." -#: src/Module/Invite.php:148 +#: src/Module/Invite.php:151 #, php-format msgid "" "To accept this invitation, please visit and register at %s or any other " "public Friendica website." msgstr "To accept this invitation, please sign up at %s or any other public Friendica website." -#: src/Module/Invite.php:149 +#: src/Module/Invite.php:152 #, php-format msgid "" "Friendica sites all inter-connect to create a huge privacy-enhanced social " @@ -8645,82 +8279,82 @@ msgid "" "sites you can join." msgstr "Friendica sites are all inter-connected to create a large privacy-enhanced social web that is owned and controlled by its members. They can also connect with many traditional social networks. See %s for a list of alternate Friendica sites you can join." -#: src/Module/Invite.php:153 +#: src/Module/Invite.php:156 msgid "" "Our apologies. This system is not currently configured to connect with other" " public sites or invite members." msgstr "Our apologies. This system is not currently configured to connect with other public sites or invite members." -#: src/Module/Invite.php:156 +#: src/Module/Invite.php:159 msgid "" "Friendica sites all inter-connect to create a huge privacy-enhanced social " "web that is owned and controlled by its members. They can also connect with " "many traditional social networks." msgstr "Friendica sites are all inter-connected to create a huge privacy-enhanced social web that is owned and controlled by its members. Each site can also connect with many traditional social networks." -#: src/Module/Invite.php:155 +#: src/Module/Invite.php:158 #, php-format msgid "To accept this invitation, please visit and register at %s." msgstr "To accept this invitation, please visit and register at %s." -#: src/Module/Invite.php:163 +#: src/Module/Invite.php:166 msgid "Send invitations" msgstr "Send invitations" -#: src/Module/Invite.php:164 +#: src/Module/Invite.php:167 msgid "Enter email addresses, one per line:" msgstr "Enter email addresses, one per line:" -#: src/Module/Invite.php:168 +#: src/Module/Invite.php:171 msgid "" "You are cordially invited to join me and other close friends on Friendica - " "and help us to create a better social web." msgstr "You are cordially invited to join me and other close friends on Friendica - and help us to create a better social web." -#: src/Module/Invite.php:170 +#: src/Module/Invite.php:173 msgid "You will need to supply this invitation code: $invite_code" msgstr "You will need to supply this invitation code: $invite_code" -#: src/Module/Invite.php:170 +#: src/Module/Invite.php:173 msgid "" "Once you have registered, please connect with me via my profile page at:" msgstr "Once you have signed up, please connect with me via my profile page at:" -#: src/Module/Invite.php:172 +#: src/Module/Invite.php:175 msgid "" "For more information about the Friendica project and why we feel it is " "important, please visit http://friendi.ca" msgstr "For more information about the Friendica project and why we feel it is important, please visit http://friendi.ca" -#: src/Module/Item/Compose.php:46 +#: src/Module/Item/Compose.php:50 msgid "Please enter a post body." msgstr "Please enter a post body." -#: src/Module/Item/Compose.php:59 +#: src/Module/Item/Compose.php:63 msgid "This feature is only available with the frio theme." msgstr "This feature is only available with the Frio theme." -#: src/Module/Item/Compose.php:86 +#: src/Module/Item/Compose.php:90 msgid "Compose new personal note" msgstr "Compose new personal note" -#: src/Module/Item/Compose.php:95 +#: src/Module/Item/Compose.php:99 msgid "Compose new post" msgstr "Compose new post" -#: src/Module/Item/Compose.php:135 +#: src/Module/Item/Compose.php:141 msgid "Visibility" msgstr "Visibility" -#: src/Module/Item/Compose.php:156 +#: src/Module/Item/Compose.php:162 msgid "Clear the location" msgstr "Clear location" -#: src/Module/Item/Compose.php:157 +#: src/Module/Item/Compose.php:163 msgid "Location services are unavailable on your device" msgstr "Location services are unavailable on your device" -#: src/Module/Item/Compose.php:158 +#: src/Module/Item/Compose.php:164 msgid "" "Location services are disabled. Please check the website's permissions on " "your device" @@ -8745,68 +8379,73 @@ msgstr "" msgid "A Decentralized Social Network" msgstr "" -#: src/Module/Notifications/Introductions.php:78 +#: src/Module/Notifications/Introductions.php:77 msgid "Show Ignored Requests" msgstr "Show ignored requests." -#: src/Module/Notifications/Introductions.php:78 +#: src/Module/Notifications/Introductions.php:77 msgid "Hide Ignored Requests" msgstr "Hide ignored requests" -#: src/Module/Notifications/Introductions.php:94 -#: src/Module/Notifications/Introductions.php:163 +#: src/Module/Notifications/Introductions.php:93 +#: src/Module/Notifications/Introductions.php:156 msgid "Notification type:" msgstr "Notification type:" -#: src/Module/Notifications/Introductions.php:97 +#: src/Module/Notifications/Introductions.php:96 msgid "Suggested by:" msgstr "Suggested by:" -#: src/Module/Notifications/Introductions.php:122 +#: src/Module/Notifications/Introductions.php:121 msgid "Claims to be known to you: " msgstr "Says they know me:" -#: src/Module/Notifications/Introductions.php:131 +#: src/Module/Notifications/Introductions.php:122 +#: src/Module/OAuth/Acknowledge.php:48 src/Module/Register.php:118 +msgid "No" +msgstr "No" + +#: src/Module/Notifications/Introductions.php:130 msgid "Shall your connection be bidirectional or not?" msgstr "Shall your connection be in both directions or not?" -#: src/Module/Notifications/Introductions.php:132 +#: src/Module/Notifications/Introductions.php:131 #, 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 "Accepting %s as a friend allows %s to subscribe to your posts. You will also receive updates from them in your news feed." -#: src/Module/Notifications/Introductions.php:133 +#: src/Module/Notifications/Introductions.php:132 #, 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 "Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed." -#: src/Module/Notifications/Introductions.php:135 +#: src/Module/Notifications/Introductions.php:134 msgid "Friend" msgstr "Friend" -#: src/Module/Notifications/Introductions.php:136 +#: src/Module/Notifications/Introductions.php:135 msgid "Subscriber" msgstr "Subscriber" -#: src/Module/Notifications/Introductions.php:201 +#: src/Module/Notifications/Introductions.php:194 msgid "No introductions." msgstr "No introductions." -#: src/Module/Notifications/Introductions.php:202 -#: src/Module/Notifications/Notifications.php:133 +#: src/Module/Notifications/Introductions.php:195 +#: src/Module/Notifications/Notifications.php:121 #, php-format msgid "No more %s notifications." msgstr "No more %s notifications." -#: src/Module/Notifications/Notification.php:103 +#: src/Module/Notifications/Notification.php:107 msgid "You must be logged in to show this page." msgstr "" -#: src/Module/Notifications/Notifications.php:50 +#: src/Module/Notifications/Notifications.php:52 msgid "Network Notifications" msgstr "Network notifications" @@ -8814,53 +8453,91 @@ msgstr "Network notifications" msgid "System Notifications" msgstr "System notifications" -#: src/Module/Notifications/Notifications.php:66 +#: src/Module/Notifications/Notifications.php:64 msgid "Personal Notifications" msgstr "Personal notifications" -#: src/Module/Notifications/Notifications.php:74 +#: src/Module/Notifications/Notifications.php:70 msgid "Home Notifications" msgstr "Home notifications" -#: src/Module/Notifications/Notifications.php:138 +#: src/Module/Notifications/Notifications.php:126 msgid "Show unread" msgstr "Show unread" -#: src/Module/Notifications/Notifications.php:138 -msgid "Show all" -msgstr "Show all" +#: src/Module/OAuth/Acknowledge.php:44 +msgid "Authorize application connection" +msgstr "Authorize application connection" + +#: src/Module/OAuth/Acknowledge.php:46 +msgid "" +"Do you want to authorize this application to access your posts and contacts," +" and/or create new posts for you?" +msgstr "Do you want to authorize this application to access your posts and contacts and create new posts for you?" + +#: src/Module/OAuth/Authorize.php:55 +msgid "Unsupported or missing response type" +msgstr "" + +#: src/Module/OAuth/Authorize.php:60 src/Module/OAuth/Token.php:65 +msgid "Incomplete request data" +msgstr "" + +#: src/Module/OAuth/Authorize.php:107 +#, php-format +msgid "" +"Please copy the following authentication code into your application and " +"close this window: %s" +msgstr "" + +#: src/Module/OAuth/Token.php:89 +msgid "Unsupported or missing grant type" +msgstr "" #: src/Module/PermissionTooltip.php:25 #, php-format msgid "Wrong type \"%s\", expected one of: %s" msgstr "" -#: src/Module/PermissionTooltip.php:38 +#: src/Module/PermissionTooltip.php:42 msgid "Model not found" msgstr "" -#: src/Module/PermissionTooltip.php:60 +#: src/Module/PermissionTooltip.php:64 msgid "Remote privacy information not available." msgstr "Remote privacy information not available." -#: src/Module/PermissionTooltip.php:71 +#: src/Module/PermissionTooltip.php:73 msgid "Visible to:" msgstr "Visible to:" -#: src/Module/Photo.php:93 +#: src/Module/Photo.php:123 +msgid "The Photo is not available." +msgstr "" + +#: src/Module/Photo.php:136 #, php-format msgid "The Photo with id %s is not available." msgstr "" -#: src/Module/Photo.php:111 +#: src/Module/Photo.php:169 +#, php-format +msgid "Invalid external resource with url %s." +msgstr "" + +#: src/Module/Photo.php:171 #, php-format msgid "Invalid photo with id %s." msgstr "Invalid photo with id %s." -#: src/Module/Profile/Contacts.php:121 +#: src/Module/Profile/Contacts.php:120 msgid "No contacts." msgstr "No contacts." +#: src/Module/Profile/Profile.php:82 +msgid "Profile not found." +msgstr "Profile not found." + #: src/Module/Profile/Profile.php:135 #, php-format msgid "" @@ -8885,188 +8562,218 @@ msgid "Birthday:" msgstr "Birthday:" #: src/Module/Profile/Profile.php:167 -#: src/Module/Settings/Profile/Index.php:260 src/Util/Temporal.php:165 +#: src/Module/Settings/Profile/Index.php:246 src/Util/Temporal.php:165 msgid "Age: " msgstr "Age: " #: src/Module/Profile/Profile.php:167 -#: src/Module/Settings/Profile/Index.php:260 src/Util/Temporal.php:165 +#: src/Module/Settings/Profile/Index.php:246 src/Util/Temporal.php:165 #, php-format msgid "%d year old" msgid_plural "%d years old" msgstr[0] "" msgstr[1] "" -#: src/Module/Profile/Profile.php:230 +#: src/Module/Profile/Profile.php:234 msgid "Forums:" msgstr "Forums:" -#: src/Module/Profile/Profile.php:242 +#: src/Module/Profile/Profile.php:246 msgid "View profile as:" msgstr "" -#: src/Module/Profile/Profile.php:259 +#: src/Module/Profile/Profile.php:263 msgid "View as" msgstr "" -#: src/Module/Profile/Profile.php:322 src/Module/Profile/Profile.php:325 +#: src/Module/Profile/Profile.php:326 src/Module/Profile/Profile.php:329 #: src/Module/Profile/Status.php:65 src/Module/Profile/Status.php:68 -#: src/Protocol/Feed.php:945 src/Protocol/OStatus.php:1258 +#: src/Protocol/Feed.php:953 src/Protocol/OStatus.php:1242 #, php-format msgid "%s's timeline" msgstr "%s's timeline" -#: src/Module/Profile/Profile.php:323 src/Module/Profile/Status.php:66 -#: src/Protocol/Feed.php:949 src/Protocol/OStatus.php:1262 +#: src/Module/Profile/Profile.php:327 src/Module/Profile/Status.php:66 +#: src/Protocol/Feed.php:957 src/Protocol/OStatus.php:1246 #, php-format msgid "%s's posts" msgstr "%s's posts" -#: src/Module/Profile/Profile.php:324 src/Module/Profile/Status.php:67 -#: src/Protocol/Feed.php:952 src/Protocol/OStatus.php:1265 +#: src/Module/Profile/Profile.php:328 src/Module/Profile/Status.php:67 +#: src/Protocol/Feed.php:960 src/Protocol/OStatus.php:1249 #, php-format msgid "%s's comments" msgstr "%s's comments" -#: src/Module/Register.php:69 +#: src/Module/Profile/Schedule.php:84 +msgid "Scheduled" +msgstr "" + +#: src/Module/Profile/Schedule.php:85 +msgid "Content" +msgstr "" + +#: src/Module/Profile/Schedule.php:86 +msgid "Remove post" +msgstr "" + +#: src/Module/Register.php:71 msgid "Only parent users can create additional accounts." msgstr "" -#: src/Module/Register.php:101 +#: src/Module/Register.php:103 msgid "" "You may (optionally) fill in this form via OpenID by supplying your OpenID " "and clicking \"Register\"." msgstr "You may (optionally) fill in this form via OpenID by supplying your OpenID and clicking \"Register\"." -#: src/Module/Register.php:102 +#: src/Module/Register.php:104 msgid "" "If you are not familiar with OpenID, please leave that field blank and fill " "in the rest of the items." msgstr "If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items." -#: src/Module/Register.php:103 +#: src/Module/Register.php:105 msgid "Your OpenID (optional): " msgstr "Your OpenID (optional): " -#: src/Module/Register.php:112 +#: src/Module/Register.php:114 msgid "Include your profile in member directory?" msgstr "Include your profile in member directory?" -#: src/Module/Register.php:135 +#: src/Module/Register.php:137 msgid "Note for the admin" msgstr "Note for the admin" -#: src/Module/Register.php:135 +#: src/Module/Register.php:137 msgid "Leave a message for the admin, why you want to join this node" msgstr "Leave a message for the admin. Why do you want to join this node?" -#: src/Module/Register.php:136 +#: src/Module/Register.php:138 msgid "Membership on this site is by invitation only." msgstr "Membership on this site is by invitation only." -#: src/Module/Register.php:137 +#: src/Module/Register.php:139 msgid "Your invitation code: " msgstr "Your invitation code: " -#: src/Module/Register.php:145 +#: src/Module/Register.php:147 msgid "Your Full Name (e.g. Joe Smith, real or real-looking): " msgstr "Your full name: " -#: src/Module/Register.php:146 +#: src/Module/Register.php:148 msgid "" "Your Email Address: (Initial information will be send there, so this has to " "be an existing address.)" msgstr "Your Email Address: (Initial information will be sent there, so this must be an existing address.)" -#: src/Module/Register.php:147 +#: src/Module/Register.php:149 msgid "Please repeat your e-mail address:" msgstr "Please repeat your email address:" -#: src/Module/Register.php:149 +#: src/Module/Register.php:151 msgid "Leave empty for an auto generated password." msgstr "Leave empty for an auto generated password." -#: src/Module/Register.php:151 +#: src/Module/Register.php:153 #, php-format msgid "" "Choose a profile nickname. This must begin with a text character. Your " "profile address on this site will then be \"nickname@%s\"." msgstr "Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be \"nickname@%s\"." -#: src/Module/Register.php:152 +#: src/Module/Register.php:154 msgid "Choose a nickname: " msgstr "Choose a nickname: " -#: src/Module/Register.php:161 +#: src/Module/Register.php:163 msgid "Import your profile to this friendica instance" msgstr "Import an existing Friendica profile to this node." -#: src/Module/Register.php:168 +#: src/Module/Register.php:170 msgid "Note: This node explicitly contains adult content" msgstr "Note: This node explicitly contains adult content" -#: src/Module/Register.php:170 src/Module/Settings/Delegation.php:155 +#: src/Module/Register.php:172 src/Module/Settings/Delegation.php:155 msgid "Parent Password:" msgstr "Parent Password:" -#: src/Module/Register.php:170 src/Module/Settings/Delegation.php:155 +#: src/Module/Register.php:172 src/Module/Settings/Delegation.php:155 msgid "" "Please enter the password of the parent account to legitimize your request." msgstr "Please enter the password of the parent account to authorize this request." -#: src/Module/Register.php:199 +#: src/Module/Register.php:201 msgid "Password doesn't match." msgstr "" -#: src/Module/Register.php:205 +#: src/Module/Register.php:207 msgid "Please enter your password." msgstr "" -#: src/Module/Register.php:247 +#: src/Module/Register.php:249 msgid "You have entered too much information." msgstr "You have entered too much information." -#: src/Module/Register.php:271 +#: src/Module/Register.php:272 msgid "Please enter the identical mail address in the second field." msgstr "" -#: src/Module/Register.php:298 +#: src/Module/Register.php:299 msgid "The additional account was created." msgstr "" -#: src/Module/Register.php:323 +#: src/Module/Register.php:324 msgid "" "Registration successful. Please check your email for further instructions." msgstr "Registration successful. Please check your email for further instructions." -#: src/Module/Register.php:327 +#: src/Module/Register.php:328 #, php-format msgid "" "Failed to send email message. Here your accout details:
login: %s
" "password: %s

You can change your password after login." msgstr "Failed to send email message. Here are your account details:
login: %s
password: %s

You can change your password after login." -#: src/Module/Register.php:333 +#: src/Module/Register.php:334 msgid "Registration successful." msgstr "Registration successful." -#: src/Module/Register.php:338 src/Module/Register.php:345 +#: src/Module/Register.php:339 src/Module/Register.php:346 msgid "Your registration can not be processed." msgstr "Your registration cannot be processed." -#: src/Module/Register.php:344 +#: src/Module/Register.php:345 msgid "You have to leave a request note for the admin." msgstr "You have to leave a request note for the admin." -#: src/Module/Register.php:390 +#: src/Module/Register.php:391 msgid "Your registration is pending approval by the site owner." msgstr "Your registration is pending approval by the site administrator." -#: src/Module/RemoteFollow.php:67 +#: src/Module/RemoteFollow.php:62 +msgid "Profile unavailable." +msgstr "Profile unavailable." + +#: src/Module/RemoteFollow.php:68 +msgid "Invalid locator" +msgstr "Invalid locator" + +#: src/Module/RemoteFollow.php:75 msgid "The provided profile link doesn't seem to be valid" msgstr "" -#: src/Module/RemoteFollow.php:105 +#: src/Module/RemoteFollow.php:80 +msgid "" +"Remote subscription can't be done for your network. Please subscribe " +"directly on your system." +msgstr "Remote subscription can't be done for your network. Please subscribe directly on your system." + +#: src/Module/RemoteFollow.php:110 +msgid "Friend/Connection Request" +msgstr "Friend/Connection request" + +#: src/Module/RemoteFollow.php:111 #, php-format msgid "" "Enter your Webfinger address (user@domain.tld) or profile URL here. If this " @@ -9074,15 +8781,26 @@ msgid "" " or %s directly on your system." msgstr "Enter your WebFinger address (user@domain.tld) or profile URL here. If this isn't supported by your system, you have to subscribe to %s or %s directly on your system." -#: src/Module/Search/Index.php:55 +#: src/Module/RemoteFollow.php:112 +#, php-format +msgid "" +"If you are not yet a member of the free social web, follow " +"this link to find a public Friendica node and join us today." +msgstr "" + +#: src/Module/RemoteFollow.php:113 +msgid "Your Webfinger address or profile URL:" +msgstr "Your WebFinger address or profile URL:" + +#: src/Module/Search/Index.php:54 msgid "Only logged in users are permitted to perform a search." msgstr "Only logged in users are permitted to perform a search." -#: src/Module/Search/Index.php:77 +#: src/Module/Search/Index.php:76 msgid "Only one search per minute is permitted for not logged in users." msgstr "Only one search per minute is permitted for not-logged-in users." -#: src/Module/Search/Index.php:191 +#: src/Module/Search/Index.php:192 #, php-format msgid "Items tagged with: %s" msgstr "Items tagged with: %s" @@ -9099,49 +8817,49 @@ msgstr "Search term already saved." msgid "Search term was not removed." msgstr "" -#: src/Module/Security/Login.php:101 +#: src/Module/Security/Login.php:105 msgid "Create a New Account" msgstr "Create a new account" -#: src/Module/Security/Login.php:126 +#: src/Module/Security/Login.php:130 msgid "Your OpenID: " msgstr "Your OpenID: " -#: src/Module/Security/Login.php:129 +#: src/Module/Security/Login.php:133 msgid "" "Please enter your username and password to add the OpenID to your existing " "account." msgstr "Please enter your username and password to add the OpenID to your existing account." -#: src/Module/Security/Login.php:131 +#: src/Module/Security/Login.php:135 msgid "Or login using OpenID: " msgstr "Or login with OpenID: " -#: src/Module/Security/Login.php:145 +#: src/Module/Security/Login.php:149 msgid "Password: " msgstr "Password: " -#: src/Module/Security/Login.php:146 +#: src/Module/Security/Login.php:150 msgid "Remember me" msgstr "Remember me" -#: src/Module/Security/Login.php:155 +#: src/Module/Security/Login.php:159 msgid "Forgot your password?" msgstr "Forgot your password?" -#: src/Module/Security/Login.php:158 +#: src/Module/Security/Login.php:162 msgid "Website Terms of Service" msgstr "Website Terms of Service" -#: src/Module/Security/Login.php:159 +#: src/Module/Security/Login.php:163 msgid "terms of service" msgstr "Terms of service" -#: src/Module/Security/Login.php:161 +#: src/Module/Security/Login.php:165 msgid "Website Privacy Policy" msgstr "Website Privacy Policy" -#: src/Module/Security/Login.php:162 +#: src/Module/Security/Login.php:166 msgid "privacy policy" msgstr "Privacy policy" @@ -9165,57 +8883,57 @@ msgid "" "account to add the OpenID to it." msgstr "Account not found. Please register a new account or login to your existing account to add the OpenID." -#: src/Module/Security/TwoFactor/Recovery.php:60 +#: src/Module/Security/TwoFactor/Recovery.php:61 #, php-format msgid "Remaining recovery codes: %d" msgstr "Remaining recovery codes: %d" -#: src/Module/Security/TwoFactor/Recovery.php:64 -#: src/Module/Security/TwoFactor/Verify.php:75 +#: src/Module/Security/TwoFactor/Recovery.php:65 +#: src/Module/Security/TwoFactor/Verify.php:76 #: src/Module/Settings/TwoFactor/Verify.php:82 msgid "Invalid code, please retry." msgstr "Invalid code, please try again." -#: src/Module/Security/TwoFactor/Recovery.php:83 +#: src/Module/Security/TwoFactor/Recovery.php:84 msgid "Two-factor recovery" msgstr "Two-factor recovery" -#: src/Module/Security/TwoFactor/Recovery.php:84 +#: src/Module/Security/TwoFactor/Recovery.php:85 msgid "" "

You can enter one of your one-time recovery codes in case you lost access" " to your mobile device.

" msgstr "

You can enter one of your one-time recovery codes in case you lost access to your mobile device.

" -#: src/Module/Security/TwoFactor/Recovery.php:85 -#: src/Module/Security/TwoFactor/Verify.php:98 +#: src/Module/Security/TwoFactor/Recovery.php:86 +#: src/Module/Security/TwoFactor/Verify.php:99 #, php-format msgid "Don’t have your phone? Enter a two-factor recovery code" msgstr "Don’t have your phone? Enter a two-factor recovery code" -#: src/Module/Security/TwoFactor/Recovery.php:86 +#: src/Module/Security/TwoFactor/Recovery.php:87 msgid "Please enter a recovery code" msgstr "Please enter a recovery code" -#: src/Module/Security/TwoFactor/Recovery.php:87 +#: src/Module/Security/TwoFactor/Recovery.php:88 msgid "Submit recovery code and complete login" msgstr "Submit recovery code and complete login" -#: src/Module/Security/TwoFactor/Verify.php:95 +#: src/Module/Security/TwoFactor/Verify.php:96 msgid "" "

Open the two-factor authentication app on your device to get an " "authentication code and verify your identity.

" msgstr "

Open the two-factor authentication app on your device to get an authentication code and verify your identity.

" -#: src/Module/Security/TwoFactor/Verify.php:99 +#: src/Module/Security/TwoFactor/Verify.php:100 #: src/Module/Settings/TwoFactor/Verify.php:141 msgid "Please enter a code from your authentication app" msgstr "Please enter a code from your authentication app" -#: src/Module/Security/TwoFactor/Verify.php:100 +#: src/Module/Security/TwoFactor/Verify.php:101 msgid "This is my two-factor authenticator app device" msgstr "" -#: src/Module/Security/TwoFactor/Verify.php:101 +#: src/Module/Security/TwoFactor/Verify.php:102 msgid "Verify code and complete login" msgstr "Verify code and complete login" @@ -9297,254 +9015,261 @@ msgstr "Add" msgid "No entries." msgstr "No entries." -#: src/Module/Settings/Display.php:105 +#: src/Module/Settings/Display.php:108 msgid "The theme you chose isn't available." msgstr "The theme you chose isn't available." -#: src/Module/Settings/Display.php:142 +#: src/Module/Settings/Display.php:147 #, php-format msgid "%s - (Unsupported)" msgstr "%s - (Unsupported)" -#: src/Module/Settings/Display.php:188 +#: src/Module/Settings/Display.php:193 msgid "Display Settings" msgstr "Display Settings" -#: src/Module/Settings/Display.php:190 +#: src/Module/Settings/Display.php:195 msgid "General Theme Settings" msgstr "Themes" -#: src/Module/Settings/Display.php:191 +#: src/Module/Settings/Display.php:196 msgid "Custom Theme Settings" msgstr "Theme customization" -#: src/Module/Settings/Display.php:192 +#: src/Module/Settings/Display.php:197 msgid "Content Settings" msgstr "Content/Layout" -#: src/Module/Settings/Display.php:193 view/theme/duepuntozero/config.php:70 +#: src/Module/Settings/Display.php:198 view/theme/duepuntozero/config.php:70 #: view/theme/frio/config.php:161 view/theme/quattro/config.php:72 #: view/theme/vier/config.php:120 msgid "Theme settings" msgstr "Theme settings" -#: src/Module/Settings/Display.php:194 +#: src/Module/Settings/Display.php:199 msgid "Calendar" msgstr "Calendar" -#: src/Module/Settings/Display.php:200 +#: src/Module/Settings/Display.php:205 msgid "Display Theme:" msgstr "Display theme:" -#: src/Module/Settings/Display.php:201 +#: src/Module/Settings/Display.php:206 msgid "Mobile Theme:" msgstr "Mobile theme:" -#: src/Module/Settings/Display.php:204 +#: src/Module/Settings/Display.php:209 msgid "Number of items to display per page:" msgstr "Number of items displayed per page:" -#: src/Module/Settings/Display.php:204 src/Module/Settings/Display.php:205 +#: src/Module/Settings/Display.php:209 src/Module/Settings/Display.php:210 msgid "Maximum of 100 items" msgstr "Maximum of 100 items" -#: src/Module/Settings/Display.php:205 +#: src/Module/Settings/Display.php:210 msgid "Number of items to display per page when viewed from mobile device:" msgstr "Number of items displayed per page on mobile devices:" -#: src/Module/Settings/Display.php:206 +#: src/Module/Settings/Display.php:211 msgid "Update browser every xx seconds" msgstr "Update browser every so many seconds:" -#: src/Module/Settings/Display.php:206 +#: src/Module/Settings/Display.php:211 msgid "Minimum of 10 seconds. Enter -1 to disable it." msgstr "Minimum 10 seconds; to disable -1." -#: src/Module/Settings/Display.php:207 +#: src/Module/Settings/Display.php:212 msgid "Automatic updates only at the top of the post stream pages" msgstr "" -#: src/Module/Settings/Display.php:207 +#: src/Module/Settings/Display.php:212 msgid "" "Auto update may add new posts at the top of the post stream pages, which can" " affect the scroll position and perturb normal reading if it happens " "anywhere else the top of the page." msgstr "" -#: src/Module/Settings/Display.php:208 -msgid "Don't show emoticons" -msgstr "Don't show emoticons" - -#: src/Module/Settings/Display.php:208 -msgid "" -"Normally emoticons are replaced with matching symbols. This setting disables" -" this behaviour." +#: src/Module/Settings/Display.php:213 +msgid "Display emoticons" msgstr "" -#: src/Module/Settings/Display.php:209 +#: src/Module/Settings/Display.php:213 +msgid "When enabled, emoticons are replaced with matching symbols." +msgstr "" + +#: src/Module/Settings/Display.php:214 msgid "Infinite scroll" msgstr "Infinite scroll" -#: src/Module/Settings/Display.php:209 +#: src/Module/Settings/Display.php:214 msgid "Automatic fetch new items when reaching the page end." msgstr "" -#: src/Module/Settings/Display.php:210 -msgid "Disable Smart Threading" -msgstr "Disable smart threading" - -#: src/Module/Settings/Display.php:210 -msgid "Disable the automatic suppression of extraneous thread indentation." -msgstr "Disable the automatic suppression of extraneous thread indentation." - -#: src/Module/Settings/Display.php:211 -msgid "Hide the Dislike feature" -msgstr "" - -#: src/Module/Settings/Display.php:211 -msgid "Hides the Dislike button and dislike reactions on posts and comments." -msgstr "" - -#: src/Module/Settings/Display.php:212 -msgid "Display the resharer" -msgstr "" - -#: src/Module/Settings/Display.php:212 -msgid "Display the first resharer as icon and text on a reshared item." -msgstr "" - -#: src/Module/Settings/Display.php:213 -msgid "Stay local" -msgstr "" - -#: src/Module/Settings/Display.php:213 -msgid "Don't go to a remote system when following a contact link." +#: src/Module/Settings/Display.php:215 +msgid "Enable Smart Threading" msgstr "" #: src/Module/Settings/Display.php:215 +msgid "Enable the automatic suppression of extraneous thread indentation." +msgstr "" + +#: src/Module/Settings/Display.php:216 +msgid "Display the Dislike feature" +msgstr "" + +#: src/Module/Settings/Display.php:216 +msgid "" +"Display the Dislike button and dislike reactions on posts and comments." +msgstr "" + +#: src/Module/Settings/Display.php:217 +msgid "Display the resharer" +msgstr "" + +#: src/Module/Settings/Display.php:217 +msgid "Display the first resharer as icon and text on a reshared item." +msgstr "" + +#: src/Module/Settings/Display.php:218 +msgid "Stay local" +msgstr "" + +#: src/Module/Settings/Display.php:218 +msgid "Don't go to a remote system when following a contact link." +msgstr "" + +#: src/Module/Settings/Display.php:220 msgid "Beginning of week:" msgstr "Week begins: " -#: src/Module/Settings/Profile/Index.php:85 +#: src/Module/Settings/Profile/Index.php:84 msgid "Profile Name is required." msgstr "Profile name is required." -#: src/Module/Settings/Profile/Index.php:137 +#: src/Module/Settings/Profile/Index.php:132 msgid "Profile couldn't be updated." msgstr "" -#: src/Module/Settings/Profile/Index.php:187 -#: src/Module/Settings/Profile/Index.php:207 +#: src/Module/Settings/Profile/Index.php:173 +#: src/Module/Settings/Profile/Index.php:193 msgid "Label:" msgstr "" -#: src/Module/Settings/Profile/Index.php:188 -#: src/Module/Settings/Profile/Index.php:208 +#: src/Module/Settings/Profile/Index.php:174 +#: src/Module/Settings/Profile/Index.php:194 msgid "Value:" msgstr "" -#: src/Module/Settings/Profile/Index.php:198 -#: src/Module/Settings/Profile/Index.php:218 +#: src/Module/Settings/Profile/Index.php:184 +#: src/Module/Settings/Profile/Index.php:204 msgid "Field Permissions" msgstr "Field Permissions" -#: src/Module/Settings/Profile/Index.php:199 -#: src/Module/Settings/Profile/Index.php:219 +#: src/Module/Settings/Profile/Index.php:185 +#: src/Module/Settings/Profile/Index.php:205 msgid "(click to open/close)" msgstr "(reveal/hide)" -#: src/Module/Settings/Profile/Index.php:205 +#: src/Module/Settings/Profile/Index.php:191 msgid "Add a new profile field" msgstr "" -#: src/Module/Settings/Profile/Index.php:235 +#: src/Module/Settings/Profile/Index.php:221 msgid "Profile Actions" msgstr "Profile actions" -#: src/Module/Settings/Profile/Index.php:236 +#: src/Module/Settings/Profile/Index.php:222 msgid "Edit Profile Details" msgstr "Edit Profile Details" -#: src/Module/Settings/Profile/Index.php:238 +#: src/Module/Settings/Profile/Index.php:224 msgid "Change Profile Photo" msgstr "Change profile photo" -#: src/Module/Settings/Profile/Index.php:243 +#: src/Module/Settings/Profile/Index.php:229 msgid "Profile picture" msgstr "Profile picture" -#: src/Module/Settings/Profile/Index.php:244 +#: src/Module/Settings/Profile/Index.php:230 msgid "Location" msgstr "Location" -#: src/Module/Settings/Profile/Index.php:245 src/Util/Temporal.php:93 +#: src/Module/Settings/Profile/Index.php:231 src/Util/Temporal.php:93 #: src/Util/Temporal.php:95 msgid "Miscellaneous" msgstr "Miscellaneous" -#: src/Module/Settings/Profile/Index.php:246 +#: src/Module/Settings/Profile/Index.php:232 msgid "Custom Profile Fields" msgstr "" -#: src/Module/Settings/Profile/Index.php:248 src/Module/Welcome.php:58 +#: src/Module/Settings/Profile/Index.php:234 src/Module/Welcome.php:58 msgid "Upload Profile Photo" msgstr "Upload profile photo" -#: src/Module/Settings/Profile/Index.php:252 +#: src/Module/Settings/Profile/Index.php:238 msgid "Display name:" msgstr "" -#: src/Module/Settings/Profile/Index.php:255 +#: src/Module/Settings/Profile/Index.php:241 msgid "Street Address:" msgstr "Street address:" -#: src/Module/Settings/Profile/Index.php:256 +#: src/Module/Settings/Profile/Index.php:242 msgid "Locality/City:" msgstr "Locality/City:" -#: src/Module/Settings/Profile/Index.php:257 +#: src/Module/Settings/Profile/Index.php:243 msgid "Region/State:" msgstr "Region/State:" -#: src/Module/Settings/Profile/Index.php:258 +#: src/Module/Settings/Profile/Index.php:244 msgid "Postal/Zip Code:" msgstr "Postcode:" -#: src/Module/Settings/Profile/Index.php:259 +#: src/Module/Settings/Profile/Index.php:245 msgid "Country:" msgstr "Country:" -#: src/Module/Settings/Profile/Index.php:261 +#: src/Module/Settings/Profile/Index.php:247 msgid "XMPP (Jabber) address:" msgstr "XMPP (Jabber) address:" -#: src/Module/Settings/Profile/Index.php:261 +#: src/Module/Settings/Profile/Index.php:247 msgid "" -"The XMPP address will be propagated to your contacts so that they can follow" -" you." -msgstr "The XMPP address will be propagated to your contacts so that they can follow you." +"The XMPP address will be published so that people can follow you there." +msgstr "" -#: src/Module/Settings/Profile/Index.php:262 +#: src/Module/Settings/Profile/Index.php:248 +msgid "Matrix (Element) address:" +msgstr "" + +#: src/Module/Settings/Profile/Index.php:248 +msgid "" +"The Matrix address will be published so that people can follow you there." +msgstr "" + +#: src/Module/Settings/Profile/Index.php:249 msgid "Homepage URL:" msgstr "Homepage URL:" -#: src/Module/Settings/Profile/Index.php:263 +#: src/Module/Settings/Profile/Index.php:250 msgid "Public Keywords:" msgstr "Public keywords:" -#: src/Module/Settings/Profile/Index.php:263 +#: src/Module/Settings/Profile/Index.php:250 msgid "(Used for suggesting potential friends, can be seen by others)" msgstr "Used for suggesting potential friends, can be seen by others." -#: src/Module/Settings/Profile/Index.php:264 +#: src/Module/Settings/Profile/Index.php:251 msgid "Private Keywords:" msgstr "Private keywords:" -#: src/Module/Settings/Profile/Index.php:264 +#: src/Module/Settings/Profile/Index.php:251 msgid "(Used for searching profiles, never shown to others)" msgstr "Used for searching profiles, never shown to others." -#: src/Module/Settings/Profile/Index.php:265 +#: src/Module/Settings/Profile/Index.php:252 #, php-format msgid "" "

Custom fields appear on your profile page.

\n" @@ -9554,74 +9279,74 @@ msgid "" "\t\t\t\t

Non-public fields can only be seen by the selected Friendica contacts or the Friendica contacts in the selected groups.

" msgstr "" -#: src/Module/Settings/Profile/Photo/Crop.php:102 -#: src/Module/Settings/Profile/Photo/Crop.php:118 -#: src/Module/Settings/Profile/Photo/Crop.php:134 -#: src/Module/Settings/Profile/Photo/Index.php:103 +#: src/Module/Settings/Profile/Photo/Crop.php:108 +#: src/Module/Settings/Profile/Photo/Crop.php:126 +#: src/Module/Settings/Profile/Photo/Crop.php:144 +#: src/Module/Settings/Profile/Photo/Index.php:102 #, php-format msgid "Image size reduction [%s] failed." msgstr "Image size reduction [%s] failed." -#: src/Module/Settings/Profile/Photo/Crop.php:139 +#: src/Module/Settings/Profile/Photo/Crop.php:151 msgid "" "Shift-reload the page or clear browser cache if the new photo does not " "display immediately." msgstr "Shift-reload the page or clear browser cache if the new photo does not display immediately." -#: src/Module/Settings/Profile/Photo/Crop.php:147 +#: src/Module/Settings/Profile/Photo/Crop.php:156 msgid "Unable to process image" msgstr "Unable to process image" -#: src/Module/Settings/Profile/Photo/Crop.php:166 +#: src/Module/Settings/Profile/Photo/Crop.php:175 msgid "Photo not found." msgstr "" -#: src/Module/Settings/Profile/Photo/Crop.php:190 +#: src/Module/Settings/Profile/Photo/Crop.php:197 msgid "Profile picture successfully updated." msgstr "" -#: src/Module/Settings/Profile/Photo/Crop.php:213 -#: src/Module/Settings/Profile/Photo/Crop.php:217 +#: src/Module/Settings/Profile/Photo/Crop.php:223 +#: src/Module/Settings/Profile/Photo/Crop.php:227 msgid "Crop Image" msgstr "Crop Image" -#: src/Module/Settings/Profile/Photo/Crop.php:214 +#: src/Module/Settings/Profile/Photo/Crop.php:224 msgid "Please adjust the image cropping for optimum viewing." msgstr "Please adjust the image cropping for optimum viewing." -#: src/Module/Settings/Profile/Photo/Crop.php:216 +#: src/Module/Settings/Profile/Photo/Crop.php:226 msgid "Use Image As Is" msgstr "" -#: src/Module/Settings/Profile/Photo/Index.php:47 +#: src/Module/Settings/Profile/Photo/Index.php:46 msgid "Missing uploaded image." msgstr "" -#: src/Module/Settings/Profile/Photo/Index.php:126 +#: src/Module/Settings/Profile/Photo/Index.php:125 msgid "Profile Picture Settings" msgstr "" -#: src/Module/Settings/Profile/Photo/Index.php:127 +#: src/Module/Settings/Profile/Photo/Index.php:126 msgid "Current Profile Picture" msgstr "" -#: src/Module/Settings/Profile/Photo/Index.php:128 +#: src/Module/Settings/Profile/Photo/Index.php:127 msgid "Upload Profile Picture" msgstr "" -#: src/Module/Settings/Profile/Photo/Index.php:129 +#: src/Module/Settings/Profile/Photo/Index.php:128 msgid "Upload Picture:" msgstr "" -#: src/Module/Settings/Profile/Photo/Index.php:134 +#: src/Module/Settings/Profile/Photo/Index.php:133 msgid "or" msgstr "or" -#: src/Module/Settings/Profile/Photo/Index.php:136 +#: src/Module/Settings/Profile/Photo/Index.php:135 msgid "skip this step" msgstr "skip this step" -#: src/Module/Settings/Profile/Photo/Index.php:138 +#: src/Module/Settings/Profile/Photo/Index.php:137 msgid "select a photo from your photo albums" msgstr "select a photo from your photo albums" @@ -9915,32 +9640,32 @@ msgstr "" msgid "Verify code and enable two-factor authentication" msgstr "Verify code and enable two-factor authentication" -#: src/Module/Settings/UserExport.php:69 +#: src/Module/Settings/UserExport.php:68 msgid "Export account" msgstr "Export account" -#: src/Module/Settings/UserExport.php:69 +#: src/Module/Settings/UserExport.php:68 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 "Export your account info and contacts. Use this to backup your account or to move it to another server." -#: src/Module/Settings/UserExport.php:70 +#: src/Module/Settings/UserExport.php:69 msgid "Export all" msgstr "Export all" -#: src/Module/Settings/UserExport.php:70 +#: src/Module/Settings/UserExport.php:69 msgid "" "Export your account 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 "" -#: src/Module/Settings/UserExport.php:71 +#: src/Module/Settings/UserExport.php:70 msgid "Export Contacts to CSV" msgstr "Export contacts to CSV" -#: src/Module/Settings/UserExport.php:71 +#: src/Module/Settings/UserExport.php:70 msgid "" "Export the list of the accounts you are following as CSV file. Compatible to" " e.g. Mastodon." @@ -9950,10 +9675,6 @@ msgstr "Export the list of the accounts you are following as CSV file. Compatibl msgid "Bad Request" msgstr "Bad request" -#: src/Module/Special/HTTPException.php:50 -msgid "Unauthorized" -msgstr "Unauthorized" - #: src/Module/Special/HTTPException.php:51 msgid "Forbidden" msgstr "Forbidden" @@ -9962,10 +9683,6 @@ msgstr "Forbidden" msgid "Not Found" msgstr "Not found" -#: src/Module/Special/HTTPException.php:53 -msgid "Internal Server Error" -msgstr "Internal Server Error" - #: src/Module/Special/HTTPException.php:54 msgid "Service Unavailable" msgstr "Service Unavailable" @@ -10214,250 +9931,657 @@ msgid "" " features and resources." msgstr "Our help pages may be consulted for detail on other program features and resources." -#: src/Object/EMail/ItemCCEMail.php:39 +#: src/Navigation/Notifications/Factory/FormattedNotification.php:89 +#, php-format +msgid "%s liked %s's post" +msgstr "%s liked %s's post" + +#: src/Navigation/Notifications/Factory/FormattedNotification.php:101 +#, php-format +msgid "%s disliked %s's post" +msgstr "%s disliked %s's post" + +#: src/Navigation/Notifications/Factory/FormattedNotification.php:113 +#, php-format +msgid "%s is attending %s's event" +msgstr "%s is going to %s's event" + +#: src/Navigation/Notifications/Factory/FormattedNotification.php:125 +#, php-format +msgid "%s is not attending %s's event" +msgstr "%s is not going to %s's event" + +#: src/Navigation/Notifications/Factory/FormattedNotification.php:137 +#, php-format +msgid "%s may attending %s's event" +msgstr "" + +#: src/Navigation/Notifications/Factory/FormattedNotification.php:167 +#, php-format +msgid "%s is now friends with %s" +msgstr "%s is now friends with %s" + +#: src/Navigation/Notifications/Factory/FormattedNotification.php:334 +#: src/Navigation/Notifications/Factory/FormattedNotification.php:372 +#, php-format +msgid "%s commented on %s's post" +msgstr "%s commented on %s's post" + +#: src/Navigation/Notifications/Factory/FormattedNotification.php:371 +#, php-format +msgid "%s created a new post" +msgstr "%s posted something new" + +#: src/Navigation/Notifications/Factory/Introduction.php:133 +msgid "Friend Suggestion" +msgstr "Friend suggestion" + +#: src/Navigation/Notifications/Factory/Introduction.php:159 +msgid "Friend/Connect Request" +msgstr "Friend/Contact request" + +#: src/Navigation/Notifications/Factory/Introduction.php:159 +msgid "New Follower" +msgstr "New follower" + +#: src/Navigation/Notifications/Factory/Notification.php:74 +#, php-format +msgid "%1$s wants to follow you" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:76 +#, php-format +msgid "%1$s had started following you" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:141 +#, php-format +msgid "%1$s liked your comment %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:144 +#, php-format +msgid "%1$s liked your post %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:151 +#, php-format +msgid "%1$s disliked your comment %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:154 +#, php-format +msgid "%1$s disliked your post %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:161 +#, php-format +msgid "%1$s shared your comment %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:164 +#, php-format +msgid "%1$s shared your post %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:171 +#, php-format +msgid "%1$s tagged you on %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:175 +#, php-format +msgid "%1$s replied to you on %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:179 +#, php-format +msgid "%1$s commented in your thread %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:183 +#, php-format +msgid "%1$s commented on your comment %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:189 +#, php-format +msgid "%1$s commented in their thread %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:191 +#, php-format +msgid "%1$s commented in their thread" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:193 +#, php-format +msgid "%1$s commented in the thread %2$s from %3$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:195 +#, php-format +msgid "%1$s commented in the thread from %3$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:200 +#, php-format +msgid "%1$s commented on your thread %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:205 +#, php-format +msgid "%1$s shared the post %2$s from %3$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:207 +#, php-format +msgid "%1$s shared a post from %3$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:209 +#, php-format +msgid "%1$s shared the post %2$s" +msgstr "" + +#: src/Navigation/Notifications/Factory/Notification.php:211 +#, php-format +msgid "%1$s shared a post" +msgstr "" + +#: src/Navigation/Notifications/Repository/Notify.php:192 +#: src/Navigation/Notifications/Repository/Notify.php:675 +msgid "[Friendica:Notify]" +msgstr "" + +#: src/Navigation/Notifications/Repository/Notify.php:256 +#, php-format +msgid "%s New mail received at %s" +msgstr "" + +#: src/Navigation/Notifications/Repository/Notify.php:258 +#, php-format +msgid "%1$s sent you a new private message at %2$s." +msgstr "%1$s sent you a new private message at %2$s." + +#: src/Navigation/Notifications/Repository/Notify.php:259 +msgid "a private message" +msgstr "a private message" + +#: src/Navigation/Notifications/Repository/Notify.php:259 +#, php-format +msgid "%1$s sent you %2$s." +msgstr "%1$s sent you %2$s." + +#: src/Navigation/Notifications/Repository/Notify.php:261 +#, php-format +msgid "Please visit %s to view and/or reply to your private messages." +msgstr "Please visit %s to view or reply to your private messages." + +#: src/Navigation/Notifications/Repository/Notify.php:292 +#, php-format +msgid "%1$s commented on %2$s's %3$s %4$s" +msgstr "" + +#: src/Navigation/Notifications/Repository/Notify.php:297 +#, php-format +msgid "%1$s commented on your %2$s %3$s" +msgstr "" + +#: src/Navigation/Notifications/Repository/Notify.php:301 +#, php-format +msgid "%1$s commented on their %2$s %3$s" +msgstr "" + +#: src/Navigation/Notifications/Repository/Notify.php:305 +#: src/Navigation/Notifications/Repository/Notify.php:710 +#, php-format +msgid "%1$s Comment to conversation #%2$d by %3$s" +msgstr "" + +#: src/Navigation/Notifications/Repository/Notify.php:307 +#, php-format +msgid "%s commented on an item/conversation you have been following." +msgstr "%s commented on an item/conversation you have been following." + +#: src/Navigation/Notifications/Repository/Notify.php:311 +#: src/Navigation/Notifications/Repository/Notify.php:326 +#: src/Navigation/Notifications/Repository/Notify.php:345 +#: src/Navigation/Notifications/Repository/Notify.php:725 +#, php-format +msgid "Please visit %s to view and/or reply to the conversation." +msgstr "Please visit %s to view or reply to the conversation." + +#: src/Navigation/Notifications/Repository/Notify.php:318 +#, php-format +msgid "%s %s posted to your profile wall" +msgstr "" + +#: src/Navigation/Notifications/Repository/Notify.php:320 +#, php-format +msgid "%1$s posted to your profile wall at %2$s" +msgstr "%1$s posted to your profile wall at %2$s" + +#: src/Navigation/Notifications/Repository/Notify.php:321 +#, php-format +msgid "%1$s posted to [url=%2$s]your wall[/url]" +msgstr "%1$s posted to [url=%2$s]your wall[/url]" + +#: src/Navigation/Notifications/Repository/Notify.php:333 +#, php-format +msgid "%1$s %2$s poked you" +msgstr "" + +#: src/Navigation/Notifications/Repository/Notify.php:335 +#, php-format +msgid "%1$s poked you at %2$s" +msgstr "%1$s poked you at %2$s" + +#: src/Navigation/Notifications/Repository/Notify.php:336 +#, php-format +msgid "%1$s [url=%2$s]poked you[/url]." +msgstr "%1$s [url=%2$s]poked you[/url]." + +#: src/Navigation/Notifications/Repository/Notify.php:353 +#, php-format +msgid "%s Introduction received" +msgstr "" + +#: src/Navigation/Notifications/Repository/Notify.php:355 +#, php-format +msgid "You've received an introduction from '%1$s' at %2$s" +msgstr "You've received an introduction from '%1$s' at %2$s" + +#: src/Navigation/Notifications/Repository/Notify.php:356 +#, php-format +msgid "You've received [url=%1$s]an introduction[/url] from %2$s." +msgstr "You've received [url=%1$s]an introduction[/url] from %2$s." + +#: src/Navigation/Notifications/Repository/Notify.php:361 +#: src/Navigation/Notifications/Repository/Notify.php:407 +#, php-format +msgid "You may visit their profile at %s" +msgstr "You may visit their profile at %s" + +#: src/Navigation/Notifications/Repository/Notify.php:363 +#, php-format +msgid "Please visit %s to approve or reject the introduction." +msgstr "Please visit %s to approve or reject the introduction." + +#: src/Navigation/Notifications/Repository/Notify.php:370 +#, php-format +msgid "%s A new person is sharing with you" +msgstr "" + +#: src/Navigation/Notifications/Repository/Notify.php:372 +#: src/Navigation/Notifications/Repository/Notify.php:373 +#, php-format +msgid "%1$s is sharing with you at %2$s" +msgstr "%1$s is sharing with you at %2$s" + +#: src/Navigation/Notifications/Repository/Notify.php:380 +#, php-format +msgid "%s You have a new follower" +msgstr "" + +#: src/Navigation/Notifications/Repository/Notify.php:382 +#: src/Navigation/Notifications/Repository/Notify.php:383 +#, php-format +msgid "You have a new follower at %2$s : %1$s" +msgstr "You have a new follower at %2$s : %1$s" + +#: src/Navigation/Notifications/Repository/Notify.php:396 +#, php-format +msgid "%s Friend suggestion received" +msgstr "" + +#: src/Navigation/Notifications/Repository/Notify.php:398 +#, php-format +msgid "You've received a friend suggestion from '%1$s' at %2$s" +msgstr "You've received a friend suggestion from '%1$s' at %2$s" + +#: src/Navigation/Notifications/Repository/Notify.php:399 +#, php-format +msgid "" +"You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s." +msgstr "You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s." + +#: src/Navigation/Notifications/Repository/Notify.php:405 +msgid "Name:" +msgstr "Name:" + +#: src/Navigation/Notifications/Repository/Notify.php:406 +msgid "Photo:" +msgstr "Photo:" + +#: src/Navigation/Notifications/Repository/Notify.php:409 +#, php-format +msgid "Please visit %s to approve or reject the suggestion." +msgstr "Please visit %s to approve or reject the suggestion." + +#: src/Navigation/Notifications/Repository/Notify.php:417 +#: src/Navigation/Notifications/Repository/Notify.php:432 +#, php-format +msgid "%s Connection accepted" +msgstr "" + +#: src/Navigation/Notifications/Repository/Notify.php:419 +#: src/Navigation/Notifications/Repository/Notify.php:434 +#, php-format +msgid "'%1$s' has accepted your connection request at %2$s" +msgstr "'%1$s' has accepted your connection request at %2$s" + +#: src/Navigation/Notifications/Repository/Notify.php:420 +#: src/Navigation/Notifications/Repository/Notify.php:435 +#, php-format +msgid "%2$s has accepted your [url=%1$s]connection request[/url]." +msgstr "%2$s has accepted your [url=%1$s]connection request[/url]." + +#: src/Navigation/Notifications/Repository/Notify.php:425 +msgid "" +"You are now mutual friends and may exchange status updates, photos, and " +"email without restriction." +msgstr "You are now mutual friends and may exchange status updates, photos, and email without restriction." + +#: src/Navigation/Notifications/Repository/Notify.php:427 +#, php-format +msgid "Please visit %s if you wish to make any changes to this relationship." +msgstr "Please visit %s if you wish to make any changes to this relationship." + +#: src/Navigation/Notifications/Repository/Notify.php:440 +#, php-format +msgid "" +"'%1$s' has chosen to accept you a fan, which restricts some forms of " +"communication - such as private messaging and some profile interactions. If " +"this is a celebrity or community page, these settings were applied " +"automatically." +msgstr "'%1$s' has chosen to accept you as a fan, which restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically." + +#: src/Navigation/Notifications/Repository/Notify.php:442 +#, php-format +msgid "" +"'%1$s' may choose to extend this into a two-way or more permissive " +"relationship in the future." +msgstr "'%1$s' may choose to extend this into a two-way or more permissive relationship in the future." + +#: src/Navigation/Notifications/Repository/Notify.php:444 +#, php-format +msgid "Please visit %s if you wish to make any changes to this relationship." +msgstr "Please visit %s if you wish to make any changes to this relationship." + +#: src/Navigation/Notifications/Repository/Notify.php:454 +msgid "registration request" +msgstr "registration request" + +#: src/Navigation/Notifications/Repository/Notify.php:456 +#, php-format +msgid "You've received a registration request from '%1$s' at %2$s" +msgstr "You've received a registration request from '%1$s' at %2$s." + +#: src/Navigation/Notifications/Repository/Notify.php:457 +#, php-format +msgid "You've received a [url=%1$s]registration request[/url] from %2$s." +msgstr "You've received a [url=%1$s]registration request[/url] from %2$s." + +#: src/Navigation/Notifications/Repository/Notify.php:462 +#, php-format +msgid "" +"Full Name:\t%s\n" +"Site Location:\t%s\n" +"Login Name:\t%s (%s)" +msgstr "Full Name:\t%s\nSite Location:\t%s\nLogin Name:\t%s (%s)" + +#: src/Navigation/Notifications/Repository/Notify.php:468 +#, php-format +msgid "Please visit %s to approve or reject the request." +msgstr "Please visit %s to approve or reject the request." + +#: src/Navigation/Notifications/Repository/Notify.php:704 +#, php-format +msgid "%s %s tagged you" +msgstr "" + +#: src/Navigation/Notifications/Repository/Notify.php:707 +#, php-format +msgid "%s %s shared a new post" +msgstr "" + +#: src/Object/EMail/ItemCCEMail.php:42 #, php-format msgid "" "This message was sent to you by %s, a member of the Friendica social " "network." msgstr "This message was sent to you by %s, a member of the Friendica social network." -#: src/Object/EMail/ItemCCEMail.php:41 +#: src/Object/EMail/ItemCCEMail.php:44 #, php-format msgid "You may visit them online at %s" msgstr "You may visit them online at %s" -#: src/Object/EMail/ItemCCEMail.php:42 +#: src/Object/EMail/ItemCCEMail.php:45 msgid "" "Please contact the sender by replying to this post if you do not wish to " "receive these messages." msgstr "Please contact the sender by replying to this post if you do not wish to receive these messages." -#: src/Object/EMail/ItemCCEMail.php:46 +#: src/Object/EMail/ItemCCEMail.php:49 #, php-format msgid "%s posted an update." msgstr "%s posted an update." -#: src/Object/Post.php:148 +#: src/Object/Post.php:149 msgid "This entry was edited" msgstr "This entry was edited" -#: src/Object/Post.php:176 +#: src/Object/Post.php:177 msgid "Private Message" msgstr "Private message" -#: src/Object/Post.php:214 -msgid "pinned item" -msgstr "pinned item" +#: src/Object/Post.php:193 src/Object/Post.php:195 +msgid "Edit" +msgstr "Edit" -#: src/Object/Post.php:218 +#: src/Object/Post.php:215 +msgid "Pinned item" +msgstr "" + +#: src/Object/Post.php:219 msgid "Delete globally" msgstr "Delete globally" -#: src/Object/Post.php:218 +#: src/Object/Post.php:219 msgid "Remove locally" msgstr "Remove locally" -#: src/Object/Post.php:231 +#: src/Object/Post.php:235 #, php-format msgid "Block %s" msgstr "" -#: src/Object/Post.php:236 -msgid "save to folder" -msgstr "Save to folder" +#: src/Object/Post.php:240 +msgid "Save to folder" +msgstr "" -#: src/Object/Post.php:270 +#: src/Object/Post.php:274 msgid "I will attend" msgstr "I will attend" -#: src/Object/Post.php:270 +#: src/Object/Post.php:274 msgid "I will not attend" msgstr "I will not attend" -#: src/Object/Post.php:270 +#: src/Object/Post.php:274 msgid "I might attend" msgstr "I might attend" -#: src/Object/Post.php:300 -msgid "ignore thread" -msgstr "Ignore thread" +#: src/Object/Post.php:304 +msgid "Ignore thread" +msgstr "" -#: src/Object/Post.php:301 -msgid "unignore thread" -msgstr "Unignore thread" +#: src/Object/Post.php:305 +msgid "Unignore thread" +msgstr "" -#: src/Object/Post.php:302 -msgid "toggle ignore status" -msgstr "Toggle ignore status" - -#: src/Object/Post.php:314 -msgid "pin" -msgstr "Pin" - -#: src/Object/Post.php:315 -msgid "unpin" -msgstr "Unpin" +#: src/Object/Post.php:306 +msgid "Toggle ignore status" +msgstr "" #: src/Object/Post.php:316 -msgid "toggle pin status" -msgstr "Toggle pin status" +msgid "Add star" +msgstr "" -#: src/Object/Post.php:319 -msgid "pinned" -msgstr "pinned" +#: src/Object/Post.php:317 +msgid "Remove star" +msgstr "" -#: src/Object/Post.php:326 -msgid "add star" -msgstr "Add star" +#: src/Object/Post.php:318 +msgid "Toggle star status" +msgstr "" -#: src/Object/Post.php:327 -msgid "remove star" -msgstr "Remove star" +#: src/Object/Post.php:329 +msgid "Pin" +msgstr "" -#: src/Object/Post.php:328 -msgid "toggle star status" -msgstr "Toggle star status" +#: src/Object/Post.php:330 +msgid "Unpin" +msgstr "" #: src/Object/Post.php:331 -msgid "starred" -msgstr "Starred" +msgid "Toggle pin status" +msgstr "" -#: src/Object/Post.php:335 -msgid "add tag" -msgstr "Add tag" +#: src/Object/Post.php:334 +msgid "Pinned" +msgstr "" -#: src/Object/Post.php:345 -msgid "like" -msgstr "Like" +#: src/Object/Post.php:339 +msgid "Add tag" +msgstr "" -#: src/Object/Post.php:346 -msgid "dislike" -msgstr "Dislike" - -#: src/Object/Post.php:348 +#: src/Object/Post.php:352 msgid "Quote share this" msgstr "" -#: src/Object/Post.php:348 +#: src/Object/Post.php:352 msgid "Quote Share" msgstr "" -#: src/Object/Post.php:351 +#: src/Object/Post.php:355 msgid "Reshare this" msgstr "" -#: src/Object/Post.php:351 +#: src/Object/Post.php:355 msgid "Reshare" msgstr "" -#: src/Object/Post.php:352 +#: src/Object/Post.php:356 msgid "Cancel your Reshare" msgstr "" -#: src/Object/Post.php:352 +#: src/Object/Post.php:356 msgid "Unshare" msgstr "" -#: src/Object/Post.php:397 +#: src/Object/Post.php:401 #, php-format msgid "%s (Received %s)" msgstr "%s (Received %s)" -#: src/Object/Post.php:402 +#: src/Object/Post.php:406 msgid "Comment this item on your system" msgstr "" -#: src/Object/Post.php:402 -msgid "remote comment" +#: src/Object/Post.php:406 +msgid "Remote comment" msgstr "" -#: src/Object/Post.php:414 +#: src/Object/Post.php:422 msgid "Pushed" msgstr "" -#: src/Object/Post.php:414 +#: src/Object/Post.php:422 msgid "Pulled" msgstr "" -#: src/Object/Post.php:446 +#: src/Object/Post.php:456 msgid "to" msgstr "to" -#: src/Object/Post.php:447 +#: src/Object/Post.php:457 msgid "via" msgstr "via" -#: src/Object/Post.php:448 +#: src/Object/Post.php:458 msgid "Wall-to-Wall" msgstr "Wall-to-wall" -#: src/Object/Post.php:449 +#: src/Object/Post.php:459 msgid "via Wall-To-Wall:" msgstr "via wall-to-wall:" -#: src/Object/Post.php:487 +#: src/Object/Post.php:497 #, php-format msgid "Reply to %s" msgstr "Reply to %s" -#: src/Object/Post.php:490 +#: src/Object/Post.php:500 msgid "More" msgstr "" -#: src/Object/Post.php:508 +#: src/Object/Post.php:518 msgid "Notifier task is pending" msgstr "Notifier task is pending" -#: src/Object/Post.php:509 +#: src/Object/Post.php:519 msgid "Delivery to remote servers is pending" msgstr "Delivery to remote servers is pending" -#: src/Object/Post.php:510 +#: src/Object/Post.php:520 msgid "Delivery to remote servers is underway" msgstr "Delivery to remote servers is underway" -#: src/Object/Post.php:511 +#: src/Object/Post.php:521 msgid "Delivery to remote servers is mostly done" msgstr "Delivery to remote servers is mostly done" -#: src/Object/Post.php:512 +#: src/Object/Post.php:522 msgid "Delivery to remote servers is done" msgstr "Delivery to remote servers is done" -#: src/Object/Post.php:532 +#: src/Object/Post.php:542 #, php-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d comment" msgstr[1] "%d comments" -#: src/Object/Post.php:533 +#: src/Object/Post.php:543 msgid "Show more" msgstr "Show more" -#: src/Object/Post.php:534 +#: src/Object/Post.php:544 msgid "Show fewer" msgstr "Show fewer" -#: src/Protocol/Diaspora.php:3446 +#: src/Protocol/Diaspora.php:3414 msgid "Attachments:" msgstr "Attachments:" -#: src/Protocol/OStatus.php:1760 +#: src/Protocol/OStatus.php:1645 #, php-format msgid "%s is now following %s." msgstr "%s is now following %s." -#: src/Protocol/OStatus.php:1761 +#: src/Protocol/OStatus.php:1646 msgid "following" msgstr "following" -#: src/Protocol/OStatus.php:1764 +#: src/Protocol/OStatus.php:1649 #, php-format msgid "%s stopped following %s." msgstr "%s stopped following %s." -#: src/Protocol/OStatus.php:1765 +#: src/Protocol/OStatus.php:1650 msgid "stopped following" msgstr "stopped following" @@ -10465,96 +10589,20 @@ msgstr "stopped following" msgid "The folder view/smarty3/ must be writable by webserver." msgstr "" -#: src/Repository/ProfileField.php:275 -msgid "Hometown:" -msgstr "Home town:" - -#: src/Repository/ProfileField.php:276 -msgid "Marital Status:" -msgstr "" - -#: src/Repository/ProfileField.php:277 -msgid "With:" -msgstr "" - -#: src/Repository/ProfileField.php:278 -msgid "Since:" -msgstr "" - -#: src/Repository/ProfileField.php:279 -msgid "Sexual Preference:" -msgstr "Sexual preference:" - -#: src/Repository/ProfileField.php:280 -msgid "Political Views:" -msgstr "Political views:" - -#: src/Repository/ProfileField.php:281 -msgid "Religious Views:" -msgstr "Religious views:" - -#: src/Repository/ProfileField.php:282 -msgid "Likes:" -msgstr "Likes:" - -#: src/Repository/ProfileField.php:283 -msgid "Dislikes:" -msgstr "Dislikes:" - -#: src/Repository/ProfileField.php:284 -msgid "Title/Description:" -msgstr "Title/Description:" - -#: src/Repository/ProfileField.php:286 -msgid "Musical interests" -msgstr "Music:" - -#: src/Repository/ProfileField.php:287 -msgid "Books, literature" -msgstr "Books, literature, poetry:" - -#: src/Repository/ProfileField.php:288 -msgid "Television" -msgstr "Television:" - -#: src/Repository/ProfileField.php:289 -msgid "Film/dance/culture/entertainment" -msgstr "Film, dance, culture, entertainment" - -#: src/Repository/ProfileField.php:290 -msgid "Hobbies/Interests" -msgstr "Hobbies/Interests:" - -#: src/Repository/ProfileField.php:291 -msgid "Love/romance" -msgstr "Love/Romance:" - -#: src/Repository/ProfileField.php:292 -msgid "Work/employment" -msgstr "Work/Employment:" - -#: src/Repository/ProfileField.php:293 -msgid "School/education" -msgstr "School/Education:" - -#: src/Repository/ProfileField.php:294 -msgid "Contact information and Social Networks" -msgstr "Contact information and other social networks:" - -#: src/Security/Authentication.php:209 src/Security/Authentication.php:261 +#: src/Security/Authentication.php:209 msgid "Login failed." msgstr "Login failed." -#: src/Security/Authentication.php:272 +#: src/Security/Authentication.php:250 msgid "Login failed. Please check your credentials." msgstr "Login failed. Please check your credentials." -#: src/Security/Authentication.php:391 +#: src/Security/Authentication.php:348 #, php-format msgid "Welcome %s" msgstr "Welcome %s" -#: src/Security/Authentication.php:392 +#: src/Security/Authentication.php:349 msgid "Please upload a profile photo." msgstr "Please upload a profile photo." @@ -10585,72 +10633,85 @@ msgstr "" msgid "YYYY-MM-DD or MM-DD" msgstr "" -#: src/Util/Temporal.php:314 +#: src/Util/Temporal.php:275 +#, php-format +msgid "Time zone: %s Change in Settings" +msgstr "" + +#: src/Util/Temporal.php:318 msgid "never" msgstr "" -#: src/Util/Temporal.php:321 +#: src/Util/Temporal.php:325 msgid "less than a second ago" msgstr "" -#: src/Util/Temporal.php:329 +#: src/Util/Temporal.php:333 msgid "year" msgstr "" -#: src/Util/Temporal.php:329 +#: src/Util/Temporal.php:333 msgid "years" msgstr "" -#: src/Util/Temporal.php:330 +#: src/Util/Temporal.php:334 msgid "months" msgstr "" -#: src/Util/Temporal.php:331 +#: src/Util/Temporal.php:335 msgid "weeks" msgstr "" -#: src/Util/Temporal.php:332 +#: src/Util/Temporal.php:336 msgid "days" msgstr "" -#: src/Util/Temporal.php:333 +#: src/Util/Temporal.php:337 msgid "hour" msgstr "" -#: src/Util/Temporal.php:333 +#: src/Util/Temporal.php:337 msgid "hours" msgstr "" -#: src/Util/Temporal.php:334 +#: src/Util/Temporal.php:338 msgid "minute" msgstr "" -#: src/Util/Temporal.php:334 +#: src/Util/Temporal.php:338 msgid "minutes" msgstr "" -#: src/Util/Temporal.php:335 +#: src/Util/Temporal.php:339 msgid "second" msgstr "" -#: src/Util/Temporal.php:335 +#: src/Util/Temporal.php:339 msgid "seconds" msgstr "" -#: src/Util/Temporal.php:345 +#: src/Util/Temporal.php:349 #, php-format msgid "in %1$d %2$s" msgstr "" -#: src/Util/Temporal.php:348 +#: src/Util/Temporal.php:352 #, php-format msgid "%1$d %2$s ago" msgstr "" -#: src/Worker/Delivery.php:570 +#: src/Worker/Delivery.php:525 msgid "(no subject)" msgstr "" +#: src/Worker/PushSubscription.php:103 +msgid "Notification from Friendica" +msgstr "" + +#: src/Worker/PushSubscription.php:104 +msgid "Empty Post" +msgstr "" + #: view/theme/duepuntozero/config.php:52 msgid "default" msgstr "" @@ -10793,14 +10854,6 @@ msgstr "" msgid "Leave background image and color empty for theme defaults" msgstr "" -#: view/theme/frio/php/default.php:81 view/theme/frio/php/standard.php:40 -msgid "Skip to main content" -msgstr "" - -#: view/theme/frio/php/default.php:152 view/theme/frio/php/standard.php:75 -msgid "Back to top" -msgstr "" - #: view/theme/frio/php/Image.php:40 msgid "Top Banner" msgstr "" @@ -10837,6 +10890,14 @@ msgstr "" msgid "Repeat image to fill the screen." msgstr "" +#: view/theme/frio/php/default.php:81 view/theme/frio/php/standard.php:40 +msgid "Skip to main content" +msgstr "" + +#: view/theme/frio/php/default.php:152 view/theme/frio/php/standard.php:75 +msgid "Back to top" +msgstr "" + #: view/theme/frio/theme.php:207 msgid "Guest" msgstr "" diff --git a/view/lang/en-us/strings.php b/view/lang/en-us/strings.php index 1983356fa..c82871c59 100644 --- a/view/lang/en-us/strings.php +++ b/view/lang/en-us/strings.php @@ -14,137 +14,7 @@ $a->strings['Weekly posting limit of %d post reached. The post was rejected.'] = 1 => 'Weekly posting limit of %d posts reached. This post was rejected.', ]; $a->strings['Monthly posting limit of %d post reached. The post was rejected.'] = 'Monthly posting limit of %d posts reached. This post was rejected.'; -$a->strings['Profile Photos'] = 'Profile photos'; -$a->strings['%1$s poked %2$s'] = '%1$s poked %2$s'; -$a->strings['event'] = 'event'; -$a->strings['status'] = 'status'; -$a->strings['photo'] = 'photo'; -$a->strings['%1$s tagged %2$s\'s %3$s with %4$s'] = '%1$s tagged %2$s\'s %3$s with %4$s'; -$a->strings['Select'] = 'Select'; -$a->strings['Delete'] = 'Delete'; -$a->strings['View %s\'s profile @ %s'] = 'View %s\'s profile @ %s'; -$a->strings['Categories:'] = 'Categories:'; -$a->strings['Filed under:'] = 'Filed under:'; -$a->strings['%s from %s'] = '%s from %s'; -$a->strings['View in context'] = 'View in context'; -$a->strings['Please wait'] = 'Please wait'; -$a->strings['remove'] = 'Remove'; -$a->strings['Delete Selected Items'] = 'Delete selected items'; -$a->strings['You had been addressed (%s).'] = 'You have been addressed (%s).'; -$a->strings['%s reshared this.'] = '%s reshared this.'; -$a->strings['Follow Thread'] = 'Follow thread'; -$a->strings['View Status'] = 'View status'; -$a->strings['View Profile'] = 'View profile'; -$a->strings['View Photos'] = 'View photos'; -$a->strings['Network Posts'] = 'Network posts'; -$a->strings['View Contact'] = 'View contact'; -$a->strings['Send PM'] = 'Send PM'; -$a->strings['Block'] = 'Block'; -$a->strings['Ignore'] = 'Ignore'; -$a->strings['Poke'] = 'Poke'; -$a->strings['Connect/Follow'] = 'Connect/Follow'; -$a->strings['%s likes this.'] = '%s likes this.'; -$a->strings['%s doesn\'t like this.'] = '%s doesn\'t like this.'; -$a->strings['%s attends.'] = '%s attends.'; -$a->strings['%s doesn\'t attend.'] = '%s won\'t attend.'; -$a->strings['%s attends maybe.'] = '%s might attend.'; -$a->strings['and'] = 'and'; -$a->strings['and %d other people'] = 'and %d other people'; -$a->strings['%2$d people like this'] = '%2$d people like this'; -$a->strings['%s like this.'] = '%s like this.'; -$a->strings['%2$d people don\'t like this'] = '%2$d people don\'t like this'; -$a->strings['%s don\'t like this.'] = '%s don\'t like this.'; -$a->strings['%2$d people attend'] = '%2$d people attend'; -$a->strings['%s attend.'] = '%s attend.'; -$a->strings['%2$d people don\'t attend'] = '%2$d people won\'t attend'; -$a->strings['%s don\'t attend.'] = '%s won\'t attend.'; -$a->strings['%2$d people attend maybe'] = '%2$d people might attend'; -$a->strings['%s attend maybe.'] = '%s may be attending.'; -$a->strings['%2$d people reshared this'] = '%2$d people reshared this'; -$a->strings['Visible to everybody'] = 'Visible to everybody'; -$a->strings['Please enter a image/video/audio/webpage URL:'] = 'Please enter an image/video/audio/webpage URL:'; -$a->strings['Tag term:'] = 'Tag term:'; -$a->strings['Save to Folder:'] = 'Save to folder:'; -$a->strings['Where are you right now?'] = 'Where are you right now?'; -$a->strings['Delete item(s)?'] = 'Delete item(s)?'; -$a->strings['New Post'] = 'New post'; -$a->strings['Share'] = 'Share'; -$a->strings['Upload photo'] = 'Upload photo'; -$a->strings['upload photo'] = 'upload photo'; -$a->strings['Attach file'] = 'Attach file'; -$a->strings['attach file'] = 'attach file'; -$a->strings['Bold'] = 'Bold'; -$a->strings['Italic'] = 'Italic'; -$a->strings['Underline'] = 'Underline'; -$a->strings['Quote'] = 'Quote'; -$a->strings['Code'] = 'Code'; -$a->strings['Image'] = 'Image'; -$a->strings['Link'] = 'Link'; -$a->strings['Link or Media'] = 'Link or media'; -$a->strings['Set your location'] = 'Set your location'; -$a->strings['set location'] = 'set location'; -$a->strings['Clear browser location'] = 'Clear browser location'; -$a->strings['clear location'] = 'clear location'; -$a->strings['Set title'] = 'Set title'; -$a->strings['Categories (comma-separated list)'] = 'Categories (comma-separated list)'; -$a->strings['Permission settings'] = 'Permission settings'; -$a->strings['Permissions'] = 'Permissions'; -$a->strings['Public post'] = 'Public post'; -$a->strings['Preview'] = 'Preview'; -$a->strings['Cancel'] = 'Cancel'; -$a->strings['Message'] = 'Message'; -$a->strings['Browser'] = 'Browser'; -$a->strings['Open Compose page'] = 'Open compose page'; -$a->strings['%1$s sent you a new private message at %2$s.'] = '%1$s sent you a new private message at %2$s.'; -$a->strings['a private message'] = 'a private message'; -$a->strings['%1$s sent you %2$s.'] = '%1$s sent you %2$s.'; -$a->strings['Please visit %s to view and/or reply to your private messages.'] = 'Please visit %s to view or reply to your private messages.'; -$a->strings['%1$s tagged you at %2$s'] = '%1$s tagged you at %2$s'; -$a->strings['%s commented on an item/conversation you have been following.'] = '%s commented on an item/conversation you have been following.'; -$a->strings['Please visit %s to view and/or reply to the conversation.'] = 'Please visit %s to view or reply to the conversation.'; -$a->strings['%1$s posted to your profile wall at %2$s'] = '%1$s posted to your profile wall at %2$s'; -$a->strings['%1$s posted to [url=%2$s]your wall[/url]'] = '%1$s posted to [url=%2$s]your wall[/url]'; -$a->strings['%1$s shared a new post at %2$s'] = '%1$s shared a new post at %2$s'; -$a->strings['%1$s [url=%2$s]shared a post[/url].'] = '%1$s [url=%2$s]shared a post[/url].'; -$a->strings['%1$s poked you at %2$s'] = '%1$s poked you at %2$s'; -$a->strings['%1$s [url=%2$s]poked you[/url].'] = '%1$s [url=%2$s]poked you[/url].'; -$a->strings['%1$s tagged your post at %2$s'] = '%1$s tagged your post at %2$s'; -$a->strings['%1$s tagged [url=%2$s]your post[/url]'] = '%1$s tagged [url=%2$s]your post[/url]'; -$a->strings['You\'ve received an introduction from \'%1$s\' at %2$s'] = 'You\'ve received an introduction from \'%1$s\' at %2$s'; -$a->strings['You\'ve received [url=%1$s]an introduction[/url] from %2$s.'] = 'You\'ve received [url=%1$s]an introduction[/url] from %2$s.'; -$a->strings['You may visit their profile at %s'] = 'You may visit their profile at %s'; -$a->strings['Please visit %s to approve or reject the introduction.'] = 'Please visit %s to approve or reject the introduction.'; -$a->strings['%1$s is sharing with you at %2$s'] = '%1$s is sharing with you at %2$s'; -$a->strings['You have a new follower at %2$s : %1$s'] = 'You have a new follower at %2$s : %1$s'; -$a->strings['You\'ve received a friend suggestion from \'%1$s\' at %2$s'] = 'You\'ve received a friend suggestion from \'%1$s\' at %2$s'; -$a->strings['You\'ve received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s.'] = 'You\'ve received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s.'; -$a->strings['Name:'] = 'Name:'; -$a->strings['Photo:'] = 'Photo:'; -$a->strings['Please visit %s to approve or reject the suggestion.'] = 'Please visit %s to approve or reject the suggestion.'; -$a->strings['\'%1$s\' has accepted your connection request at %2$s'] = '\'%1$s\' has accepted your connection request at %2$s'; -$a->strings['%2$s has accepted your [url=%1$s]connection request[/url].'] = '%2$s has accepted your [url=%1$s]connection request[/url].'; -$a->strings['You are now mutual friends and may exchange status updates, photos, and email without restriction.'] = 'You are now mutual friends and may exchange status updates, photos, and email without restriction.'; -$a->strings['Please visit %s if you wish to make any changes to this relationship.'] = 'Please visit %s if you wish to make any changes to this relationship.'; -$a->strings['\'%1$s\' has chosen to accept you a fan, which restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically.'] = '\'%1$s\' has chosen to accept you as a fan, which restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically.'; -$a->strings['\'%1$s\' may choose to extend this into a two-way or more permissive relationship in the future.'] = '\'%1$s\' may choose to extend this into a two-way or more permissive relationship in the future.'; -$a->strings['Please visit %s if you wish to make any changes to this relationship.'] = 'Please visit %s if you wish to make any changes to this relationship.'; -$a->strings['[Friendica System Notify]'] = '[Friendica System Notify]'; -$a->strings['registration request'] = 'registration request'; -$a->strings['You\'ve received a registration request from \'%1$s\' at %2$s'] = 'You\'ve received a registration request from \'%1$s\' at %2$s.'; -$a->strings['You\'ve received a [url=%1$s]registration request[/url] from %2$s.'] = 'You\'ve received a [url=%1$s]registration request[/url] from %2$s.'; -$a->strings['Full Name: %s -Site Location: %s -Login Name: %s (%s)'] = 'Full Name: %s -Site Location: %s -Login Name: %s (%s)'; -$a->strings['Please visit %s to approve or reject the request.'] = 'Please visit %s to approve or reject the request.'; $a->strings['Permission denied.'] = 'Permission denied.'; -$a->strings['Authorize application connection'] = 'Authorize application connection'; -$a->strings['Return to your app and insert this Securty Code:'] = 'Return to your app and insert this security code:'; -$a->strings['Please login to continue.'] = 'Please login to continue.'; -$a->strings['Do you want to authorize this application to access your posts and contacts, and/or create new posts for you?'] = 'Do you want to authorize this application to access your posts and contacts and create new posts for you?'; -$a->strings['Yes'] = 'Yes'; -$a->strings['No'] = 'No'; $a->strings['Access denied.'] = 'Access denied.'; $a->strings['User not found.'] = 'User not found.'; $a->strings['Access to this profile has been restricted.'] = 'Access to this profile has been restricted.'; @@ -161,73 +31,39 @@ $a->strings['User not found'] = 'User not found'; $a->strings['This calendar format is not supported'] = 'This calendar format is not supported'; $a->strings['No exportable data found'] = 'No exportable data found'; $a->strings['calendar'] = 'calendar'; -$a->strings['Profile not found.'] = 'Profile not found.'; -$a->strings['Contact not found.'] = 'Contact not found.'; -$a->strings['This may occasionally happen if contact was requested by both persons and it has already been approved.'] = 'This may occasionally happen if contact was requested by both persons and it has already been approved.'; -$a->strings['Response from remote site was not understood.'] = 'Response from remote site was not understood.'; -$a->strings['Unexpected response from remote site: '] = 'Unexpected response from remote site: '; -$a->strings['Confirmation completed successfully.'] = 'Confirmation completed successfully.'; -$a->strings['Temporary failure. Please wait and try again.'] = 'Temporary failure. Please wait and try again.'; -$a->strings['Introduction failed or was revoked.'] = 'Introduction failed or was revoked.'; -$a->strings['Remote site reported: '] = 'Remote site reported: '; -$a->strings['No user record found for \'%s\' '] = 'No user record found for \'%s\' '; -$a->strings['Our site encryption key is apparently messed up.'] = 'Our site encryption key is apparently messed up.'; -$a->strings['Empty site URL was provided or URL could not be decrypted by us.'] = 'An empty URL was provided, or the URL could not be decrypted by us.'; -$a->strings['Contact record was not found for you on our site.'] = 'Contact record was not found for you on our site.'; -$a->strings['Site public key not available in contact record for URL %s.'] = 'Site public key not available in contact record for URL %s.'; -$a->strings['The ID provided by your system is a duplicate on our system. It should work if you try again.'] = 'The ID provided by your system is a duplicate on our system. It should work if you try again.'; -$a->strings['Unable to set your contact credentials on our system.'] = 'Unable to set your contact credentials on our system.'; -$a->strings['Unable to update your contact profile details on our system'] = 'Unable to update your contact profile details on our system'; -$a->strings['%1$s welcomes %2$s'] = '%1$s welcomes %2$s'; -$a->strings['This introduction has already been accepted.'] = 'This introduction has already been accepted.'; -$a->strings['Profile location is not valid or does not contain profile information.'] = 'Profile location is not valid or does not contain profile information.'; -$a->strings['Warning: profile location has no identifiable owner name.'] = 'Warning: profile location has no identifiable owner name.'; -$a->strings['Warning: profile location has no profile photo.'] = 'Warning: profile location has no profile photo.'; -$a->strings['%d required parameter was not found at the given location'] = [ - 0 => '%d required parameter was not found at the given location', - 1 => '%d required parameters were not found at the given location', -]; -$a->strings['Introduction complete.'] = 'Introduction complete.'; -$a->strings['Unrecoverable protocol error.'] = 'Unrecoverable protocol error.'; -$a->strings['Profile unavailable.'] = 'Profile unavailable.'; -$a->strings['%s has received too many connection requests today.'] = '%s has received too many connection requests today.'; -$a->strings['Spam protection measures have been invoked.'] = 'Spam protection measures have been invoked.'; -$a->strings['Friends are advised to please try again in 24 hours.'] = 'Friends are advised to please try again in 24 hours.'; -$a->strings['Invalid locator'] = 'Invalid locator'; -$a->strings['You have already introduced yourself here.'] = 'You have already introduced yourself here.'; -$a->strings['Apparently you are already friends with %s.'] = 'Apparently you are already friends with %s.'; -$a->strings['Invalid profile URL.'] = 'Invalid profile URL.'; -$a->strings['Disallowed profile URL.'] = 'Disallowed profile URL.'; -$a->strings['Blocked domain'] = 'Blocked domain'; -$a->strings['Failed to update contact record.'] = 'Failed to update contact record.'; -$a->strings['Your introduction has been sent.'] = 'Your introduction has been sent.'; -$a->strings['Remote subscription can\'t be done for your network. Please subscribe directly on your system.'] = 'Remote subscription can\'t be done for your network. Please subscribe directly on your system.'; -$a->strings['Please login to confirm introduction.'] = 'Please login to confirm introduction.'; -$a->strings['Incorrect identity currently logged in. Please login to this profile.'] = 'Incorrect identity currently logged in. Please login to this profile.'; -$a->strings['Confirm'] = 'Confirm'; -$a->strings['Hide this contact'] = 'Hide this contact'; -$a->strings['Welcome home %s.'] = 'Welcome home %s.'; -$a->strings['Please confirm your introduction/connection request to %s.'] = 'Please confirm your introduction/connection request to %s.'; $a->strings['Public access denied.'] = 'Public access denied.'; -$a->strings['Friend/Connection Request'] = 'Friend/Connection request'; -$a->strings['Enter your Webfinger address (user@domain.tld) or profile URL here. If this isn\'t supported by your system (for example it doesn\'t work with Diaspora), you have to subscribe to %s directly on your system'] = 'Enter your WebFinger address (user@domain.tld) or profile URL here. If this isn\'t supported by your system (for example it doesn\'t work with Diaspora), you have to subscribe to %s directly on your system'; -$a->strings['Your Webfinger address or profile URL:'] = 'Your WebFinger address or profile URL:'; -$a->strings['Please answer the following:'] = 'Please answer the following:'; -$a->strings['Submit Request'] = 'Submit request'; -$a->strings['Add a personal note:'] = 'Add a personal note:'; $a->strings['The requested item doesn\'t exist or has been deleted.'] = 'The requested item doesn\'t exist or has been deleted.'; $a->strings['The feed for this item is unavailable.'] = 'The feed for this item is unavailable.'; $a->strings['Item not found'] = 'Item not found'; $a->strings['Edit post'] = 'Edit post'; $a->strings['Save'] = 'Save'; +$a->strings['Upload photo'] = 'Upload photo'; +$a->strings['upload photo'] = 'upload photo'; +$a->strings['Attach file'] = 'Attach file'; +$a->strings['attach file'] = 'attach file'; $a->strings['Insert web link'] = 'Insert web link'; $a->strings['web link'] = 'web link'; $a->strings['Insert video link'] = 'Insert video link'; $a->strings['video link'] = 'video link'; $a->strings['Insert audio link'] = 'Insert audio link'; $a->strings['audio link'] = 'audio link'; +$a->strings['Set your location'] = 'Set your location'; +$a->strings['set location'] = 'set location'; +$a->strings['Clear browser location'] = 'Clear browser location'; +$a->strings['clear location'] = 'clear location'; +$a->strings['Please wait'] = 'Please wait'; +$a->strings['Permission settings'] = 'Permission settings'; $a->strings['CC: email addresses'] = 'CC: email addresses'; +$a->strings['Public post'] = 'Public post'; +$a->strings['Set title'] = 'Set title'; +$a->strings['Categories (comma-separated list)'] = 'Categories (comma-separated list)'; $a->strings['Example: bob@example.com, mary@example.com'] = 'Example: bob@example.com, mary@example.com'; +$a->strings['Preview'] = 'Preview'; +$a->strings['Cancel'] = 'Cancel'; +$a->strings['Message'] = 'Message'; +$a->strings['Browser'] = 'Browser'; +$a->strings['Permissions'] = 'Permissions'; +$a->strings['Open Compose page'] = 'Open compose page'; $a->strings['Event can not end before it has started.'] = 'Event cannot end before it has started.'; $a->strings['Event title and start time are required.'] = 'Event title and starting time are required.'; $a->strings['Create New Event'] = 'Create new event'; @@ -237,7 +73,6 @@ $a->strings['Event Starts:'] = 'Event starts:'; $a->strings['Required'] = 'Required'; $a->strings['Finish date/time is not known or not relevant'] = 'Finish date/time is not known or not relevant'; $a->strings['Event Finishes:'] = 'Event finishes:'; -$a->strings['Adjust for viewer timezone'] = 'Adjust for viewer\'s time zone'; $a->strings['Description:'] = 'Description:'; $a->strings['Location:'] = 'Location:'; $a->strings['Title:'] = 'Title:'; @@ -249,13 +84,17 @@ $a->strings['Failed to remove event'] = 'Failed to remove event'; $a->strings['Photos'] = 'Photos'; $a->strings['Upload'] = 'Upload'; $a->strings['Files'] = 'Files'; +$a->strings['Submit Request'] = 'Submit request'; $a->strings['You already added this contact.'] = 'You already added this contact.'; $a->strings['The network type couldn\'t be detected. Contact can\'t be added.'] = 'The network type couldn\'t be detected. Contact can\'t be added.'; $a->strings['Diaspora support isn\'t enabled. Contact can\'t be added.'] = 'diaspora* support isn\'t enabled. Contact can\'t be added.'; $a->strings['OStatus support is disabled. Contact can\'t be added.'] = 'OStatus support is disabled. Contact can\'t be added.'; +$a->strings['Connect/Follow'] = 'Connect/Follow'; +$a->strings['Please answer the following:'] = 'Please answer the following:'; $a->strings['Your Identity Address:'] = 'My identity address:'; $a->strings['Profile URL'] = 'Profile URL:'; $a->strings['Tags:'] = 'Tags:'; +$a->strings['Add a personal note:'] = 'Add a personal note:'; $a->strings['Status Messages and Posts'] = 'Status Messages and Posts'; $a->strings['The contact could not be added.'] = 'Contact could not be added.'; $a->strings['Unable to locate original post.'] = 'Unable to locate original post.'; @@ -349,8 +188,6 @@ $a->strings[' You may change that password from your account settings page after logging in. '; $a->strings['Your password has been changed at %s'] = 'Your password has been changed at %s'; -$a->strings['first'] = 'first'; -$a->strings['next'] = 'next'; $a->strings['No matches'] = 'No matches'; $a->strings['Profile Match'] = 'Profile Match'; $a->strings['New Message'] = 'New Message'; @@ -381,8 +218,7 @@ $a->strings['%d message'] = [ 1 => '%d messages', ]; $a->strings['Personal Notes'] = 'Personal notes'; -$a->strings['Personal notes are visible only by yourself.'] = 'Personal notes are only visible to yourself.'; -$a->strings['Subscribing to OStatus contacts'] = 'Subscribing to OStatus contacts'; +$a->strings['Personal notes are visible only by yourself.'] = 'Personal notes are only visible to you.'; $a->strings['No contact provided.'] = 'No contact provided.'; $a->strings['Couldn\'t fetch information for contact.'] = 'Couldn\'t fetch information for contact.'; $a->strings['Couldn\'t fetch friends for contact.'] = 'Couldn\'t fetch friends for contact.'; @@ -442,6 +278,9 @@ $a->strings['Rotate CW (right)'] = 'Rotate right (CW)'; $a->strings['Rotate CCW (left)'] = 'Rotate left (CCW)'; $a->strings['This is you'] = 'This is me'; $a->strings['Comment'] = 'Comment'; +$a->strings['Select'] = 'Select'; +$a->strings['Delete'] = 'Delete'; +$a->strings['Like'] = 'Like'; $a->strings['I like this (toggle)'] = 'I like this (toggle)'; $a->strings['I don\'t like this (toggle)'] = 'I don\'t like this (toggle)'; $a->strings['Map'] = 'Map'; @@ -449,6 +288,8 @@ $a->strings['View Album'] = 'View album'; $a->strings['{0} wants to be your friend'] = '{0} wants to be your friend'; $a->strings['{0} requested registration'] = '{0} requested registration'; $a->strings['Bad Request.'] = 'Bad request.'; +$a->strings['Contact not found.'] = 'Contact not found.'; +$a->strings['[Friendica System Notify]'] = '[Friendica System Notify]'; $a->strings['User deleted their account'] = 'User deleted their account'; $a->strings['On your Friendica node an user deleted their account. Please ensure that their data is removed from the backups.'] = 'A user deleted his or her account on your Friendica node. Please ensure these data are removed from the backups.'; $a->strings['The user id is %d'] = 'The user id is %d'; @@ -460,8 +301,6 @@ $a->strings['Error'] = [ 0 => 'Error', 1 => 'Errors', ]; -$a->strings['Missing some important data!'] = 'Missing some important data!'; -$a->strings['Update'] = 'Update'; $a->strings['Failed to connect with email account using the settings provided.'] = 'Failed to connect with email account using the settings provided.'; $a->strings['Contact CSV file upload error'] = 'Contact CSV file upload error'; $a->strings['Importing Contacts done'] = 'Importing contacts done'; @@ -475,22 +314,15 @@ $a->strings['Invalid email.'] = 'Invalid email.'; $a->strings['Cannot change to that email.'] = 'Cannot change to that email.'; $a->strings['Private forum has no privacy permissions. Using default privacy group.'] = 'Private forum has no privacy permissions. Using default privacy group.'; $a->strings['Private forum has no privacy permissions and no default privacy group.'] = 'Private forum has no privacy permissions and no default privacy group.'; -$a->strings['Add application'] = 'Add application'; -$a->strings['Save Settings'] = 'Save settings'; -$a->strings['Name'] = 'Name:'; -$a->strings['Consumer Key'] = 'Consumer key'; -$a->strings['Consumer Secret'] = 'Consumer secret'; -$a->strings['Redirect'] = 'Redirect'; -$a->strings['Icon url'] = 'Icon URL'; -$a->strings['You can\'t edit this application.'] = 'You cannot edit this application.'; $a->strings['Connected Apps'] = 'Connected Apps'; -$a->strings['Edit'] = 'Edit'; -$a->strings['Client key starts with'] = 'Client key starts with'; -$a->strings['No name'] = 'No name'; +$a->strings['Name'] = 'Name:'; +$a->strings['Home Page'] = 'Home page'; +$a->strings['Created'] = 'Created'; $a->strings['Remove authorization'] = 'Remove authorization'; -$a->strings['No Addon settings configured'] = 'No addon settings configured'; $a->strings['Addon Settings'] = 'Addon Settings'; +$a->strings['No Addon settings configured'] = 'No addon settings configured'; $a->strings['Additional Features'] = 'Additional Features'; +$a->strings['Save Settings'] = 'Save settings'; $a->strings['Diaspora (Socialhome, Hubzilla)'] = 'diaspora* (Socialhome, Hubzilla)'; $a->strings['enabled'] = 'enabled'; $a->strings['disabled'] = 'disabled'; @@ -501,17 +333,8 @@ $a->strings['Social Networks'] = 'Social networks'; $a->strings['General Social Media Settings'] = 'General Social Media Settings'; $a->strings['Accept only top level posts by contacts you follow'] = 'Accept only top-level posts by contacts you follow'; $a->strings['The system does an auto completion of threads when a comment arrives. This has got the side effect that you can receive posts that had been started by a non-follower but had been commented by someone you follow. This setting deactivates this behaviour. When activated, you strictly only will receive posts from people you really do follow.'] = 'The system automatically completes threads when a comment arrives. This has a side effect that you may receive posts started by someone you don\'t follow, because one of your followers commented there. This setting will deactivate this behavior. If activated, you will only receive posts from people you really do follow.'; -$a->strings['Disable Content Warning'] = 'Disable content warning'; -$a->strings['Users on networks like Mastodon or Pleroma are able to set a content warning field which collapse their post by default. This disables the automatic collapsing and sets the content warning as the post title. Doesn\'t affect any other content filtering you eventually set up.'] = 'Users on networks like Mastodon or Pleroma are able to set a content warning field which collapses their post by default. This disables the automatic collapsing and sets the content warning as the post title. It doesn\'t affect any other content filtering you may set up.'; -$a->strings['Disable intelligent shortening'] = 'Disable intelligent shortening'; -$a->strings['Normally the system tries to find the best link to add to shortened posts. If this option is enabled then every shortened post will always point to the original friendica post.'] = 'Normally the system tries to find the best link to add to shortened posts. If this option is enabled then every shortened post will always point to the original Friendica post.'; $a->strings['Attach the link title'] = 'Attach the link title'; $a->strings['When activated, the title of the attached link will be added as a title on posts to Diaspora. This is mostly helpful with "remote-self" contacts that share feed content.'] = 'If activated, the title of the attached link will be added as a title on posts to Diaspora. This is mostly helpful with "remote-self" contacts that share feed content.'; -$a->strings['Automatically follow any GNU Social (OStatus) followers/mentioners'] = 'Automatically follow any GNU Social (OStatus) followers/mentioners'; -$a->strings['If you receive a message from an unknown OStatus user, this option decides what to do. If it is checked, a new contact will be created for every unknown user.'] = 'Create a new contact for every unknown OStatus user from whom you receive a message.'; -$a->strings['Default group for OStatus contacts'] = 'Default group for OStatus contacts'; -$a->strings['Your legacy GNU Social account'] = 'Your legacy GNU Social account'; -$a->strings['If you enter your old GNU Social/Statusnet account name here (in the format user@domain.tld), your contacts will be added automatically. The field will be emptied when done.'] = 'Entering your old GNU Social/Statusnet account name here (format: user@domain.tld), will automatically added your contacts. The field will be emptied when done.'; $a->strings['Repair OStatus subscriptions'] = 'Repair OStatus subscriptions'; $a->strings['Email/Mailbox Setup'] = 'Email/Mailbox setup'; $a->strings['If you wish to communicate with email contacts using this service (optional), please specify how to connect to your mailbox.'] = 'Specify how to connect to your mailbox, if you wish to communicate with existing email contacts.'; @@ -588,6 +411,7 @@ $a->strings['Default Post Permissions'] = 'Default post permissions'; $a->strings['Automatically expire posts after this many days:'] = 'Automatically expire posts after this many days:'; $a->strings['If empty, posts will not expire. Expired posts will be deleted'] = 'Posts will not expire if empty; expired posts will be deleted'; $a->strings['When activated, posts and comments will be expired.'] = 'If activated, posts and comments will expire.'; +$a->strings['Expire personal notes'] = 'Expire personal notes'; $a->strings['When activated, the personal notes on your profile page will be expired.'] = 'If activated, the personal notes on your profile page will expire.'; $a->strings['When activated, photos will be expired.'] = 'If activated, photos will expire.'; $a->strings['When activated, your own posts never expire. Then the settings above are only valid for posts you received.'] = 'If activated, your own posts never expire. The settings above are only valid for posts you received.'; @@ -617,6 +441,9 @@ $a->strings['If you have moved this profile from another server, and some of you $a->strings['Resend relocate message to contacts'] = 'Resend relocation message to contacts'; $a->strings['No suggestions available. If this is a new site, please try again in 24 hours.'] = 'No suggestions available. If this is a new site, please try again in 24 hours.'; $a->strings['Friend Suggestions'] = 'Friend suggestions'; +$a->strings['photo'] = 'photo'; +$a->strings['status'] = 'status'; +$a->strings['%1$s tagged %2$s\'s %3$s with %4$s'] = '%1$s tagged %2$s\'s %3$s with %4$s'; $a->strings['Remove Item Tag'] = 'Remove Item tag'; $a->strings['Select a tag to remove: '] = 'Select a tag to remove: '; $a->strings['Remove'] = 'Remove'; @@ -632,24 +459,20 @@ $a->strings['To export your account, go to "Settings->Export your personal data" $a->strings['You aren\'t following this contact.'] = 'You aren\'t following this contact.'; $a->strings['Unfollowing is currently not supported by your network.'] = 'Unfollowing is currently not supported by your network.'; $a->strings['Disconnect/Unfollow'] = 'Disconnect/Unfollow'; -$a->strings['No videos selected'] = 'No videos selected'; -$a->strings['View Video'] = 'View video'; -$a->strings['Recent Videos'] = 'Recent videos'; -$a->strings['Upload New Videos'] = 'Upload new videos'; $a->strings['Invalid request.'] = 'Invalid request.'; $a->strings['Sorry, maybe your upload is bigger than the PHP configuration allows'] = 'Sorry, maybe your upload is bigger than the PHP configuration allows'; $a->strings['Or - did you try to upload an empty file?'] = 'Or did you try to upload an empty file?'; $a->strings['File exceeds size limit of %s'] = 'File exceeds size limit of %s'; $a->strings['File upload failed.'] = 'File upload failed.'; +$a->strings['Wall Photos'] = 'Wall photos'; $a->strings['Number of daily wall messages for %s exceeded. Message failed.'] = 'Number of daily wall messages for %s exceeded. Message failed.'; $a->strings['Unable to check your home location.'] = 'Unable to check your home location.'; $a->strings['No recipient.'] = 'No recipient.'; $a->strings['If you wish for %s to respond, please check that the privacy settings on your site allow private mail from unknown senders.'] = 'If you wish for %s to respond, please check that the privacy settings on your site allow private mail from unknown senders.'; -$a->strings['Wall Photos'] = 'Wall photos'; +$a->strings['No system theme config value set.'] = 'No system theme configuration value set.'; $a->strings['You must be logged in to use addons. '] = 'You must be logged in to use addons. '; $a->strings['Delete this item?'] = 'Delete this item?'; $a->strings['toggle mobile'] = 'Toggle mobile'; -$a->strings['No system theme config value set.'] = 'No system theme configuration value set.'; $a->strings['Method not allowed for this module. Allowed method(s): %s'] = 'Method not allowed for this module. Allowed method(s): %s'; $a->strings['Page not found.'] = 'Page not found'; $a->strings['The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it.'] = 'The form security token was incorrect. This probably happened because the form has not been submitted within 3 hours.'; @@ -692,6 +515,49 @@ $a->strings['Diaspora Connector'] = 'diaspora* connector'; $a->strings['GNU Social Connector'] = 'GNU Social Connector'; $a->strings['ActivityPub'] = 'ActivityPub'; $a->strings['pnut'] = 'pnut'; +$a->strings['%s likes this.'] = '%s likes this.'; +$a->strings['%s doesn\'t like this.'] = '%s doesn\'t like this.'; +$a->strings['%s attends.'] = '%s attends.'; +$a->strings['%s doesn\'t attend.'] = '%s won\'t attend.'; +$a->strings['%s attends maybe.'] = '%s might attend.'; +$a->strings['%s reshared this.'] = '%s reshared this.'; +$a->strings['and'] = 'and'; +$a->strings['and %d other people'] = 'and %d other people'; +$a->strings['%2$d people like this'] = '%2$d people like this'; +$a->strings['%s like this.'] = '%s like this.'; +$a->strings['%2$d people don\'t like this'] = '%2$d people don\'t like this'; +$a->strings['%s don\'t like this.'] = '%s don\'t like this.'; +$a->strings['%2$d people attend'] = '%2$d people attend'; +$a->strings['%s attend.'] = '%s attend.'; +$a->strings['%2$d people don\'t attend'] = '%2$d people won\'t attend'; +$a->strings['%s don\'t attend.'] = '%s won\'t attend.'; +$a->strings['%2$d people attend maybe'] = '%2$d people might attend'; +$a->strings['%s attend maybe.'] = '%s may be attending.'; +$a->strings['%2$d people reshared this'] = '%2$d people reshared this'; +$a->strings['Visible to everybody'] = 'Visible to everybody'; +$a->strings['Please enter a image/video/audio/webpage URL:'] = 'Please enter an image/video/audio/webpage URL:'; +$a->strings['Tag term:'] = 'Tag term:'; +$a->strings['Save to Folder:'] = 'Save to folder:'; +$a->strings['Where are you right now?'] = 'Where are you right now?'; +$a->strings['Delete item(s)?'] = 'Delete item(s)?'; +$a->strings['New Post'] = 'New post'; +$a->strings['Share'] = 'Share'; +$a->strings['Bold'] = 'Bold'; +$a->strings['Italic'] = 'Italic'; +$a->strings['Underline'] = 'Underline'; +$a->strings['Quote'] = 'Quote'; +$a->strings['Code'] = 'Code'; +$a->strings['Image'] = 'Image'; +$a->strings['Link'] = 'Link'; +$a->strings['Link or Media'] = 'Link or media'; +$a->strings['View %s\'s profile @ %s'] = 'View %s\'s profile @ %s'; +$a->strings['Categories:'] = 'Categories:'; +$a->strings['Filed under:'] = 'Filed under:'; +$a->strings['%s from %s'] = '%s from %s'; +$a->strings['View in context'] = 'View in context'; +$a->strings['remove'] = 'Remove'; +$a->strings['Delete Selected Items'] = 'Delete selected items'; +$a->strings['You had been addressed (%s).'] = 'You have been addressed (%s).'; $a->strings['General Features'] = 'General'; $a->strings['Photo Location'] = 'Photo location'; $a->strings['Photo metadata is normally stripped. This extracts the location (if present) prior to stripping metadata and links it to a map.'] = 'Photo metadata is normally removed. This saves the geo tag (if present) and links it to a map prior to removing other metadata.'; @@ -715,6 +581,18 @@ $a->strings['Display membership date in profile'] = 'Display membership date in $a->strings['Forums'] = 'Forums'; $a->strings['External link to forum'] = 'External link to forum'; $a->strings['show more'] = 'show more'; +$a->strings['%1$s poked %2$s'] = '%1$s poked %2$s'; +$a->strings['event'] = 'event'; +$a->strings['Follow Thread'] = 'Follow thread'; +$a->strings['View Status'] = 'View status'; +$a->strings['View Profile'] = 'View profile'; +$a->strings['View Photos'] = 'View photos'; +$a->strings['Network Posts'] = 'Network posts'; +$a->strings['View Contact'] = 'View contact'; +$a->strings['Send PM'] = 'Send PM'; +$a->strings['Block'] = 'Block'; +$a->strings['Ignore'] = 'Ignore'; +$a->strings['Poke'] = 'Poke'; $a->strings['Nothing new here'] = 'Nothing new here'; $a->strings['Go back'] = 'Go back'; $a->strings['Clear notifications'] = 'Clear notifications'; @@ -728,13 +606,10 @@ $a->strings['Your posts and conversations'] = 'My posts and conversations'; $a->strings['Profile'] = 'Profile'; $a->strings['Your profile page'] = 'My profile page'; $a->strings['Your photos'] = 'My photos'; -$a->strings['Videos'] = 'Videos'; -$a->strings['Your videos'] = 'My videos'; $a->strings['Your events'] = 'My events'; $a->strings['Personal notes'] = 'Personal notes'; $a->strings['Your personal notes'] = 'My personal notes'; $a->strings['Home'] = 'Home'; -$a->strings['Home Page'] = 'Home page'; $a->strings['Register'] = 'Sign up now >>'; $a->strings['Create an account'] = 'Create account'; $a->strings['Help'] = 'Help'; @@ -775,10 +650,11 @@ $a->strings['Navigation'] = 'Navigation'; $a->strings['Site map'] = 'Site map'; $a->strings['Embedding disabled'] = 'Embedding disabled'; $a->strings['Embedded content'] = 'Embedded content'; +$a->strings['first'] = 'first'; $a->strings['prev'] = 'prev'; +$a->strings['next'] = 'next'; $a->strings['last'] = 'last'; $a->strings['Image/photo'] = 'Image/Photo'; -$a->strings['link to source'] = 'Link to source'; $a->strings['Click to open/close'] = 'Reveal/hide'; $a->strings['$1 wrote:'] = '$1 wrote:'; $a->strings['Encrypted content'] = 'Encrypted content'; @@ -787,15 +663,6 @@ $a->strings['Invalid link protocol'] = 'Invalid link protocol'; $a->strings['Loading more entries...'] = 'Loading more entries...'; $a->strings['The end'] = 'The end'; $a->strings['Follow'] = 'Follow'; -$a->strings['Export'] = 'Export'; -$a->strings['Export calendar as ical'] = 'Export calendar as ical'; -$a->strings['Export calendar as csv'] = 'Export calendar as csv'; -$a->strings['No contacts'] = 'No contacts'; -$a->strings['%d Contact'] = [ - 0 => '%d contact', - 1 => '%d contacts', -]; -$a->strings['View Contacts'] = 'View contacts'; $a->strings['Add New Contact'] = 'Add new contact'; $a->strings['Enter address or web location'] = 'Enter address or web location'; $a->strings['Example: bob@example.com, http://example.com/barbara'] = 'Example: jo@example.com, http://example.com/jo'; @@ -828,6 +695,15 @@ $a->strings['%d contact in common'] = [ $a->strings['Archives'] = 'Archives'; $a->strings['Organisations'] = 'Organizations'; $a->strings['News'] = 'News'; +$a->strings['Export'] = 'Export'; +$a->strings['Export calendar as ical'] = 'Export calendar as ical'; +$a->strings['Export calendar as csv'] = 'Export calendar as csv'; +$a->strings['No contacts'] = 'No contacts'; +$a->strings['%d Contact'] = [ + 0 => '%d contact', + 1 => '%d contacts', +]; +$a->strings['View Contacts'] = 'View contacts'; $a->strings['Remove term'] = 'Remove term'; $a->strings['Saved Searches'] = 'Saved searches'; $a->strings['Trending Tags (last %d hour)'] = [ @@ -835,6 +711,9 @@ $a->strings['Trending Tags (last %d hour)'] = [ 1 => 'Trending tags (last %d hours)', ]; $a->strings['More Trending Tags'] = 'More trending tags'; +$a->strings['XMPP:'] = 'XMPP:'; +$a->strings['Network:'] = 'Network:'; +$a->strings['Unfollow'] = 'Unfollow'; $a->strings['Mutuals'] = 'Mutuals'; $a->strings['Post to Email'] = 'Post to email'; $a->strings['Public'] = 'Public'; @@ -894,6 +773,7 @@ $a->strings['view/smarty3 is writable'] = 'view/smarty3 is writable'; $a->strings['Url rewrite in .htaccess seems not working. Make sure you copied .htaccess-dist to .htaccess.'] = 'Url rewrite in .htaccess does not seem to work. Make sure you copied .htaccess-dist to .htaccess.'; $a->strings['Error message from Curl when fetching'] = 'Error message from Curl while fetching'; $a->strings['Url rewrite is working'] = 'URL rewrite is working'; +$a->strings['The detection of TLS to secure the communication between the browser and the new Friendica server failed.'] = 'Failed to detect TLS that secures the communication between the browser and the new Friendica server.'; $a->strings['ImageMagick PHP extension is not installed'] = 'ImageMagick PHP extension is not installed'; $a->strings['ImageMagick PHP extension is installed'] = 'ImageMagick PHP extension is installed'; $a->strings['ImageMagick supports GIF'] = 'ImageMagick supports GIF'; @@ -983,27 +863,19 @@ Error %d occurred during database update: $a->strings['Errors encountered performing database changes: '] = 'Errors encountered performing database changes: '; $a->strings['%s: Database update'] = '%s: Database update'; $a->strings['%s: updating %s table.'] = '%s: updating %s table.'; -$a->strings['Friend Suggestion'] = 'Friend suggestion'; -$a->strings['Friend/Connect Request'] = 'Friend/Contact request'; -$a->strings['New Follower'] = 'New follower'; -$a->strings['%s created a new post'] = '%s posted something new'; -$a->strings['%s commented on %s\'s post'] = '%s commented on %s\'s post'; -$a->strings['%s liked %s\'s post'] = '%s liked %s\'s post'; -$a->strings['%s disliked %s\'s post'] = '%s disliked %s\'s post'; -$a->strings['%s is attending %s\'s event'] = '%s is going to %s\'s event'; -$a->strings['%s is not attending %s\'s event'] = '%s is not going to %s\'s event'; -$a->strings['%s is now friends with %s'] = '%s is now friends with %s'; +$a->strings['Unauthorized'] = 'Unauthorized'; +$a->strings['Internal Server Error'] = 'Internal Server Error'; $a->strings['Legacy module file not found: %s'] = 'Legacy module file not found: %s'; $a->strings['UnFollow'] = 'Unfollow'; -$a->strings['Drop Contact'] = 'Drop contact'; $a->strings['Approve'] = 'Approve'; $a->strings['Organisation'] = 'Organization'; $a->strings['Forum'] = 'Forum'; +$a->strings['Disallowed profile URL.'] = 'Disallowed profile URL.'; +$a->strings['Blocked domain'] = 'Blocked domain'; $a->strings['Connect URL missing.'] = 'Connect URL missing.'; $a->strings['The contact could not be added. Please check the relevant network credentials in your Settings -> Social Networks page.'] = 'The contact could not be added. Please check the relevant network credentials in your Settings -> Social Networks page.'; -$a->strings['This site is not configured to allow communications with other networks.'] = 'This site is not configured to allow communications with other networks.'; -$a->strings['No compatible communication protocols or feeds were discovered.'] = 'No compatible communication protocols or feeds were discovered.'; $a->strings['The profile address specified does not provide adequate information.'] = 'The profile address specified does not provide adequate information.'; +$a->strings['No compatible communication protocols or feeds were discovered.'] = 'No compatible communication protocols or feeds were discovered.'; $a->strings['An author or name was not found.'] = 'An author or name was not found.'; $a->strings['No browser URL could be matched to this address.'] = 'No browser URL could be matched to this address.'; $a->strings['Unable to match @-style Identity Address with a known protocol or email contact.'] = 'Unable to match @-style identity address with a known protocol or email contact.'; @@ -1011,7 +883,6 @@ $a->strings['Use mailto: in front of address to force email check.'] = 'Use mail $a->strings['The profile address specified belongs to a network which has been disabled on this site.'] = 'The profile address specified belongs to a network which has been disabled on this site.'; $a->strings['Limited profile. This person will be unable to receive direct/personal notifications from you.'] = 'Limited profile: This person will be unable to receive direct/private messages from you.'; $a->strings['Unable to retrieve contact information.'] = 'Unable to retrieve contact information.'; -$a->strings['l F d, Y \@ g:i A'] = 'l F d, Y \@ g:i A'; $a->strings['Starts:'] = 'Starts:'; $a->strings['Finishes:'] = 'Finishes:'; $a->strings['all-day'] = 'All-day'; @@ -1021,6 +892,7 @@ $a->strings['l, F j'] = 'l, F j'; $a->strings['Edit event'] = 'Edit event'; $a->strings['Duplicate event'] = 'Duplicate event'; $a->strings['Delete event'] = 'Delete event'; +$a->strings['l F d, Y \@ g:i A'] = 'l F d, Y \@ g:i A'; $a->strings['D g:i A'] = 'D g:i A'; $a->strings['g:i A'] = 'g:i A'; $a->strings['Show map'] = 'Show map'; @@ -1038,24 +910,16 @@ $a->strings['Create a new group'] = 'Create new group'; $a->strings['Group Name: '] = 'Group name: '; $a->strings['Edit groups'] = 'Edit groups'; $a->strings['activity'] = 'activity'; -$a->strings['comment'] = [ - 0 => 'comment', - 1 => 'comments', -]; $a->strings['post'] = 'post'; $a->strings['Content warning: %s'] = 'Content warning: %s'; $a->strings['bytes'] = 'bytes'; $a->strings['View on separate page'] = 'View on separate page'; -$a->strings['view on separate page'] = 'view on separate page'; $a->strings['[no subject]'] = '[no subject]'; $a->strings['Edit profile'] = 'Edit profile'; $a->strings['Change profile photo'] = 'Change profile photo'; $a->strings['Homepage:'] = 'Homepage:'; $a->strings['About:'] = 'About:'; -$a->strings['XMPP:'] = 'XMPP:'; -$a->strings['Unfollow'] = 'Unfollow'; $a->strings['Atom feed'] = 'Atom feed'; -$a->strings['Network:'] = 'Network:'; $a->strings['g A l F d'] = 'g A l F d'; $a->strings['F d'] = 'F d'; $a->strings['[today]'] = '[today]'; @@ -1065,10 +929,23 @@ $a->strings['[No description]'] = '[No description]'; $a->strings['Event Reminders'] = 'Event reminders'; $a->strings['Upcoming events the next 7 days:'] = 'Upcoming events the next 7 days:'; $a->strings['OpenWebAuth: %1$s welcomes %2$s'] = 'OpenWebAuth: %1$s welcomes %2$s'; -$a->strings['Database storage failed to update %s'] = 'Database storage failed to update %s'; -$a->strings['Database storage failed to insert data'] = 'Database storage failed to insert data'; -$a->strings['Filesystem storage failed to create "%s". Check you write permissions.'] = 'Filesystem storage failed to create "%s". Check you write permissions.'; -$a->strings['Filesystem storage failed to save data to "%s". Check your write permissions'] = 'Filesystem storage failed to save data to "%s". Check your write permissions'; +$a->strings['Hometown:'] = 'Home town:'; +$a->strings['Sexual Preference:'] = 'Sexual preference:'; +$a->strings['Political Views:'] = 'Political views:'; +$a->strings['Religious Views:'] = 'Religious views:'; +$a->strings['Likes:'] = 'Likes:'; +$a->strings['Dislikes:'] = 'Dislikes:'; +$a->strings['Title/Description:'] = 'Title/Description:'; +$a->strings['Summary'] = 'Summary'; +$a->strings['Musical interests'] = 'Music:'; +$a->strings['Books, literature'] = 'Books, literature, poetry:'; +$a->strings['Television'] = 'Television:'; +$a->strings['Film/dance/culture/entertainment'] = 'Film, dance, culture, entertainment'; +$a->strings['Hobbies/Interests'] = 'Hobbies/Interests:'; +$a->strings['Love/romance'] = 'Love/Romance:'; +$a->strings['Work/employment'] = 'Work/Employment:'; +$a->strings['School/education'] = 'School/Education:'; +$a->strings['Contact information and Social Networks'] = 'Contact information and other social networks:'; $a->strings['Storage base path'] = 'Storage base path'; $a->strings['Folder where uploaded files are saved. For maximum security, This should be a path outside web server folder tree'] = 'Folder where uploaded files are saved. For maximum security, this should be a path outside web server folder tree'; $a->strings['Enter a valid existing folder'] = 'Enter a valid existing folder'; @@ -1107,6 +984,7 @@ $a->strings['An error occurred creating your default profile. Please try again.' $a->strings['An error occurred creating your self contact. Please try again.'] = 'An error occurred creating your self contact. Please try again.'; $a->strings['Friends'] = 'Friends'; $a->strings['An error occurred creating your default contact group. Please try again.'] = 'An error occurred while creating your default contact group. Please try again.'; +$a->strings['Profile Photos'] = 'Profile photos'; $a->strings['Registration details for %s'] = 'Registration details for %s'; $a->strings[' Dear %1$s, @@ -1295,19 +1173,16 @@ $a->strings['Must be writable by web server. Relative to your Friendica top-leve $a->strings['Log level'] = 'Log level'; $a->strings['PHP logging'] = 'PHP logging'; $a->strings['To temporarily enable logging of PHP errors and warnings you can prepend the following to the index.php file of your installation. The filename set in the \'error_log\' line is relative to the friendica top-level directory and must be writeable by the web server. The option \'1\' for \'log_errors\' and \'display_errors\' is to enable these options, set to \'0\' to disable them.'] = 'To temporarily enable logging of PHP errors and warnings you can prepend the following to the index.php file of your installation. The filename set in the \'error_log\' line is relative to the friendica top-level directory and must be writeable by the web server. The option \'1\' for \'log_errors\' and \'display_errors\' is to enable these options, set to \'0\' to disable them.'; -$a->strings['Error trying to open %1$s log file.\r\n
Check to see if file %1$s exist and is readable.'] = 'Error trying to open %1$s log file.\r\n
Check to see if file %1$s exist and is readable.'; -$a->strings['Couldn\'t open %1$s log file.\r\n
Check to see if file %1$s is readable.'] = 'Couldn\'t open %1$s log file.\r\n
Check if file %1$s is readable.'; $a->strings['View Logs'] = 'View logs'; +$a->strings['Show all'] = 'Show all'; $a->strings['Inspect Deferred Worker Queue'] = 'Inspect deferred worker queue'; $a->strings['This page lists the deferred worker jobs. This are jobs that couldn\'t be executed at the first time.'] = 'This page lists the deferred worker jobs. These are jobs that couldn\'t initially be executed.'; $a->strings['Inspect Worker Queue'] = 'Inspect worker queue'; $a->strings['This page lists the currently queued worker jobs. These jobs are handled by the worker cronjob you\'ve set up during install.'] = 'This page lists the currently queued worker jobs. These jobs are handled by the worker cronjob you\'ve set up during install.'; $a->strings['ID'] = 'ID'; $a->strings['Job Parameters'] = 'Job parameters'; -$a->strings['Created'] = 'Created'; $a->strings['Priority'] = 'Priority'; $a->strings['Can not parse base url. Must have at least ://'] = 'Can not parse base URL. Must have at least ://'; -$a->strings['Invalid storage backend setting value.'] = 'Invalid storage backend setting.'; $a->strings['No special theme for mobile devices'] = 'No special theme for mobile devices'; $a->strings['%s - (Experimental)'] = '%s - (Experimental)'; $a->strings['No community page for local users'] = 'No community page for local users'; @@ -1325,7 +1200,6 @@ $a->strings['Self-signed certificate, use SSL for local links only (discouraged) $a->strings['Don\'t check'] = 'Don\'t check'; $a->strings['check the stable version'] = 'check for stable version updates'; $a->strings['check the development version'] = 'check for development version updates'; -$a->strings['Database (legacy)'] = 'Database (legacy)'; $a->strings['Site'] = 'Site'; $a->strings['Republish users to directory'] = 'Republish users to directory'; $a->strings['Registration'] = 'Registration'; @@ -1355,12 +1229,8 @@ $a->strings['SSL link policy'] = 'SSL link policy'; $a->strings['Determines whether generated links should be forced to use SSL'] = 'Determines whether generated links should be forced to use SSL'; $a->strings['Force SSL'] = 'Force SSL'; $a->strings['Force all Non-SSL requests to SSL - Attention: on some systems it could lead to endless loops.'] = 'Force all Non-SSL requests to SSL - Attention: on some systems it could lead to endless loops.'; -$a->strings['Hide help entry from navigation menu'] = 'Hide help entry from navigation menu'; -$a->strings['Hides the menu entry for the Help pages from the navigation menu. You can still access it calling /help directly.'] = 'Hides the menu entry for the Help pages from the navigation menu. Help pages can still be accessed by calling ../help directly via its URL.'; $a->strings['Single user instance'] = 'Single user instance'; $a->strings['Make this instance multi-user or single-user for the named user'] = 'Make this instance multi-user or single-user for the named user'; -$a->strings['File storage backend'] = 'File storage backend'; -$a->strings['The backend used to store uploaded data. If you change the storage backend, you can manually move the existing files. If you do not do so, the files uploaded before the change will still be available at the old backend. Please see the settings documentation for more information about the choices and the moving procedure.'] = 'The backend used to store uploaded data. If you change the storage backend, you can manually move the existing files. If you do not do so, the files uploaded before the change will still be available at the old backend. Please see the settings documentation for more information about the choices and the moving procedure.'; $a->strings['Maximum image size'] = 'Maximum image size'; $a->strings['Maximum size in bytes of uploaded images. Default is 0, which means no limits.'] = 'Maximum size in bytes of uploaded images. Default is 0, which means no limits.'; $a->strings['Maximum image length'] = 'Maximum image length'; @@ -1401,24 +1271,12 @@ $a->strings['Explicit Content'] = 'Explicit Content'; $a->strings['Set this to announce that your node is used mostly for explicit content that might not be suited for minors. This information will be published in the node information and might be used, e.g. by the global directory, to filter your node from listings of nodes to join. Additionally a note about this will be shown at the user registration page.'] = 'Set this to announce that your node is used mostly for explicit content that might not be suited for minors. This information will be published in the node information and might be used, e.g. by the global directory, to filter your node from listings of nodes to join. Additionally a note about this will be shown at the user registration page.'; $a->strings['Allow Users to set remote_self'] = 'Allow users to set "Remote self"'; $a->strings['With checking this, every user is allowed to mark every contact as a remote_self in the repair contact dialog. Setting this flag on a contact causes mirroring every posting of that contact in the users stream.'] = 'This allows every user to mark contacts as a "Remote self" in the repair contact dialogue. Setting this flag on a contact will mirror every posting of that contact in the users stream.'; -$a->strings['Block multiple registrations'] = 'Block multiple registrations'; -$a->strings['Disallow users to register additional accounts for use as pages.'] = 'Disallow users to sign up for additional accounts.'; -$a->strings['Disable OpenID'] = 'Disable OpenID'; -$a->strings['Disable OpenID support for registration and logins.'] = 'Disable OpenID support for registration and logins.'; -$a->strings['No Fullname check'] = 'No full name check'; -$a->strings['Allow users to register without a space between the first name and the last name in their full name.'] = 'Allow users to register without a space between the first name and the last name in their full name.'; $a->strings['Community pages for visitors'] = 'Community pages for visitors'; $a->strings['Which community pages should be available for visitors. Local users always see both pages.'] = 'Which community pages should be available for visitors. Local users always see both pages.'; $a->strings['Posts per user on community page'] = 'Posts per user on community page'; $a->strings['The maximum number of posts per user on the community page. (Not valid for "Global Community")'] = 'The maximum number of posts per user on the community page. (Not valid for "Global Community")'; -$a->strings['Disable OStatus support'] = 'Disable OStatus support'; -$a->strings['Disable built-in OStatus (StatusNet, GNU Social etc.) compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed.'] = 'Disable built-in OStatus (StatusNet, GNU Social etc.) compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed.'; -$a->strings['OStatus support can only be enabled if threading is enabled.'] = 'OStatus support can only be enabled if threading is enabled.'; $a->strings['Diaspora support can\'t be enabled because Friendica was installed into a sub directory.'] = 'diaspora* support can\'t be enabled because Friendica was installed into a sub directory.'; $a->strings['Enable Diaspora support'] = 'Enable diaspora* support'; -$a->strings['Provide built-in Diaspora network compatibility.'] = 'Provide built-in diaspora* network compatibility.'; -$a->strings['Only allow Friendica contacts'] = 'Only allow Friendica contacts'; -$a->strings['All contacts must use Friendica protocols. All other built-in communication protocols disabled.'] = 'All contacts must use Friendica protocols. All other built-in communication protocols will be disabled.'; $a->strings['Verify SSL'] = 'Verify SSL'; $a->strings['If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites.'] = 'If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites.'; $a->strings['Proxy user'] = 'Proxy user'; @@ -1450,24 +1308,14 @@ $a->strings['Lifespan of unclaimed items'] = 'Lifespan of unclaimed items'; $a->strings['When the database cleanup is enabled, this defines the days after which unclaimed remote items (mostly content from the relay) will be deleted. Default value is 90 days. Defaults to the general lifespan value of remote items if set to 0.'] = 'If the database cleanup is enabled, this defines the days after which unclaimed remote items (mostly content from the relay) will be deleted. Default value is 90 days. Defaults to the general lifespan value of remote items if set to 0.'; $a->strings['Lifespan of raw conversation data'] = 'Lifespan of raw conversation data'; $a->strings['The conversation data is used for ActivityPub and OStatus, as well as for debug purposes. It should be safe to remove it after 14 days, default is 90 days.'] = 'The conversation data is used for ActivityPub and OStatus, as well as for debug purposes. It should be safe to remove it after 14 days, default is 90 days.'; -$a->strings['Path to item cache'] = 'Path to item cache'; -$a->strings['The item caches buffers generated bbcode and external images.'] = 'The item cache retains expanded bbcode and external images.'; -$a->strings['Cache duration in seconds'] = 'Cache duration in seconds'; -$a->strings['How long should the cache files be hold? Default value is 86400 seconds (One day). To disable the item cache, set the value to -1.'] = 'How long should cache files be held? (Default 86400 seconds - one day; -1 disables item cache)'; $a->strings['Maximum numbers of comments per post'] = 'Maximum number of comments per post'; $a->strings['How much comments should be shown for each post? Default value is 100.'] = 'How many comments should be shown for each post? (Default 100)'; $a->strings['Temp path'] = 'Temp path'; $a->strings['If you have a restricted system where the webserver can\'t access the system temp path, enter another path here.'] = 'Enter a different temp path if your system restricts the webserver\'s access to the system temp path.'; -$a->strings['Disable picture proxy'] = 'Disable picture proxy'; -$a->strings['The picture proxy increases performance and privacy. It shouldn\'t be used on systems with very low bandwidth.'] = 'The picture proxy increases performance and privacy. It shouldn\'t be used on systems with very low bandwidth.'; $a->strings['Only search in tags'] = 'Only search in tags'; $a->strings['On large systems the text search can slow down the system extremely.'] = 'On large systems, the text search can slow down the system significantly.'; $a->strings['New base url'] = 'New base URL'; $a->strings['Change base url for this server. Sends relocate message to all Friendica and Diaspora* contacts of all users.'] = 'Change base URL for this server. Sends a relocate message to all Friendica and diaspora* contacts, for all users.'; -$a->strings['RINO Encryption'] = 'RINO Encryption'; -$a->strings['Encryption layer between nodes.'] = 'Encryption layer between nodes.'; -$a->strings['Disabled'] = 'Disabled'; -$a->strings['Enabled'] = 'Enabled'; $a->strings['Maximum number of parallel workers'] = 'Maximum number of parallel workers'; $a->strings['On shared hosters set this to %d. On larger systems, values of %d are great. Default value is %d.'] = 'On shared hosters set this to %d. On larger systems, values of %d are great. Default value is %d.'; $a->strings['Enable fastlane'] = 'Enable fast-lane'; @@ -1476,6 +1324,7 @@ $a->strings['Direct relay transfer'] = 'Direct relay transfer'; $a->strings['Enables the direct transfer to other servers without using the relay servers'] = 'Enables direct transfer to other servers without using a relay server.'; $a->strings['Relay scope'] = 'Relay scope'; $a->strings['Can be "all" or "tags". "all" means that every public post should be received. "tags" means that only posts with selected tags should be received.'] = 'Can be "all" or "tags". "all" means that every public post should be received. "tags" means that only posts with selected tags should be received.'; +$a->strings['Disabled'] = 'Disabled'; $a->strings['all'] = 'all'; $a->strings['tags'] = 'tags'; $a->strings['Server tags'] = 'Server tags'; @@ -1484,6 +1333,8 @@ $a->strings['Deny Server tags'] = 'Deny server tags'; $a->strings['Allow user tags'] = 'Allow user tags'; $a->strings['If enabled, the tags from the saved searches will used for the "tags" subscription in addition to the "relay_server_tags".'] = 'If enabled, the tags from the saved searches will used for the "tags" subscription in addition to the "relay_server_tags".'; $a->strings['Start Relocation'] = 'Start relocation'; +$a->strings['Invalid storage backend setting value.'] = 'Invalid storage backend setting.'; +$a->strings['Database (legacy)'] = 'Database (legacy)'; $a->strings['Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See here for a guide that may be helpful converting the table engines. You may also use the command php bin/console.php dbstructure toinnodb of your Friendica installation for an automatic conversion.
'] = 'Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB-only features in the future, you should change this! See here for a guide that may be helpful converting the table engines. You may also use the command php bin/console.php dbstructure toinnodb of your Friendica installation for an automatic conversion.
'; $a->strings['There is a new version of Friendica available for download. Your current version is %1$s, upstream version is %2$s'] = 'A new Friendica version is available now. Your current version is %1$s, upstream version is %2$s'; $a->strings['The database update failed. Please run "php bin/console.php dbstructure update" from the command line and have a look at the errors that might appear.'] = 'The database update failed. Please run "php bin/console.php dbstructure update" from the command line and check for errors that may appear.'; @@ -1506,7 +1357,6 @@ $a->strings['Blog Account'] = 'Blog account'; $a->strings['Private Forum Account'] = 'Private forum account'; $a->strings['Message queues'] = 'Message queues'; $a->strings['Server Settings'] = 'Server Settings'; -$a->strings['Summary'] = 'Summary'; $a->strings['Registered users'] = 'Signed up users'; $a->strings['Pending registrations'] = 'Pending registrations'; $a->strings['Version'] = 'Version'; @@ -1568,6 +1418,7 @@ $a->strings['Contact not found'] = 'Contact not found'; $a->strings['No installed applications.'] = 'No installed applications.'; $a->strings['Applications'] = 'Applications'; $a->strings['Item was not found.'] = 'Item was not found.'; +$a->strings['Please login to continue.'] = 'Please login to continue.'; $a->strings['Overview'] = 'Overview'; $a->strings['Configuration'] = 'Configuration'; $a->strings['Additional features'] = 'Additional features'; @@ -1598,50 +1449,16 @@ $a->strings['Export personal data'] = 'Export personal data'; $a->strings['Remove account'] = 'Remove account'; $a->strings['This page is missing a url parameter.'] = 'This page is missing a URL parameter.'; $a->strings['The post was created'] = 'The post was created'; -$a->strings['Contact update failed.'] = 'Contact update failed.'; -$a->strings['WARNING: This is highly advanced and if you enter incorrect information your communications with this contact may stop working.'] = 'Warning: These are highly advanced settings. If you enter incorrect information, your communications with this contact might be disrupted.'; -$a->strings['Please use your browser \'Back\' button now if you are uncertain what to do on this page.'] = 'Please use your browser \'Back\' button now if you are uncertain what to do on this page.'; -$a->strings['Return to contact editor'] = 'Return to contact editor'; -$a->strings['Account Nickname'] = 'Account nickname:'; -$a->strings['@Tagname - overrides Name/Nickname'] = '@Tag name - overrides name/nickname:'; -$a->strings['Account URL'] = 'Account URL:'; -$a->strings['Account URL Alias'] = 'Account URL alias'; -$a->strings['Friend Request URL'] = 'Friend request URL:'; -$a->strings['Friend Confirm URL'] = 'Friend confirm URL:'; -$a->strings['Notification Endpoint URL'] = 'Notification endpoint URL'; -$a->strings['Poll/Feed URL'] = 'Poll/Feed URL:'; -$a->strings['New photo from this URL'] = 'New photo from this URL:'; -$a->strings['Invalid contact.'] = 'Invalid contact.'; -$a->strings['Follower (%s)'] = [ - 0 => 'Follower (%s)', - 1 => 'Followers (%s)', -]; -$a->strings['Following (%s)'] = [ - 0 => 'Following (%s)', - 1 => 'Following (%s)', -]; -$a->strings['Mutual friend (%s)'] = [ - 0 => 'Mutual friend (%s)', - 1 => 'Mutual friends (%s)', -]; -$a->strings['Contact (%s)'] = [ - 0 => 'Contact (%s)', - 1 => 'Contacts (%s)', -]; $a->strings['%d contact edited.'] = [ 0 => '%d contact edited.', 1 => '%d contacts edited.', ]; $a->strings['Could not access contact record.'] = 'Could not access contact record.'; +$a->strings['Failed to update contact record.'] = 'Failed to update contact record.'; $a->strings['Contact has been blocked'] = 'Contact has been blocked'; $a->strings['Contact has been unblocked'] = 'Contact has been unblocked'; $a->strings['Contact has been ignored'] = 'Contact has been ignored'; $a->strings['Contact has been unignored'] = 'Contact has been unignored'; -$a->strings['Contact has been archived'] = 'Contact has been archived'; -$a->strings['Contact has been unarchived'] = 'Contact has been unarchived'; -$a->strings['Drop contact'] = 'Drop contact'; -$a->strings['Do you really want to delete this contact?'] = 'Do you really want to delete this contact?'; -$a->strings['Contact has been removed.'] = 'Contact has been removed.'; $a->strings['You are mutual friends with %s'] = 'You are mutual friends with %s'; $a->strings['You are sharing with %s'] = 'You are sharing with %s'; $a->strings['%s is sharing with you'] = '%s is sharing with you'; @@ -1697,8 +1514,7 @@ $a->strings['Only show hidden contacts'] = 'Only show hidden contacts'; $a->strings['Organize your contact groups'] = 'Organize your contact groups'; $a->strings['Search your contacts'] = 'Search your contacts'; $a->strings['Results for: %s'] = 'Results for: %s'; -$a->strings['Archive'] = 'Archive'; -$a->strings['Unarchive'] = 'Unarchive'; +$a->strings['Update'] = 'Update'; $a->strings['Batch Actions'] = 'Batch actions'; $a->strings['Conversations started by this contact'] = 'Conversations started by this contact'; $a->strings['Posts and Comments'] = 'Posts and Comments'; @@ -1711,13 +1527,43 @@ $a->strings['Pending incoming contact request'] = 'Pending incoming contact requ $a->strings['Refetch contact data'] = 'Re-fetch contact data.'; $a->strings['Toggle Blocked status'] = 'Toggle blocked status'; $a->strings['Toggle Ignored status'] = 'Toggle ignored status'; -$a->strings['Toggle Archive status'] = 'Toggle archive status'; -$a->strings['Delete contact'] = 'Delete contact'; +$a->strings['Contact update failed.'] = 'Contact update failed.'; +$a->strings['WARNING: This is highly advanced and if you enter incorrect information your communications with this contact may stop working.'] = 'Warning: These are highly advanced settings. If you enter incorrect information, your communications with this contact might be disrupted.'; +$a->strings['Please use your browser \'Back\' button now if you are uncertain what to do on this page.'] = 'Please use your browser \'Back\' button now if you are uncertain what to do on this page.'; +$a->strings['Return to contact editor'] = 'Return to contact editor'; +$a->strings['Account Nickname'] = 'Account nickname:'; +$a->strings['@Tagname - overrides Name/Nickname'] = '@Tag name - overrides name/nickname:'; +$a->strings['Account URL'] = 'Account URL:'; +$a->strings['Account URL Alias'] = 'Account URL alias'; +$a->strings['Friend Request URL'] = 'Friend request URL:'; +$a->strings['Friend Confirm URL'] = 'Friend confirm URL:'; +$a->strings['Notification Endpoint URL'] = 'Notification endpoint URL'; +$a->strings['Poll/Feed URL'] = 'Poll/Feed URL:'; +$a->strings['New photo from this URL'] = 'New photo from this URL:'; +$a->strings['Invalid contact.'] = 'Invalid contact.'; +$a->strings['Follower (%s)'] = [ + 0 => 'Follower (%s)', + 1 => 'Followers (%s)', +]; +$a->strings['Following (%s)'] = [ + 0 => 'Following (%s)', + 1 => 'Following (%s)', +]; +$a->strings['Mutual friend (%s)'] = [ + 0 => 'Mutual friend (%s)', + 1 => 'Mutual friends (%s)', +]; +$a->strings['Contact (%s)'] = [ + 0 => 'Contact (%s)', + 1 => 'Contacts (%s)', +]; $a->strings['You must be logged in to use this module.'] = 'You must be logged in to use this module.'; $a->strings['Poke/Prod'] = 'Poke/Prod'; $a->strings['poke, prod or do other things to somebody'] = 'Poke, prod or do other things to somebody'; $a->strings['Choose what you wish to do to recipient'] = 'Choose what you wish to do:'; $a->strings['Make this post private'] = 'Make this post private'; +$a->strings['Contact is deleted.'] = 'Contact is deleted.'; +$a->strings['Yes'] = 'Yes'; $a->strings['Local Community'] = 'Local community'; $a->strings['Posts from local users on this server'] = 'Posts from local users on this server'; $a->strings['Global Community'] = 'Global community'; @@ -1783,6 +1629,10 @@ $a->strings['Find on this site'] = 'Find on this site'; $a->strings['Results for:'] = 'Results for:'; $a->strings['Site Directory'] = 'Site directory'; $a->strings['- select -'] = '- select -'; +$a->strings['Suggested contact not found.'] = 'Suggested contact not found.'; +$a->strings['Friend suggestion sent.'] = 'Friend suggestion sent'; +$a->strings['Suggest Friends'] = 'Suggest friends'; +$a->strings['Suggest a friend for %s'] = 'Suggest a friend for %s'; $a->strings['Installed addons/apps:'] = 'Installed addons/apps:'; $a->strings['No installed addons/apps'] = 'No installed addons/apps'; $a->strings['Read about the Terms of Service of this node.'] = 'Read about the Terms of Service of this node.'; @@ -1792,14 +1642,9 @@ $a->strings['Please visit Friendi.ca to learn m $a->strings['Bug reports and issues: please visit'] = 'Bug reports and issues: please visit'; $a->strings['the bugtracker at github'] = 'the bugtracker at github'; $a->strings['Suggestions, praise, etc. - please email "info" at "friendi - dot - ca'] = 'Suggestions, praise, etc. - please email "info" at "friendi - dot - ca'; -$a->strings['Suggested contact not found.'] = 'Suggested contact not found.'; -$a->strings['Friend suggestion sent.'] = 'Friend suggestion sent'; -$a->strings['Suggest Friends'] = 'Suggest friends'; -$a->strings['Suggest a friend for %s'] = 'Suggest a friend for %s'; $a->strings['Could not create group.'] = 'Could not create group.'; $a->strings['Group not found.'] = 'Group not found.'; $a->strings['Unknown group.'] = 'Unknown group.'; -$a->strings['Contact is deleted.'] = 'Contact is deleted.'; $a->strings['Unable to add the contact to the group.'] = 'Unable to add contact to group.'; $a->strings['Contact successfully added to group.'] = 'Contact successfully added to group.'; $a->strings['Unable to remove the contact from the group.'] = 'Unable to remove contact from group.'; @@ -1817,10 +1662,10 @@ $a->strings['Group is empty'] = 'Group is empty'; $a->strings['Remove contact from group'] = 'Remove contact from group'; $a->strings['Click on a contact to add or remove.'] = 'Click on a contact to add or remove it.'; $a->strings['Add contact to group'] = 'Add contact to group'; -$a->strings['Help:'] = 'Help:'; -$a->strings['Welcome to %s'] = 'Welcome to %s'; $a->strings['No profile'] = 'No profile'; $a->strings['Method Not Allowed.'] = 'Method not allowed.'; +$a->strings['Help:'] = 'Help:'; +$a->strings['Welcome to %s'] = 'Welcome to %s'; $a->strings['Friendica Communications Server - Setup'] = 'Friendica Communications Server - Setup'; $a->strings['System check'] = 'System check'; $a->strings['Check again'] = 'Check again'; @@ -1887,6 +1732,7 @@ $a->strings['Hide Ignored Requests'] = 'Hide ignored requests'; $a->strings['Notification type:'] = 'Notification type:'; $a->strings['Suggested by:'] = 'Suggested by:'; $a->strings['Claims to be known to you: '] = 'Says they know me:'; +$a->strings['No'] = 'No'; $a->strings['Shall your connection be bidirectional or not?'] = 'Shall your connection be in both directions or not?'; $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.'] = 'Accepting %s as a friend allows %s to subscribe to your posts. You will also receive updates from them in your news feed.'; $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.'] = 'Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed.'; @@ -1899,11 +1745,13 @@ $a->strings['System Notifications'] = 'System notifications'; $a->strings['Personal Notifications'] = 'Personal notifications'; $a->strings['Home Notifications'] = 'Home notifications'; $a->strings['Show unread'] = 'Show unread'; -$a->strings['Show all'] = 'Show all'; +$a->strings['Authorize application connection'] = 'Authorize application connection'; +$a->strings['Do you want to authorize this application to access your posts and contacts, and/or create new posts for you?'] = 'Do you want to authorize this application to access your posts and contacts and create new posts for you?'; $a->strings['Remote privacy information not available.'] = 'Remote privacy information not available.'; $a->strings['Visible to:'] = 'Visible to:'; $a->strings['Invalid photo with id %s.'] = 'Invalid photo with id %s.'; $a->strings['No contacts.'] = 'No contacts.'; +$a->strings['Profile not found.'] = 'Profile not found.'; $a->strings['Member since:'] = 'Member since:'; $a->strings['j F, Y'] = 'j F, Y'; $a->strings['j F'] = 'j F'; @@ -1938,7 +1786,12 @@ $a->strings['Registration successful.'] = 'Registration successful.'; $a->strings['Your registration can not be processed.'] = 'Your registration cannot be processed.'; $a->strings['You have to leave a request note for the admin.'] = 'You have to leave a request note for the admin.'; $a->strings['Your registration is pending approval by the site owner.'] = 'Your registration is pending approval by the site administrator.'; +$a->strings['Profile unavailable.'] = 'Profile unavailable.'; +$a->strings['Invalid locator'] = 'Invalid locator'; +$a->strings['Remote subscription can\'t be done for your network. Please subscribe directly on your system.'] = 'Remote subscription can\'t be done for your network. Please subscribe directly on your system.'; +$a->strings['Friend/Connection Request'] = 'Friend/Connection request'; $a->strings['Enter your Webfinger address (user@domain.tld) or profile URL here. If this isn\'t supported by your system, you have to subscribe to %s or %s directly on your system.'] = 'Enter your WebFinger address (user@domain.tld) or profile URL here. If this isn\'t supported by your system, you have to subscribe to %s or %s directly on your system.'; +$a->strings['Your Webfinger address or profile URL:'] = 'Your WebFinger address or profile URL:'; $a->strings['Only logged in users are permitted to perform a search.'] = 'Only logged in users are permitted to perform a search.'; $a->strings['Only one search per minute is permitted for not logged in users.'] = 'Only one search per minute is permitted for not-logged-in users.'; $a->strings['Items tagged with: %s'] = 'Items tagged with: %s'; @@ -1996,10 +1849,7 @@ $a->strings['Maximum of 100 items'] = 'Maximum of 100 items'; $a->strings['Number of items to display per page when viewed from mobile device:'] = 'Number of items displayed per page on mobile devices:'; $a->strings['Update browser every xx seconds'] = 'Update browser every so many seconds:'; $a->strings['Minimum of 10 seconds. Enter -1 to disable it.'] = 'Minimum 10 seconds; to disable -1.'; -$a->strings['Don\'t show emoticons'] = 'Don\'t show emoticons'; $a->strings['Infinite scroll'] = 'Infinite scroll'; -$a->strings['Disable Smart Threading'] = 'Disable smart threading'; -$a->strings['Disable the automatic suppression of extraneous thread indentation.'] = 'Disable the automatic suppression of extraneous thread indentation.'; $a->strings['Beginning of week:'] = 'Week begins: '; $a->strings['Profile Name is required.'] = 'Profile name is required.'; $a->strings['Field Permissions'] = 'Field Permissions'; @@ -2017,7 +1867,6 @@ $a->strings['Region/State:'] = 'Region/State:'; $a->strings['Postal/Zip Code:'] = 'Postcode:'; $a->strings['Country:'] = 'Country:'; $a->strings['XMPP (Jabber) address:'] = 'XMPP (Jabber) address:'; -$a->strings['The XMPP address will be propagated to your contacts so that they can follow you.'] = 'The XMPP address will be propagated to your contacts so that they can follow you.'; $a->strings['Homepage URL:'] = 'Homepage URL:'; $a->strings['Public Keywords:'] = 'Public keywords:'; $a->strings['(Used for suggesting potential friends, can be seen by others)'] = 'Used for suggesting potential friends, can be seen by others.'; @@ -2114,10 +1963,8 @@ $a->strings['Export all'] = 'Export all'; $a->strings['Export Contacts to CSV'] = 'Export contacts to CSV'; $a->strings['Export the list of the accounts you are following as CSV file. Compatible to e.g. Mastodon.'] = 'Export the list of the accounts you are following as CSV file. Compatible with Mastodon for example.'; $a->strings['Bad Request'] = 'Bad request'; -$a->strings['Unauthorized'] = 'Unauthorized'; $a->strings['Forbidden'] = 'Forbidden'; $a->strings['Not Found'] = 'Not found'; -$a->strings['Internal Server Error'] = 'Internal Server Error'; $a->strings['Service Unavailable'] = 'Service Unavailable'; $a->strings['The server cannot or will not process the request due to an apparent client error.'] = 'The server cannot process the request due to an apparent client error.'; $a->strings['Authentication is required and has failed or has not yet been provided.'] = 'Authentication is required but has failed or not yet being provided.'; @@ -2158,33 +2005,65 @@ $a->strings['Friendica respects your privacy. By default, your posts will only s $a->strings['Getting Help'] = 'Getting help'; $a->strings['Go to the Help Section'] = 'Go to the help section'; $a->strings['Our help pages may be consulted for detail on other program features and resources.'] = 'Our help pages may be consulted for detail on other program features and resources.'; +$a->strings['%s liked %s\'s post'] = '%s liked %s\'s post'; +$a->strings['%s disliked %s\'s post'] = '%s disliked %s\'s post'; +$a->strings['%s is attending %s\'s event'] = '%s is going to %s\'s event'; +$a->strings['%s is not attending %s\'s event'] = '%s is not going to %s\'s event'; +$a->strings['%s is now friends with %s'] = '%s is now friends with %s'; +$a->strings['%s commented on %s\'s post'] = '%s commented on %s\'s post'; +$a->strings['%s created a new post'] = '%s posted something new'; +$a->strings['Friend Suggestion'] = 'Friend suggestion'; +$a->strings['Friend/Connect Request'] = 'Friend/Contact request'; +$a->strings['New Follower'] = 'New follower'; +$a->strings['%1$s sent you a new private message at %2$s.'] = '%1$s sent you a new private message at %2$s.'; +$a->strings['a private message'] = 'a private message'; +$a->strings['%1$s sent you %2$s.'] = '%1$s sent you %2$s.'; +$a->strings['Please visit %s to view and/or reply to your private messages.'] = 'Please visit %s to view or reply to your private messages.'; +$a->strings['%s commented on an item/conversation you have been following.'] = '%s commented on an item/conversation you have been following.'; +$a->strings['Please visit %s to view and/or reply to the conversation.'] = 'Please visit %s to view or reply to the conversation.'; +$a->strings['%1$s posted to your profile wall at %2$s'] = '%1$s posted to your profile wall at %2$s'; +$a->strings['%1$s posted to [url=%2$s]your wall[/url]'] = '%1$s posted to [url=%2$s]your wall[/url]'; +$a->strings['%1$s poked you at %2$s'] = '%1$s poked you at %2$s'; +$a->strings['%1$s [url=%2$s]poked you[/url].'] = '%1$s [url=%2$s]poked you[/url].'; +$a->strings['You\'ve received an introduction from \'%1$s\' at %2$s'] = 'You\'ve received an introduction from \'%1$s\' at %2$s'; +$a->strings['You\'ve received [url=%1$s]an introduction[/url] from %2$s.'] = 'You\'ve received [url=%1$s]an introduction[/url] from %2$s.'; +$a->strings['You may visit their profile at %s'] = 'You may visit their profile at %s'; +$a->strings['Please visit %s to approve or reject the introduction.'] = 'Please visit %s to approve or reject the introduction.'; +$a->strings['%1$s is sharing with you at %2$s'] = '%1$s is sharing with you at %2$s'; +$a->strings['You have a new follower at %2$s : %1$s'] = 'You have a new follower at %2$s : %1$s'; +$a->strings['You\'ve received a friend suggestion from \'%1$s\' at %2$s'] = 'You\'ve received a friend suggestion from \'%1$s\' at %2$s'; +$a->strings['You\'ve received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s.'] = 'You\'ve received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s.'; +$a->strings['Name:'] = 'Name:'; +$a->strings['Photo:'] = 'Photo:'; +$a->strings['Please visit %s to approve or reject the suggestion.'] = 'Please visit %s to approve or reject the suggestion.'; +$a->strings['\'%1$s\' has accepted your connection request at %2$s'] = '\'%1$s\' has accepted your connection request at %2$s'; +$a->strings['%2$s has accepted your [url=%1$s]connection request[/url].'] = '%2$s has accepted your [url=%1$s]connection request[/url].'; +$a->strings['You are now mutual friends and may exchange status updates, photos, and email without restriction.'] = 'You are now mutual friends and may exchange status updates, photos, and email without restriction.'; +$a->strings['Please visit %s if you wish to make any changes to this relationship.'] = 'Please visit %s if you wish to make any changes to this relationship.'; +$a->strings['\'%1$s\' has chosen to accept you a fan, which restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically.'] = '\'%1$s\' has chosen to accept you as a fan, which restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically.'; +$a->strings['\'%1$s\' may choose to extend this into a two-way or more permissive relationship in the future.'] = '\'%1$s\' may choose to extend this into a two-way or more permissive relationship in the future.'; +$a->strings['Please visit %s if you wish to make any changes to this relationship.'] = 'Please visit %s if you wish to make any changes to this relationship.'; +$a->strings['registration request'] = 'registration request'; +$a->strings['You\'ve received a registration request from \'%1$s\' at %2$s'] = 'You\'ve received a registration request from \'%1$s\' at %2$s.'; +$a->strings['You\'ve received a [url=%1$s]registration request[/url] from %2$s.'] = 'You\'ve received a [url=%1$s]registration request[/url] from %2$s.'; +$a->strings['Full Name: %s +Site Location: %s +Login Name: %s (%s)'] = 'Full Name: %s +Site Location: %s +Login Name: %s (%s)'; +$a->strings['Please visit %s to approve or reject the request.'] = 'Please visit %s to approve or reject the request.'; $a->strings['This message was sent to you by %s, a member of the Friendica social network.'] = 'This message was sent to you by %s, a member of the Friendica social network.'; $a->strings['You may visit them online at %s'] = 'You may visit them online at %s'; $a->strings['Please contact the sender by replying to this post if you do not wish to receive these messages.'] = 'Please contact the sender by replying to this post if you do not wish to receive these messages.'; $a->strings['%s posted an update.'] = '%s posted an update.'; $a->strings['This entry was edited'] = 'This entry was edited'; $a->strings['Private Message'] = 'Private message'; -$a->strings['pinned item'] = 'pinned item'; +$a->strings['Edit'] = 'Edit'; $a->strings['Delete globally'] = 'Delete globally'; $a->strings['Remove locally'] = 'Remove locally'; -$a->strings['save to folder'] = 'Save to folder'; $a->strings['I will attend'] = 'I will attend'; $a->strings['I will not attend'] = 'I will not attend'; $a->strings['I might attend'] = 'I might attend'; -$a->strings['ignore thread'] = 'Ignore thread'; -$a->strings['unignore thread'] = 'Unignore thread'; -$a->strings['toggle ignore status'] = 'Toggle ignore status'; -$a->strings['pin'] = 'Pin'; -$a->strings['unpin'] = 'Unpin'; -$a->strings['toggle pin status'] = 'Toggle pin status'; -$a->strings['pinned'] = 'pinned'; -$a->strings['add star'] = 'Add star'; -$a->strings['remove star'] = 'Remove star'; -$a->strings['toggle star status'] = 'Toggle star status'; -$a->strings['starred'] = 'Starred'; -$a->strings['add tag'] = 'Add tag'; -$a->strings['like'] = 'Like'; -$a->strings['dislike'] = 'Dislike'; $a->strings['%s (Received %s)'] = '%s (Received %s)'; $a->strings['to'] = 'to'; $a->strings['via'] = 'via'; @@ -2207,22 +2086,6 @@ $a->strings['%s is now following %s.'] = '%s is now following %s.'; $a->strings['following'] = 'following'; $a->strings['%s stopped following %s.'] = '%s stopped following %s.'; $a->strings['stopped following'] = 'stopped following'; -$a->strings['Hometown:'] = 'Home town:'; -$a->strings['Sexual Preference:'] = 'Sexual preference:'; -$a->strings['Political Views:'] = 'Political views:'; -$a->strings['Religious Views:'] = 'Religious views:'; -$a->strings['Likes:'] = 'Likes:'; -$a->strings['Dislikes:'] = 'Dislikes:'; -$a->strings['Title/Description:'] = 'Title/Description:'; -$a->strings['Musical interests'] = 'Music:'; -$a->strings['Books, literature'] = 'Books, literature, poetry:'; -$a->strings['Television'] = 'Television:'; -$a->strings['Film/dance/culture/entertainment'] = 'Film, dance, culture, entertainment'; -$a->strings['Hobbies/Interests'] = 'Hobbies/Interests:'; -$a->strings['Love/romance'] = 'Love/Romance:'; -$a->strings['Work/employment'] = 'Work/Employment:'; -$a->strings['School/education'] = 'School/Education:'; -$a->strings['Contact information and Social Networks'] = 'Contact information and other social networks:'; $a->strings['Login failed.'] = 'Login failed.'; $a->strings['Login failed. Please check your credentials.'] = 'Login failed. Please check your credentials.'; $a->strings['Welcome %s'] = 'Welcome %s'; From 2a0d3da070d561e58d9fff6270ce5e56eea12763 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Wed, 27 Oct 2021 15:09:37 +0200 Subject: [PATCH 10/19] fix link to media tab in navigation In #10904 the wrong link was set, this PR should fix it and really point towards the media tab of the profiles. --- src/Content/Nav.php | 2 +- view/theme/frio/theme.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Content/Nav.php b/src/Content/Nav.php index db3eddfe2..90822c7e6 100644 --- a/src/Content/Nav.php +++ b/src/Content/Nav.php @@ -190,7 +190,7 @@ class Nav $nav['usermenu'][] = ['profile/' . $a->getLoggedInUserNickname(), DI::l10n()->t('Status'), '', DI::l10n()->t('Your posts and conversations')]; $nav['usermenu'][] = ['profile/' . $a->getLoggedInUserNickname() . '/profile', DI::l10n()->t('Profile'), '', DI::l10n()->t('Your profile page')]; $nav['usermenu'][] = ['photos/' . $a->getLoggedInUserNickname(), DI::l10n()->t('Photos'), '', DI::l10n()->t('Your photos')]; - $nav['usermenu'][] = ['media/' . $a->getLoggedInUserNickname(), DI::l10n()->t('Media'), '', DI::l10n()->t('Your postings with media')]; + $nav['usermenu'][] = ['profile/' . $a->getLoggedInUserNickname() . '/media', DI::l10n()->t('Media'), '', DI::l10n()->t('Your postings with media')]; $nav['usermenu'][] = ['events/', DI::l10n()->t('Events'), '', DI::l10n()->t('Your events')]; $nav['usermenu'][] = ['notes/', DI::l10n()->t('Personal notes'), '', DI::l10n()->t('Your personal notes')]; diff --git a/view/theme/frio/theme.php b/view/theme/frio/theme.php index 138bfdc2a..a8db26184 100644 --- a/view/theme/frio/theme.php +++ b/view/theme/frio/theme.php @@ -225,7 +225,7 @@ function frio_remote_nav(App $a, array &$nav_info) $nav_info['nav']['usermenu'][] = [$server_url . '/profile/' . $remoteUser['nick'], DI::l10n()->t('Status'), '', DI::l10n()->t('Your posts and conversations')]; $nav_info['nav']['usermenu'][] = [$server_url . '/profile/' . $remoteUser['nick'] . '/profile', DI::l10n()->t('Profile'), '', DI::l10n()->t('Your profile page')]; $nav_info['nav']['usermenu'][] = [$server_url . '/photos/' . $remoteUser['nick'], DI::l10n()->t('Photos'), '', DI::l10n()->t('Your photos')]; - $nav_info['nav']['usermenu'][] = [$server_url . '/media/' . $remoteUser['nick'], DI::l10n()->t('Media'), '', DI::l10n()->t('Your postings with media')]; + $nav_info['nav']['usermenu'][] = [$server_url . '/profile/' . $remoteUser['nick'] . '/media', DI::l10n()->t('Media'), '', DI::l10n()->t('Your postings with media')]; $nav_info['nav']['usermenu'][] = [$server_url . '/events/', DI::l10n()->t('Events'), '', DI::l10n()->t('Your events')]; // navbar links From 2ab0d06996410f68cf501e6e2014bf4829b121ae Mon Sep 17 00:00:00 2001 From: Philipp Date: Sat, 23 Oct 2021 12:11:38 +0200 Subject: [PATCH 11/19] Restructure Storage to new paradigm --- doc/AddonStorageBackend.md | 44 +++--- doc/Addons.md | 4 +- src/Console/Storage.php | 8 +- .../Capability/ICanConfigureStorage.php} | 4 +- .../Capability/ICanReadFromStorage.php} | 9 +- .../Capability/ICanWriteToStorage.php} | 7 +- .../InvalidClassStorageException.php | 2 +- .../Exception}/ReferenceStorageException.php | 2 +- .../Storage/Exception}/StorageException.php | 2 +- .../Repository}/StorageManager.php | 132 +++++++++--------- .../Storage/Type}/Database.php | 9 +- .../Storage/Type}/ExternalResource.php | 8 +- .../Storage/Type}/Filesystem.php | 9 +- .../Storage/Type}/FilesystemConfig.php | 5 +- .../Storage/Type}/SystemResource.php | 10 +- src/DI.php | 8 +- src/Model/Attach.php | 4 +- src/Model/Photo.php | 10 +- src/Module/Admin/Storage.php | 14 +- src/Module/Photo.php | 4 +- static/dependencies.config.php | 6 +- tests/Util/SampleStorageBackend.php | 6 +- .../Storage/DatabaseStorageTest.php | 4 +- .../Storage/FilesystemStorageConfigTest.php | 8 +- .../Storage/FilesystemStorageTest.php | 8 +- .../Repository}/StorageManagerTest.php | 75 +++++----- .../Storage/StorageConfigTest.php | 8 +- .../{Model => Core}/Storage/StorageTest.php | 12 +- update.php | 6 +- 29 files changed, 229 insertions(+), 199 deletions(-) rename src/{Model/Storage/IStorageConfiguration.php => Core/Storage/Capability/ICanConfigureStorage.php} (97%) rename src/{Model/Storage/IStorage.php => Core/Storage/Capability/ICanReadFromStorage.php} (84%) rename src/{Model/Storage/IWritableStorage.php => Core/Storage/Capability/ICanWriteToStorage.php} (88%) rename src/{Model/Storage => Core/Storage/Exception}/InvalidClassStorageException.php (95%) rename src/{Model/Storage => Core/Storage/Exception}/ReferenceStorageException.php (95%) rename src/{Model/Storage => Core/Storage/Exception}/StorageException.php (95%) rename src/Core/{ => Storage/Repository}/StorageManager.php (65%) rename src/{Model/Storage => Core/Storage/Type}/Database.php (92%) rename src/{Model/Storage => Core/Storage/Type}/ExternalResource.php (89%) rename src/{Model/Storage => Core/Storage/Type}/Filesystem.php (94%) rename src/{Model/Storage => Core/Storage/Type}/FilesystemConfig.php (93%) rename src/{Model/Storage => Core/Storage/Type}/SystemResource.php (86%) rename tests/src/{Model => Core}/Storage/DatabaseStorageTest.php (95%) rename tests/src/{Model => Core}/Storage/FilesystemStorageConfigTest.php (89%) rename tests/src/{Model => Core}/Storage/FilesystemStorageTest.php (94%) rename tests/src/Core/{ => Storage/Repository}/StorageManagerTest.php (80%) rename tests/src/{Model => Core}/Storage/StorageConfigTest.php (79%) rename tests/src/{Model => Core}/Storage/StorageTest.php (88%) diff --git a/doc/AddonStorageBackend.md b/doc/AddonStorageBackend.md index 0b0672376..eaa58cd4d 100644 --- a/doc/AddonStorageBackend.md +++ b/doc/AddonStorageBackend.md @@ -4,7 +4,7 @@ Friendica Storage Backend Addon development * [Home](help) Storage backends can be added via addons. -A storage backend is implemented as a class, and the plugin register the class to make it avaiable to the system. +A storage backend is implemented as a class, and the plugin register the class to make it available to the system. ## The Storage Backend Class @@ -12,14 +12,14 @@ The class must live in `Friendica\Addon\youraddonname` namespace, where `youradd There are two different interfaces you need to implement. -### `IWritableStorage` +### `ICanWriteToStorage` -The class must implement `Friendica\Model\Storage\IWritableStorage` interface. All method in the interface must be implemented: +The class must implement `Friendica\Core\Storage\Capability\ICanWriteToStorage` interface. All method in the interface must be implemented: ```php -namespace Friendica\Model\Storage\IWritableStorage; +namespace Friendica\Core\Storage\Capability\ICanWriteToStorage; -interface IWritableStorage +interface ICanWriteToStorage { public function get(string $reference); public function put(string $data, string $reference = ''); @@ -33,17 +33,17 @@ interface IWritableStorage - `put(string $data, string $reference)` saves data in `$data` to position `$reference`, or a new position if `$reference` is empty. - `delete(string $reference)` delete data pointed by `$reference` -### `IStorageConfiguration` +### `ICanConfigureStorage` Each storage backend can have options the admin can set in admin page. -To make the options possible, you need to implement the `Friendica\Model\Storage\IStorageConfiguration` interface. +To make the options possible, you need to implement the `Friendica\Core\Storage\Capability\ICanConfigureStorage` interface. All methods in the interface must be implemented: ```php -namespace Friendica\Model\Storage\IStorageConfiguration; +namespace Friendica\Core\Storage\Capability\ICanConfigureStorage; -interface IStorageConfiguration +interface ICanConfigureStorage { public function getOptions(); public function saveOptions(array $data); @@ -108,7 +108,7 @@ When the plugin is uninstalled, registered backends must be unregistered using `DI::facStorage()->unregister(string $class)`. You have to register a new hook in your addon, listening on `storage_instance(App $a, array $data)`. -In case `$data['name']` is your storage class name, you have to instance a new instance of your `Friendica\Model\Storage\IStorage` class. +In case `$data['name']` is your storage class name, you have to instance a new instance of your `Friendica\Core\Storage\Capability\ICanReadFromStorage` class. Set the instance of your class as `$data['storage']` to pass it back to the backend. This is necessary because it isn't always clear, if you need further construction arguments. @@ -124,7 +124,7 @@ Add a new test class which's naming convention is `StorageClassTest`, which exte Override the two necessary instances: ```php -use Friendica\Model\Storage\IWritableStorage; +use Friendica\Core\Storage\Capability\ICanWriteToStorage; abstract class StorageTest { @@ -132,7 +132,7 @@ abstract class StorageTest abstract protected function getInstance(); // Assertion for the option array you return for your new StorageClass - abstract protected function assertOption(IWritableStorage $storage); + abstract protected function assertOption(ICanWriteToStorage $storage); } ``` @@ -156,16 +156,16 @@ If there's a predecessor to this exception (e.g. you caught an exception and are Example: ```php -use Friendica\Model\Storage\IWritableStorage; +use Friendica\Core\Storage\Capability\ICanWriteToStorage; -class ExampleStorage implements IWritableStorage +class ExampleStorage implements ICanWriteToStorage { public function get(string $reference) : string { try { throw new Exception('a real bad exception'); } catch (Exception $exception) { - throw new \Friendica\Model\Storage\StorageException(sprintf('The Example Storage throws an exception for reference %s', $reference), 500, $exception); + throw new \Friendica\Core\Storage\Exception\StorageException(sprintf('The Example Storage throws an exception for reference %s', $reference), 500, $exception); } } } @@ -186,12 +186,12 @@ The file will be `addon/samplestorage/SampleStorageBackend.php`: assertEquals([ 'filename' => [ diff --git a/doc/Addons.md b/doc/Addons.md index debdc89dd..6b3cd169b 100644 --- a/doc/Addons.md +++ b/doc/Addons.md @@ -544,7 +544,7 @@ Called when a custom storage is used (e.g. webdav_storage) Hook data: - **name** (input): the name of the used storage backend -- **data['storage']** (output): the storage instance to use (**must** implement `\Friendica\Model\Storage\IWritableStorage`) +- **data['storage']** (output): the storage instance to use (**must** implement `\Friendica\Core\Storage\IWritableStorage`) ### storage_config @@ -552,7 +552,7 @@ Called when the admin of the node wants to configure a custom storage (e.g. webd Hook data: - **name** (input): the name of the used storage backend -- **data['storage_config']** (output): the storage configuration instance to use (**must** implement `\Friendica\Model\Storage\IStorageConfiguration`) +- **data['storage_config']** (output): the storage configuration instance to use (**must** implement `\Friendica\Core\Storage\Capability\IConfigureStorage`) ## Complete list of hook callbacks diff --git a/src/Console/Storage.php b/src/Console/Storage.php index 3377f33dd..fbe55f34c 100644 --- a/src/Console/Storage.php +++ b/src/Console/Storage.php @@ -22,9 +22,9 @@ namespace Friendica\Console; use Asika\SimpleConsole\CommandArgsException; -use Friendica\Core\StorageManager; -use Friendica\Model\Storage\ReferenceStorageException; -use Friendica\Model\Storage\StorageException; +use Friendica\Core\Storage\Repository\StorageManager; +use Friendica\Core\Storage\Exception\ReferenceStorageException; +use Friendica\Core\Storage\Exception\StorageException; /** * tool to manage storage backend and stored data from CLI @@ -33,7 +33,7 @@ class Storage extends \Asika\SimpleConsole\Console { protected $helpOptions = ['h', 'help', '?']; - /** @var StorageManager */ + /** @var \Friendica\Core\Storage\Repository\StorageManager */ private $storageManager; /** diff --git a/src/Model/Storage/IStorageConfiguration.php b/src/Core/Storage/Capability/ICanConfigureStorage.php similarity index 97% rename from src/Model/Storage/IStorageConfiguration.php rename to src/Core/Storage/Capability/ICanConfigureStorage.php index c589f5ed5..09d0718cf 100644 --- a/src/Model/Storage/IStorageConfiguration.php +++ b/src/Core/Storage/Capability/ICanConfigureStorage.php @@ -19,12 +19,12 @@ * */ -namespace Friendica\Model\Storage; +namespace Friendica\Core\Storage\Capability; /** * The interface to use for configurable storage backends */ -interface IStorageConfiguration +interface ICanConfigureStorage { /** * Get info about storage options diff --git a/src/Model/Storage/IStorage.php b/src/Core/Storage/Capability/ICanReadFromStorage.php similarity index 84% rename from src/Model/Storage/IStorage.php rename to src/Core/Storage/Capability/ICanReadFromStorage.php index 884148741..b6c63751d 100644 --- a/src/Model/Storage/IStorage.php +++ b/src/Core/Storage/Capability/ICanReadFromStorage.php @@ -19,12 +19,15 @@ * */ -namespace Friendica\Model\Storage; +namespace Friendica\Core\Storage\Capability; + +use Friendica\Core\Storage\Exception\ReferenceStorageException; +use Friendica\Core\Storage\Exception\StorageException; /** * Interface for basic storage backends */ -interface IStorage +interface ICanReadFromStorage { /** * Get data from backend @@ -43,7 +46,7 @@ interface IStorage * * @return string */ - public function __toString(); + public function __toString(): string; /** * The name of the backend diff --git a/src/Model/Storage/IWritableStorage.php b/src/Core/Storage/Capability/ICanWriteToStorage.php similarity index 88% rename from src/Model/Storage/IWritableStorage.php rename to src/Core/Storage/Capability/ICanWriteToStorage.php index 118f4b256..fd9d0e14f 100644 --- a/src/Model/Storage/IWritableStorage.php +++ b/src/Core/Storage/Capability/ICanWriteToStorage.php @@ -19,7 +19,10 @@ * */ -namespace Friendica\Model\Storage; +namespace Friendica\Core\Storage\Capability; + +use Friendica\Core\Storage\Exception\ReferenceStorageException; +use Friendica\Core\Storage\Exception\StorageException; /** * Interface for writable storage backends @@ -27,7 +30,7 @@ namespace Friendica\Model\Storage; * Used for storages with CRUD functionality, mainly used for user data (e.g. photos, attachements). * There's only one active writable storage possible. This type of storage is selectable by the current administrator. */ -interface IWritableStorage extends IStorage +interface ICanWriteToStorage extends ICanReadFromStorage { /** * Put data in backend as $ref. If $ref is not defined a new reference is created. diff --git a/src/Model/Storage/InvalidClassStorageException.php b/src/Core/Storage/Exception/InvalidClassStorageException.php similarity index 95% rename from src/Model/Storage/InvalidClassStorageException.php rename to src/Core/Storage/Exception/InvalidClassStorageException.php index 9c39b3a60..9c1c7bb2b 100644 --- a/src/Model/Storage/InvalidClassStorageException.php +++ b/src/Core/Storage/Exception/InvalidClassStorageException.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Model\Storage; +namespace Friendica\Core\Storage\Exception; /** * Storage Exception in case of invalid storage class diff --git a/src/Model/Storage/ReferenceStorageException.php b/src/Core/Storage/Exception/ReferenceStorageException.php similarity index 95% rename from src/Model/Storage/ReferenceStorageException.php rename to src/Core/Storage/Exception/ReferenceStorageException.php index fcfd3ab59..7ef596074 100644 --- a/src/Model/Storage/ReferenceStorageException.php +++ b/src/Core/Storage/Exception/ReferenceStorageException.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Model\Storage; +namespace Friendica\Core\Storage\Exception; /** * Storage Exception in case of invalid references diff --git a/src/Model/Storage/StorageException.php b/src/Core/Storage/Exception/StorageException.php similarity index 95% rename from src/Model/Storage/StorageException.php rename to src/Core/Storage/Exception/StorageException.php index 34a09d57b..7c7b3d12a 100644 --- a/src/Model/Storage/StorageException.php +++ b/src/Core/Storage/Exception/StorageException.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Model\Storage; +namespace Friendica\Core\Storage\Exception; use Exception; diff --git a/src/Core/StorageManager.php b/src/Core/Storage/Repository/StorageManager.php similarity index 65% rename from src/Core/StorageManager.php rename to src/Core/Storage/Repository/StorageManager.php index e27b59edb..5df6e5ac7 100644 --- a/src/Core/StorageManager.php +++ b/src/Core/Storage/Repository/StorageManager.php @@ -19,12 +19,20 @@ * */ -namespace Friendica\Core; +namespace Friendica\Core\Storage\Repository; use Exception; use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\Hook; +use Friendica\Core\L10n; +use Friendica\Core\Storage\Exception\InvalidClassStorageException; +use Friendica\Core\Storage\Exception\ReferenceStorageException; +use Friendica\Core\Storage\Exception\StorageException; +use Friendica\Core\Storage\Capability\ICanReadFromStorage; +use Friendica\Core\Storage\Capability\ICanConfigureStorage; +use Friendica\Core\Storage\Capability\ICanWriteToStorage; use Friendica\Database\Database; -use Friendica\Model\Storage; +use Friendica\Core\Storage\Type; use Friendica\Network\HTTPException\InternalServerErrorException; use Psr\Log\LoggerInterface; @@ -42,15 +50,15 @@ class StorageManager // Default storage backends /** @var string[] */ const DEFAULT_BACKENDS = [ - Storage\Filesystem::NAME, - Storage\Database::NAME, + Type\Filesystem::NAME, + Type\Database::NAME, ]; /** @var string[] List of valid backend classes */ private $validBackends; /** - * @var Storage\IStorage[] A local cache for storage instances + * @var ICanReadFromStorage[] A local cache for storage instances */ private $backendInstances = []; @@ -63,7 +71,7 @@ class StorageManager /** @var L10n */ private $l10n; - /** @var Storage\IWritableStorage */ + /** @var ICanWriteToStorage */ private $currentBackend; /** @@ -72,8 +80,8 @@ class StorageManager * @param LoggerInterface $logger * @param L10n $l10n * - * @throws Storage\InvalidClassStorageException in case the active backend class is invalid - * @throws Storage\StorageException in case of unexpected errors during the active backend class loading + * @throws InvalidClassStorageException in case the active backend class is invalid + * @throws StorageException in case of unexpected errors during the active backend class loading */ public function __construct(Database $dba, IManageConfigValues $config, LoggerInterface $logger, L10n $l10n) { @@ -92,9 +100,9 @@ class StorageManager /** * Return current storage backend class * - * @return Storage\IWritableStorage + * @return ICanWriteToStorage */ - public function getBackend() + public function getBackend(): ICanWriteToStorage { return $this->currentBackend; } @@ -104,16 +112,16 @@ class StorageManager * * @param string $name Backend name * - * @return Storage\IWritableStorage + * @return ICanWriteToStorage * - * @throws Storage\InvalidClassStorageException in case there's no backend class for the name - * @throws Storage\StorageException in case of an unexpected failure during the hook call + * @throws InvalidClassStorageException in case there's no backend class for the name + * @throws StorageException in case of an unexpected failure during the hook call */ - public function getWritableStorageByName(string $name): Storage\IWritableStorage + public function getWritableStorageByName(string $name): ICanWriteToStorage { $storage = $this->getByName($name, $this->validBackends); - if (!$storage instanceof Storage\IWritableStorage) { - throw new Storage\InvalidClassStorageException(sprintf('Backend %s is not writable', $name)); + if (!$storage instanceof ICanWriteToStorage) { + throw new InvalidClassStorageException(sprintf('Backend %s is not writable', $name)); } return $storage; @@ -124,19 +132,19 @@ class StorageManager * * @param string $name Backend name * - * @return Storage\IStorageConfiguration|false + * @return ICanConfigureStorage|false * - * @throws Storage\InvalidClassStorageException in case there's no backend class for the name - * @throws Storage\StorageException in case of an unexpected failure during the hook call + * @throws InvalidClassStorageException in case there's no backend class for the name + * @throws StorageException in case of an unexpected failure during the hook call */ public function getConfigurationByName(string $name) { switch ($name) { // Try the filesystem backend - case Storage\Filesystem::getName(): - return new Storage\FilesystemConfig($this->config, $this->l10n); + case Type\Filesystem::getName(): + return new Type\FilesystemConfig($this->config, $this->l10n); // try the database backend - case Storage\Database::getName(): + case Type\Database::getName(): return false; default: $data = [ @@ -145,13 +153,13 @@ class StorageManager ]; try { Hook::callAll('storage_config', $data); - if (!($data['storage_config'] ?? null) instanceof Storage\IStorageConfiguration) { - throw new Storage\InvalidClassStorageException(sprintf('Configuration for backend %s was not found', $name)); + if (!($data['storage_config'] ?? null) instanceof ICanConfigureStorage) { + throw new InvalidClassStorageException(sprintf('Configuration for backend %s was not found', $name)); } return $data['storage_config']; } catch (InternalServerErrorException $exception) { - throw new Storage\StorageException(sprintf('Failed calling hook::storage_config for backend %s', $name), $exception); + throw new StorageException(sprintf('Failed calling hook::storage_config for backend %s', $name), $exception); } } } @@ -162,36 +170,36 @@ class StorageManager * @param string $name Backend name * @param string[]|null $validBackends possible, manual override of the valid backends * - * @return Storage\IStorage + * @return ICanReadFromStorage * - * @throws Storage\InvalidClassStorageException in case there's no backend class for the name - * @throws Storage\StorageException in case of an unexpected failure during the hook call + * @throws InvalidClassStorageException in case there's no backend class for the name + * @throws StorageException in case of an unexpected failure during the hook call */ - public function getByName(string $name, array $validBackends = null): Storage\IStorage + public function getByName(string $name, array $validBackends = null): ICanReadFromStorage { // If there's no cached instance create a new instance if (!isset($this->backendInstances[$name])) { // If the current name isn't a valid backend (or the SystemResource instance) create it if (!$this->isValidBackend($name, $validBackends)) { - throw new Storage\InvalidClassStorageException(sprintf('Backend %s is not valid', $name)); + throw new InvalidClassStorageException(sprintf('Backend %s is not valid', $name)); } switch ($name) { // Try the filesystem backend - case Storage\Filesystem::getName(): - $storageConfig = new Storage\FilesystemConfig($this->config, $this->l10n); - $this->backendInstances[$name] = new Storage\Filesystem($storageConfig->getStoragePath()); + case Type\Filesystem::getName(): + $storageConfig = new Type\FilesystemConfig($this->config, $this->l10n); + $this->backendInstances[$name] = new Type\Filesystem($storageConfig->getStoragePath()); break; // try the database backend - case Storage\Database::getName(): - $this->backendInstances[$name] = new Storage\Database($this->dba); + case Type\Database::getName(): + $this->backendInstances[$name] = new Type\Database($this->dba); break; // at least, try if there's an addon for the backend - case Storage\SystemResource::getName(): - $this->backendInstances[$name] = new Storage\SystemResource(); + case \Friendica\Core\Storage\Type\SystemResource::getName(): + $this->backendInstances[$name] = new \Friendica\Core\Storage\Type\SystemResource(); break; - case Storage\ExternalResource::getName(): - $this->backendInstances[$name] = new Storage\ExternalResource(); + case \Friendica\Core\Storage\Type\ExternalResource::getName(): + $this->backendInstances[$name] = new \Friendica\Core\Storage\Type\ExternalResource(); break; default: $data = [ @@ -200,13 +208,13 @@ class StorageManager ]; try { Hook::callAll('storage_instance', $data); - if (!($data['storage'] ?? null) instanceof Storage\IStorage) { - throw new Storage\InvalidClassStorageException(sprintf('Backend %s was not found', $name)); + if (!($data['storage'] ?? null) instanceof ICanReadFromStorage) { + throw new InvalidClassStorageException(sprintf('Backend %s was not found', $name)); } $this->backendInstances[$data['name'] ?? $name] = $data['storage']; } catch (InternalServerErrorException $exception) { - throw new Storage\StorageException(sprintf('Failed calling hook::storage_instance for backend %s', $name), $exception); + throw new StorageException(sprintf('Failed calling hook::storage_instance for backend %s', $name), $exception); } break; } @@ -227,8 +235,8 @@ class StorageManager { $validBackends = $validBackends ?? array_merge($this->validBackends, [ - Storage\SystemResource::getName(), - Storage\ExternalResource::getName(), + Type\SystemResource::getName(), + Type\ExternalResource::getName(), ]); return in_array($name, $validBackends); } @@ -236,11 +244,11 @@ class StorageManager /** * Set current storage backend class * - * @param Storage\IWritableStorage $storage The storage class + * @param ICanWriteToStorage $storage The storage class * * @return boolean True, if the set was successful */ - public function setBackend(Storage\IWritableStorage $storage): bool + public function setBackend(ICanWriteToStorage $storage): bool { if ($this->config->set('storage', 'name', $storage::getName())) { $this->currentBackend = $storage; @@ -271,9 +279,8 @@ class StorageManager */ public function register(string $class): bool { - if (is_subclass_of($class, Storage\IStorage::class)) { - /** @var Storage\IStorage $class */ - + if (is_subclass_of($class, ICanReadFromStorage::class)) { + /** @var ICanReadFromStorage $class */ if ($this->isValidBackend($class::getName(), $this->validBackends)) { return true; } @@ -299,15 +306,14 @@ class StorageManager * * @return boolean True, if unregistering was successful * - * @throws Storage\StorageException + * @throws StorageException */ public function unregister(string $class): bool { - if (is_subclass_of($class, Storage\IStorage::class)) { - /** @var Storage\IStorage $class */ - + if (is_subclass_of($class, ICanReadFromStorage::class)) { + /** @var ICanReadFromStorage $class */ if ($this->currentBackend::getName() == $class::getName()) { - throw new Storage\StorageException(sprintf('Cannot unregister %s, because it\'s currently active.', $class::getName())); + throw new StorageException(sprintf('Cannot unregister %s, because it\'s currently active.', $class::getName())); } $key = array_search($class::getName(), $this->validBackends); @@ -336,18 +342,18 @@ class StorageManager * Copy existing data to destination storage and delete from source. * This method cannot move to legacy in-table `data` field. * - * @param Storage\IWritableStorage $destination Destination storage class name - * @param array $tables Tables to look in for resources. Optional, defaults to ['photo', 'attach'] - * @param int $limit Limit of the process batch size, defaults to 5000 + * @param ICanWriteToStorage $destination Destination storage class name + * @param array $tables Tables to look in for resources. Optional, defaults to ['photo', 'attach'] + * @param int $limit Limit of the process batch size, defaults to 5000 * * @return int Number of moved resources - * @throws Storage\StorageException + * @throws StorageException * @throws Exception */ - public function move(Storage\IWritableStorage $destination, array $tables = self::TABLES, int $limit = 5000): int + public function move(ICanWriteToStorage $destination, array $tables = self::TABLES, int $limit = 5000): int { if (!$this->isValidBackend($destination, $this->validBackends)) { - throw new Storage\StorageException(sprintf("Can't move to storage backend '%s'", $destination::getName())); + throw new StorageException(sprintf("Can't move to storage backend '%s'", $destination::getName())); } $moved = 0; @@ -369,10 +375,10 @@ class StorageManager $source = $this->getWritableStorageByName($resource['backend-class'] ?? ''); $this->logger->info('Get data from old backend.', ['oldBackend' => $source, 'oldReference' => $sourceRef]); $data = $source->get($sourceRef); - } catch (Storage\InvalidClassStorageException $exception) { + } catch (InvalidClassStorageException $exception) { $this->logger->info('Get data from DB resource field.', ['oldReference' => $sourceRef]); $data = $resource['data']; - } catch (Storage\ReferenceStorageException $exception) { + } catch (ReferenceStorageException $exception) { $this->logger->info('Invalid source reference.', ['oldBackend' => $source, 'oldReference' => $sourceRef]); continue; } @@ -385,7 +391,7 @@ class StorageManager $this->logger->info('update row'); if ($this->dba->update($table, ['backend-class' => $destination::getName(), 'backend-ref' => $destinationRef, 'data' => ''], ['id' => $id])) { if (!empty($source)) { - $this->logger->info('Delete data from old backend.', ['oldBackend' => $source, 'oldReference' => $sourceRef]); + $this->logger->info('Deleted data from old backend.', ['oldBackend' => $source, 'oldReference' => $sourceRef]); $source->delete($sourceRef); } $moved++; diff --git a/src/Model/Storage/Database.php b/src/Core/Storage/Type/Database.php similarity index 92% rename from src/Model/Storage/Database.php rename to src/Core/Storage/Type/Database.php index 7b90d8789..a22f8ae45 100644 --- a/src/Model/Storage/Database.php +++ b/src/Core/Storage/Type/Database.php @@ -19,9 +19,12 @@ * */ -namespace Friendica\Model\Storage; +namespace Friendica\Core\Storage\Type; use Exception; +use Friendica\Core\Storage\Exception\ReferenceStorageException; +use Friendica\Core\Storage\Exception\StorageException; +use Friendica\Core\Storage\Capability\ICanWriteToStorage; use Friendica\Database\Database as DBA; /** @@ -29,7 +32,7 @@ use Friendica\Database\Database as DBA; * * This class manage data stored in database table. */ -class Database implements IWritableStorage +class Database implements ICanWriteToStorage { const NAME = 'Database'; @@ -121,7 +124,7 @@ class Database implements IWritableStorage return self::NAME; } - public function __toString() + public function __toString(): string { return self::getName(); } diff --git a/src/Model/Storage/ExternalResource.php b/src/Core/Storage/Type/ExternalResource.php similarity index 89% rename from src/Model/Storage/ExternalResource.php rename to src/Core/Storage/Type/ExternalResource.php index 413050c30..33e65921b 100644 --- a/src/Model/Storage/ExternalResource.php +++ b/src/Core/Storage/Type/ExternalResource.php @@ -19,9 +19,11 @@ * */ -namespace Friendica\Model\Storage; +namespace Friendica\Core\Storage\Type; use Exception; +use Friendica\Core\Storage\Exception\ReferenceStorageException; +use Friendica\Core\Storage\Capability\ICanReadFromStorage; use Friendica\Util\HTTPSignature; /** @@ -30,7 +32,7 @@ use Friendica\Util\HTTPSignature; * This class is used to load external resources, like images. * Is not intended to be selectable by admins as default storage class. */ -class ExternalResource implements IStorage +class ExternalResource implements ICanReadFromStorage { const NAME = 'ExternalResource'; @@ -64,7 +66,7 @@ class ExternalResource implements IStorage /** * @inheritDoc */ - public function __toString() + public function __toString(): string { return self::NAME; } diff --git a/src/Model/Storage/Filesystem.php b/src/Core/Storage/Type/Filesystem.php similarity index 94% rename from src/Model/Storage/Filesystem.php rename to src/Core/Storage/Type/Filesystem.php index 8b5078f54..21a531946 100644 --- a/src/Model/Storage/Filesystem.php +++ b/src/Core/Storage/Type/Filesystem.php @@ -19,9 +19,12 @@ * */ -namespace Friendica\Model\Storage; +namespace Friendica\Core\Storage\Type; use Exception; +use Friendica\Core\Storage\Exception\ReferenceStorageException; +use Friendica\Core\Storage\Exception\StorageException; +use Friendica\Core\Storage\Capability\ICanWriteToStorage; use Friendica\Util\Strings; /** @@ -34,7 +37,7 @@ use Friendica\Util\Strings; * Each new resource gets a value as reference and is saved in a * folder tree stucture created from that value. */ -class Filesystem implements IWritableStorage +class Filesystem implements ICanWriteToStorage { const NAME = 'Filesystem'; @@ -175,7 +178,7 @@ class Filesystem implements IWritableStorage return self::NAME; } - public function __toString() + public function __toString(): string { return self::getName(); } diff --git a/src/Model/Storage/FilesystemConfig.php b/src/Core/Storage/Type/FilesystemConfig.php similarity index 93% rename from src/Model/Storage/FilesystemConfig.php rename to src/Core/Storage/Type/FilesystemConfig.php index 1aa1c3817..b30b2af08 100644 --- a/src/Model/Storage/FilesystemConfig.php +++ b/src/Core/Storage/Type/FilesystemConfig.php @@ -19,15 +19,16 @@ * */ -namespace Friendica\Model\Storage; +namespace Friendica\Core\Storage\Type; use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\L10n; +use Friendica\Core\Storage\Capability\ICanConfigureStorage; /** * Filesystem based storage backend configuration */ -class FilesystemConfig implements IStorageConfiguration +class FilesystemConfig implements ICanConfigureStorage { // Default base folder const DEFAULT_BASE_FOLDER = 'storage'; diff --git a/src/Model/Storage/SystemResource.php b/src/Core/Storage/Type/SystemResource.php similarity index 86% rename from src/Model/Storage/SystemResource.php rename to src/Core/Storage/Type/SystemResource.php index 39bc0a024..7b73b7c2e 100644 --- a/src/Model/Storage/SystemResource.php +++ b/src/Core/Storage/Type/SystemResource.php @@ -19,7 +19,11 @@ * */ -namespace Friendica\Model\Storage; +namespace Friendica\Core\Storage\Type; + +use Friendica\Core\Storage\Exception\ReferenceStorageException; +use Friendica\Core\Storage\Exception\StorageException; +use Friendica\Core\Storage\Capability\ICanReadFromStorage; /** * System resource storage class @@ -27,7 +31,7 @@ namespace Friendica\Model\Storage; * This class is used to load system resources, like images. * Is not intended to be selectable by admins as default storage class. */ -class SystemResource implements IStorage +class SystemResource implements ICanReadFromStorage { const NAME = 'SystemResource'; @@ -58,7 +62,7 @@ class SystemResource implements IStorage /** * @inheritDoc */ - public function __toString() + public function __toString(): string { return self::NAME; } diff --git a/src/DI.php b/src/DI.php index d45801a9f..5ba7e88db 100644 --- a/src/DI.php +++ b/src/DI.php @@ -211,11 +211,11 @@ abstract class DI } /** - * @return Core\StorageManager + * @return \Friendica\Core\Storage\Repository\StorageManager */ public static function storageManager() { - return self::$dice->create(Core\StorageManager::class); + return self::$dice->create(Core\Storage\Repository\StorageManager::class); } // @@ -395,11 +395,11 @@ abstract class DI } /** - * @return Model\Storage\IWritableStorage + * @return Core\Storage\Capability\ICanWriteToStorage */ public static function storage() { - return self::$dice->create(Model\Storage\IWritableStorage::class); + return self::$dice->create(Core\Storage\Capability\ICanWriteToStorage::class); } /** diff --git a/src/Model/Attach.php b/src/Model/Attach.php index e11fd01bc..dcc790676 100644 --- a/src/Model/Attach.php +++ b/src/Model/Attach.php @@ -25,8 +25,8 @@ use Friendica\Core\System; use Friendica\Database\DBA; use Friendica\Database\DBStructure; use Friendica\DI; -use Friendica\Model\Storage\InvalidClassStorageException; -use Friendica\Model\Storage\ReferenceStorageException; +use Friendica\Core\Storage\Exception\InvalidClassStorageException; +use Friendica\Core\Storage\Exception\ReferenceStorageException; use Friendica\Object\Image; use Friendica\Util\DateTimeFormat; use Friendica\Util\Mimetype; diff --git a/src/Model/Photo.php b/src/Model/Photo.php index ebd278753..13beb05b3 100644 --- a/src/Model/Photo.php +++ b/src/Model/Photo.php @@ -27,11 +27,11 @@ use Friendica\Core\System; use Friendica\Database\DBA; use Friendica\Database\DBStructure; use Friendica\DI; -use Friendica\Model\Storage\ExternalResource; -use Friendica\Model\Storage\InvalidClassStorageException; -use Friendica\Model\Storage\ReferenceStorageException; -use Friendica\Model\Storage\StorageException; -use Friendica\Model\Storage\SystemResource; +use Friendica\Core\Storage\Type\ExternalResource; +use Friendica\Core\Storage\Exception\InvalidClassStorageException; +use Friendica\Core\Storage\Exception\ReferenceStorageException; +use Friendica\Core\Storage\Exception\StorageException; +use Friendica\Core\Storage\Type\SystemResource; use Friendica\Object\Image; use Friendica\Util\DateTimeFormat; use Friendica\Util\Images; diff --git a/src/Module/Admin/Storage.php b/src/Module/Admin/Storage.php index 6b22d905c..8eb706fa0 100644 --- a/src/Module/Admin/Storage.php +++ b/src/Module/Admin/Storage.php @@ -23,9 +23,9 @@ namespace Friendica\Module\Admin; use Friendica\Core\Renderer; use Friendica\DI; -use Friendica\Model\Storage\InvalidClassStorageException; -use Friendica\Model\Storage\IStorageConfiguration; -use Friendica\Model\Storage\IWritableStorage; +use Friendica\Core\Storage\Exception\InvalidClassStorageException; +use Friendica\Core\Storage\Capability\ICanConfigureStorage; +use Friendica\Core\Storage\Capability\ICanWriteToStorage; use Friendica\Module\BaseAdmin; use Friendica\Util\Strings; @@ -40,7 +40,7 @@ class Storage extends BaseAdmin $storagebackend = Strings::escapeTags(trim($parameters['name'] ?? '')); try { - /** @var IStorageConfiguration|false $newStorageConfig */ + /** @var \Friendica\Core\Storage\Capability\ICanConfigureStorage|false $newStorageConfig */ $newStorageConfig = DI::storageManager()->getConfigurationByName($storagebackend); } catch (InvalidClassStorageException $storageException) { notice(DI::l10n()->t('Storage backend, %s is invalid.', $storagebackend)); @@ -78,7 +78,7 @@ class Storage extends BaseAdmin if (!empty($_POST['submit_save_set'])) { try { - /** @var IWritableStorage $newstorage */ + /** @var \Friendica\Core\Storage\Capability\ICanWriteToStorage $newstorage */ $newstorage = DI::storageManager()->getWritableStorageByName($storagebackend); if (!DI::storageManager()->setBackend($newstorage)) { @@ -129,7 +129,7 @@ class Storage extends BaseAdmin 'name' => $name, 'prefix' => $storage_form_prefix, 'form' => $storage_form, - 'active' => $current_storage_backend instanceof IWritableStorage && $name === $current_storage_backend::getName(), + 'active' => $current_storage_backend instanceof ICanWriteToStorage && $name === $current_storage_backend::getName(), ]; } @@ -147,7 +147,7 @@ class Storage extends BaseAdmin '$noconfig' => DI::l10n()->t('This backend doesn\'t have custom settings'), '$baseurl' => DI::baseUrl()->get(true), '$form_security_token' => self::getFormSecurityToken("admin_storage"), - '$storagebackend' => $current_storage_backend instanceof IWritableStorage ? $current_storage_backend::getName() : DI::l10n()->t('Database (legacy)'), + '$storagebackend' => $current_storage_backend instanceof ICanWriteToStorage ? $current_storage_backend::getName() : DI::l10n()->t('Database (legacy)'), '$availablestorageforms' => $available_storage_forms, ]); } diff --git a/src/Module/Photo.php b/src/Module/Photo.php index 0b03f4a79..db21803e6 100644 --- a/src/Module/Photo.php +++ b/src/Module/Photo.php @@ -29,8 +29,8 @@ use Friendica\Model\Contact; use Friendica\Model\Photo as MPhoto; use Friendica\Model\Post; use Friendica\Model\Profile; -use Friendica\Model\Storage\ExternalResource; -use Friendica\Model\Storage\SystemResource; +use Friendica\Core\Storage\Type\ExternalResource; +use Friendica\Core\Storage\Type\SystemResource; use Friendica\Model\User; use Friendica\Network\HTTPException; use Friendica\Object\Image; diff --git a/static/dependencies.config.php b/static/dependencies.config.php index f4aacb340..bbf8c5599 100644 --- a/static/dependencies.config.php +++ b/static/dependencies.config.php @@ -42,10 +42,10 @@ use Friendica\Core\L10n; use Friendica\Core\Lock; use Friendica\Core\Process; use Friendica\Core\Session\Capability\IHandleSessions; -use Friendica\Core\StorageManager; +use Friendica\Core\Storage\Repository\StorageManager; use Friendica\Database\Database; use Friendica\Factory; -use Friendica\Model\Storage\IWritableStorage; +use Friendica\Core\Storage\Capability\ICanWriteToStorage; use Friendica\Model\User\Cookie; use Friendica\Model\Log\ParsedLogIterator; use Friendica\Network; @@ -218,7 +218,7 @@ return [ $_SERVER, $_COOKIE ], ], - IWritableStorage::class => [ + ICanWriteToStorage::class => [ 'instanceOf' => StorageManager::class, 'call' => [ ['getBackend', [], Dice::CHAIN_CALL], diff --git a/tests/Util/SampleStorageBackend.php b/tests/Util/SampleStorageBackend.php index 1185a2564..03fca0171 100644 --- a/tests/Util/SampleStorageBackend.php +++ b/tests/Util/SampleStorageBackend.php @@ -22,14 +22,14 @@ namespace Friendica\Test\Util; use Friendica\Core\Hook; -use Friendica\Model\Storage\IWritableStorage; +use Friendica\Core\Storage\Capability\ICanWriteToStorage; use Friendica\Core\L10n; /** * A backend storage example class */ -class SampleStorageBackend implements IWritableStorage +class SampleStorageBackend implements ICanWriteToStorage { const NAME = 'Sample Storage'; @@ -102,7 +102,7 @@ class SampleStorageBackend implements IWritableStorage return $this->options; } - public function __toString() + public function __toString(): string { return self::NAME; } diff --git a/tests/src/Model/Storage/DatabaseStorageTest.php b/tests/src/Core/Storage/DatabaseStorageTest.php similarity index 95% rename from tests/src/Model/Storage/DatabaseStorageTest.php rename to tests/src/Core/Storage/DatabaseStorageTest.php index 796b8937c..b51f9fc2b 100644 --- a/tests/src/Model/Storage/DatabaseStorageTest.php +++ b/tests/src/Core/Storage/DatabaseStorageTest.php @@ -19,10 +19,10 @@ * */ -namespace Friendica\Test\src\Model\Storage; +namespace Friendica\Test\src\Core\Storage; use Friendica\Core\Config\Factory\Config; -use Friendica\Model\Storage\Database; +use Friendica\Core\Storage\Type\Database; use Friendica\Test\DatabaseTestTrait; use Friendica\Test\Util\Database\StaticDatabase; use Friendica\Test\Util\VFSTrait; diff --git a/tests/src/Model/Storage/FilesystemStorageConfigTest.php b/tests/src/Core/Storage/FilesystemStorageConfigTest.php similarity index 89% rename from tests/src/Model/Storage/FilesystemStorageConfigTest.php rename to tests/src/Core/Storage/FilesystemStorageConfigTest.php index a5989b1cd..a48faed76 100644 --- a/tests/src/Model/Storage/FilesystemStorageConfigTest.php +++ b/tests/src/Core/Storage/FilesystemStorageConfigTest.php @@ -19,12 +19,12 @@ * */ -namespace Friendica\Test\src\Model\Storage; +namespace Friendica\Test\src\Core\Storage; use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\L10n; -use Friendica\Model\Storage\FilesystemConfig; -use Friendica\Model\Storage\IStorageConfiguration; +use Friendica\Core\Storage\Capability\ICanConfigureStorage; +use Friendica\Core\Storage\Type\FilesystemConfig; use Friendica\Test\Util\VFSTrait; use Mockery\MockInterface; use org\bovigo\vfs\vfsStream; @@ -54,7 +54,7 @@ class FilesystemStorageConfigTest extends StorageConfigTest return new FilesystemConfig($config, $l10n); } - protected function assertOption(IStorageConfiguration $storage) + protected function assertOption(ICanConfigureStorage $storage) { self::assertEquals([ 'storagepath' => [ diff --git a/tests/src/Model/Storage/FilesystemStorageTest.php b/tests/src/Core/Storage/FilesystemStorageTest.php similarity index 94% rename from tests/src/Model/Storage/FilesystemStorageTest.php rename to tests/src/Core/Storage/FilesystemStorageTest.php index 837c16681..c97b93755 100644 --- a/tests/src/Model/Storage/FilesystemStorageTest.php +++ b/tests/src/Core/Storage/FilesystemStorageTest.php @@ -19,11 +19,11 @@ * */ -namespace Friendica\Test\src\Model\Storage; +namespace Friendica\Test\src\Core\Storage; -use Friendica\Model\Storage\Filesystem; -use Friendica\Model\Storage\FilesystemConfig; -use Friendica\Model\Storage\StorageException; +use Friendica\Core\Storage\Exception\StorageException; +use Friendica\Core\Storage\Type\Filesystem; +use Friendica\Core\Storage\Type\FilesystemConfig; use Friendica\Test\Util\VFSTrait; use org\bovigo\vfs\vfsStream; diff --git a/tests/src/Core/StorageManagerTest.php b/tests/src/Core/Storage/Repository/StorageManagerTest.php similarity index 80% rename from tests/src/Core/StorageManagerTest.php rename to tests/src/Core/Storage/Repository/StorageManagerTest.php index f9d05e637..c7b656943 100644 --- a/tests/src/Core/StorageManagerTest.php +++ b/tests/src/Core/Storage/Repository/StorageManagerTest.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Test\src\Core; +namespace Friendica\Test\src\Core\Storage\Repository; use Dice\Dice; use Friendica\Core\Config\Capability\IManageConfigValues; @@ -28,12 +28,17 @@ use Friendica\Core\Hook; use Friendica\Core\L10n; use Friendica\Core\Session\Capability\IHandleSessions; use Friendica\Core\Session\Type\Memory; -use Friendica\Core\StorageManager; +use Friendica\Core\Storage\Exception\InvalidClassStorageException; +use Friendica\Core\Storage\Capability\ICanReadFromStorage; +use Friendica\Core\Storage\Capability\ICanWriteToStorage; +use Friendica\Core\Storage\Repository\StorageManager; +use Friendica\Core\Storage\Type\Filesystem; +use Friendica\Core\Storage\Type\SystemResource; use Friendica\Database\Database; use Friendica\DI; use Friendica\Core\Config\Factory\Config; use Friendica\Core\Config\Repository; -use Friendica\Model\Storage; +use Friendica\Core\Storage\Type; use Friendica\Network\HTTPClient; use Friendica\Test\DatabaseTest; use Friendica\Test\Util\Database\StaticDatabase; @@ -64,7 +69,7 @@ class StorageManagerTest extends DatabaseTest $this->setUpVfsDir(); - vfsStream::newDirectory(Storage\FilesystemConfig::DEFAULT_BASE_FOLDER, 0777)->at($this->root); + vfsStream::newDirectory(Type\FilesystemConfig::DEFAULT_BASE_FOLDER, 0777)->at($this->root); $this->logger = new NullLogger(); @@ -83,7 +88,7 @@ class StorageManagerTest extends DatabaseTest $configModel = new Repository\Config($this->dba); $this->config = new PreloadConfig($configCache, $configModel); $this->config->set('storage', 'name', 'Database'); - $this->config->set('storage', 'filesystem_path', $this->root->getChild(Storage\FilesystemConfig::DEFAULT_BASE_FOLDER)->url()); + $this->config->set('storage', 'filesystem_path', $this->root->getChild(Type\FilesystemConfig::DEFAULT_BASE_FOLDER)->url()); $this->l10n = \Mockery::mock(L10n::class); @@ -92,7 +97,7 @@ class StorageManagerTest extends DatabaseTest protected function tearDown(): void { - $this->root->removeChild(Storage\FilesystemConfig::DEFAULT_BASE_FOLDER); + $this->root->removeChild(Type\FilesystemConfig::DEFAULT_BASE_FOLDER); parent::tearDown(); } @@ -113,30 +118,30 @@ class StorageManagerTest extends DatabaseTest 'empty' => [ 'name' => '', 'valid' => false, - 'interface' => Storage\IStorage::class, + 'interface' => ICanReadFromStorage::class, 'assert' => null, 'assertName' => '', ], 'database' => [ - 'name' => Storage\Database::NAME, + 'name' => Type\Database::NAME, 'valid' => true, - 'interface' => Storage\IWritableStorage::class, - 'assert' => Storage\Database::class, - 'assertName' => Storage\Database::NAME, + 'interface' => ICanWriteToStorage::class, + 'assert' => Type\Database::class, + 'assertName' => Type\Database::NAME, ], 'filesystem' => [ - 'name' => Storage\Filesystem::NAME, + 'name' => Filesystem::NAME, 'valid' => true, - 'interface' => Storage\IWritableStorage::class, - 'assert' => Storage\Filesystem::class, - 'assertName' => Storage\Filesystem::NAME, + 'interface' => ICanWriteToStorage::class, + 'assert' => Filesystem::class, + 'assertName' => Filesystem::NAME, ], 'systemresource' => [ - 'name' => Storage\SystemResource::NAME, + 'name' => SystemResource::NAME, 'valid' => true, - 'interface' => Storage\IStorage::class, - 'assert' => Storage\SystemResource::class, - 'assertName' => Storage\SystemResource::NAME, + 'interface' => ICanReadFromStorage::class, + 'assert' => SystemResource::class, + 'assertName' => SystemResource::NAME, ], 'invalid' => [ 'name' => 'invalid', @@ -157,16 +162,16 @@ class StorageManagerTest extends DatabaseTest public function testGetByName($name, $valid, $interface, $assert, $assertName) { if (!$valid) { - $this->expectException(Storage\InvalidClassStorageException::class); + $this->expectException(InvalidClassStorageException::class); } - if ($interface === Storage\IWritableStorage::class) { + if ($interface === ICanWriteToStorage::class) { $this->config->set('storage', 'name', $name); } $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); - if ($interface === Storage\IWritableStorage::class) { + if ($interface === ICanWriteToStorage::class) { $storage = $storageManager->getWritableStorageByName($name); } else { $storage = $storageManager->getByName($name); @@ -189,8 +194,8 @@ class StorageManagerTest extends DatabaseTest // true in every of the backends self::assertEquals(!empty($assertName), $storageManager->isValidBackend($name)); - // if it's a IWritableStorage, the valid backend should return true, otherwise false - self::assertEquals($interface === Storage\IWritableStorage::class, $storageManager->isValidBackend($name, StorageManager::DEFAULT_BACKENDS)); + // if it's a ICanWriteToStorage, the valid backend should return true, otherwise false + self::assertEquals($interface === ICanWriteToStorage::class, $storageManager->isValidBackend($name, StorageManager::DEFAULT_BACKENDS)); } /** @@ -210,8 +215,8 @@ class StorageManagerTest extends DatabaseTest */ public function testGetBackend($name, $valid, $interface, $assert, $assertName) { - if ($interface !== Storage\IWritableStorage::class) { - static::markTestSkipped('only works for IWritableStorage'); + if ($interface !== ICanWriteToStorage::class) { + static::markTestSkipped('only works for ICanWriteToStorage'); } $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); @@ -230,8 +235,8 @@ class StorageManagerTest extends DatabaseTest public function testPresetBackend($name, $valid, $interface, $assert, $assertName) { $this->config->set('storage', 'name', $name); - if ($interface !== Storage\IWritableStorage::class) { - $this->expectException(Storage\InvalidClassStorageException::class); + if ($interface !== ICanWriteToStorage::class) { + $this->expectException(InvalidClassStorageException::class); } $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); @@ -250,7 +255,7 @@ class StorageManagerTest extends DatabaseTest { /// @todo Remove dice once "Hook" is dynamic and mockable $dice = (new Dice()) - ->addRules(include __DIR__ . '/../../../static/dependencies.config.php') + ->addRules(include __DIR__ . '/../../../../../static/dependencies.config.php') ->addRule(Database::class, ['instanceOf' => StaticDatabase::class, 'shared' => true]) ->addRule(IHandleSessions::class, ['instanceOf' => Session\Type\Memory::class, 'shared' => true, 'call' => null]); DI::init($dice); @@ -278,7 +283,7 @@ class StorageManagerTest extends DatabaseTest { /// @todo Remove dice once "Hook" is dynamic and mockable $dice = (new Dice()) - ->addRules(include __DIR__ . '/../../../static/dependencies.config.php') + ->addRules(include __DIR__ . '/../../../../../static/dependencies.config.php') ->addRule(Database::class, ['instanceOf' => StaticDatabase::class, 'shared' => true]) ->addRule(IHandleSessions::class, ['instanceOf' => Memory::class, 'shared' => true, 'call' => null]); DI::init($dice); @@ -303,7 +308,7 @@ class StorageManagerTest extends DatabaseTest self::assertInstanceOf(SampleStorageBackend::class, $storageManager->getBackend()); - self::expectException(Storage\StorageException::class); + self::expectException(\Friendica\Core\Storage\Exception\StorageException::class); self::expectExceptionMessage('Cannot unregister Sample Storage, because it\'s currently active.'); $storageManager->unregister(SampleStorageBackend::class); @@ -316,11 +321,11 @@ class StorageManagerTest extends DatabaseTest */ public function testMoveStorage($name, $valid, $interface, $assert, $assertName) { - if ($interface !== Storage\IWritableStorage::class) { + if ($interface !== ICanWriteToStorage::class) { self::markTestSkipped("No user backend"); } - $this->loadFixture(__DIR__ . '/../../datasets/storage/database.fixture.php', $this->dba); + $this->loadFixture(__DIR__ . '/../../../../datasets/storage/database.fixture.php', $this->dba); $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); $storage = $storageManager->getWritableStorageByName($name); @@ -343,11 +348,11 @@ class StorageManagerTest extends DatabaseTest */ public function testWrongWritableStorage() { - $this->expectException(Storage\InvalidClassStorageException::class); + $this->expectException(InvalidClassStorageException::class); $this->expectExceptionMessage('Backend SystemResource is not valid'); $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); - $storage = $storageManager->getWritableStorageByName(Storage\SystemResource::getName()); + $storage = $storageManager->getWritableStorageByName(SystemResource::getName()); $storageManager->move($storage); } } diff --git a/tests/src/Model/Storage/StorageConfigTest.php b/tests/src/Core/Storage/StorageConfigTest.php similarity index 79% rename from tests/src/Model/Storage/StorageConfigTest.php rename to tests/src/Core/Storage/StorageConfigTest.php index 80cbbaeb0..a01be343d 100644 --- a/tests/src/Model/Storage/StorageConfigTest.php +++ b/tests/src/Core/Storage/StorageConfigTest.php @@ -19,17 +19,17 @@ * */ -namespace Friendica\Test\src\Model\Storage; +namespace Friendica\Test\src\Core\Storage; -use Friendica\Model\Storage\IStorageConfiguration; +use Friendica\Core\Storage\Capability\ICanConfigureStorage; use Friendica\Test\MockedTest; abstract class StorageConfigTest extends MockedTest { - /** @return IStorageConfiguration */ + /** @return \Friendica\Core\Storage\Capability\ICanConfigureStorage */ abstract protected function getInstance(); - abstract protected function assertOption(IStorageConfiguration $storage); + abstract protected function assertOption(\Friendica\Core\Storage\Capability\ICanConfigureStorage $storage); /** * Test if the "getOption" is asserted diff --git a/tests/src/Model/Storage/StorageTest.php b/tests/src/Core/Storage/StorageTest.php similarity index 88% rename from tests/src/Model/Storage/StorageTest.php rename to tests/src/Core/Storage/StorageTest.php index 743374757..71377a955 100644 --- a/tests/src/Model/Storage/StorageTest.php +++ b/tests/src/Core/Storage/StorageTest.php @@ -19,16 +19,16 @@ * */ -namespace Friendica\Test\src\Model\Storage; +namespace Friendica\Test\src\Core\Storage; -use Friendica\Model\Storage\IWritableStorage; -use Friendica\Model\Storage\IStorage; -use Friendica\Model\Storage\ReferenceStorageException; +use Friendica\Core\Storage\Capability\ICanReadFromStorage; +use Friendica\Core\Storage\Capability\ICanWriteToStorage; +use Friendica\Core\Storage\Exception\ReferenceStorageException; use Friendica\Test\MockedTest; abstract class StorageTest extends MockedTest { - /** @return IWritableStorage */ + /** @return ICanWriteToStorage */ abstract protected function getInstance(); /** @@ -37,7 +37,7 @@ abstract class StorageTest extends MockedTest public function testInstance() { $instance = $this->getInstance(); - self::assertInstanceOf(IStorage::class, $instance); + self::assertInstanceOf(ICanReadFromStorage::class, $instance); } /** diff --git a/update.php b/update.php index a2999ed5a..368b70b22 100644 --- a/update.php +++ b/update.php @@ -41,6 +41,7 @@ */ use Friendica\Core\Logger; +use Friendica\Core\Storage\Capability\ICanReadFromStorage; use Friendica\Core\Update; use Friendica\Core\Worker; use Friendica\Database\Database; @@ -54,7 +55,6 @@ use Friendica\Model\Notification; use Friendica\Model\Photo; use Friendica\Model\Post; use Friendica\Model\Profile; -use Friendica\Model\Storage; use Friendica\Security\PermissionSet\Repository\PermissionSet; use Friendica\Worker\Delivery; @@ -183,7 +183,7 @@ function update_1330() // set the name of the storage instead of the classpath as config if (!empty($currStorage)) { - /** @var Storage\IStorage $currStorage */ + /** @var ICanReadFromStorage $currStorage */ if (!DI::config()->set('storage', 'name', $currStorage::getName())) { return Update::FAILED; } @@ -989,7 +989,7 @@ function update_1434() // in case of an empty config, set "Database" as default storage backend if (empty($name)) { - DI::config()->set('storage', 'name', Storage\Database::getName()); + DI::config()->set('storage', 'name', \Friendica\Core\Storage\Type\Database::getName()); } // In case of a Using deprecated storage class value, set the right name for it From d34497e69b79b9f157061ccef046a0403d65065b Mon Sep 17 00:00:00 2001 From: Philipp Date: Wed, 27 Oct 2021 20:02:42 +0200 Subject: [PATCH 12/19] Update messages.po --- view/lang/C/messages.po | 46 ++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po index d71fea26f..0cb7b2c78 100644 --- a/view/lang/C/messages.po +++ b/view/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 2021.12-dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-10-24 23:21-0400\n" +"POT-Creation-Date: 2021-10-27 20:01+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -2087,11 +2087,11 @@ msgid "" "your site allow private mail from unknown senders." msgstr "" -#: src/App.php:456 +#: src/App.php:455 msgid "No system theme config value set." msgstr "" -#: src/App/Module.php:240 +#: src/App/Module.php:241 msgid "You must be logged in to use addons. " msgstr "" @@ -3877,6 +3877,20 @@ msgstr "" msgid "template engine is not registered!" msgstr "" +#: src/Core/Storage/Type/FilesystemConfig.php:78 +msgid "Storage base path" +msgstr "" + +#: src/Core/Storage/Type/FilesystemConfig.php:80 +msgid "" +"Folder where uploaded files are saved. For maximum security, This should be " +"a path outside web server folder tree" +msgstr "" + +#: src/Core/Storage/Type/FilesystemConfig.php:93 +msgid "Enter a valid existing folder" +msgstr "" + #: src/Core/Update.php:67 #, php-format msgid "" @@ -4414,20 +4428,6 @@ msgstr "" msgid "Contact information and Social Networks" msgstr "" -#: src/Model/Storage/FilesystemConfig.php:77 -msgid "Storage base path" -msgstr "" - -#: src/Model/Storage/FilesystemConfig.php:79 -msgid "" -"Folder where uploaded files are saved. For maximum security, This should be " -"a path outside web server folder tree" -msgstr "" - -#: src/Model/Storage/FilesystemConfig.php:92 -msgid "Enter a valid existing folder" -msgstr "" - #: src/Model/User.php:208 src/Model/User.php:1050 msgid "SERIOUS ERROR: Generation of security keys failed." msgstr "" @@ -4475,13 +4475,13 @@ msgstr "" msgid "Invalid OpenID url" msgstr "" -#: src/Model/User.php:962 src/Security/Authentication.php:223 +#: src/Model/User.php:962 src/Security/Authentication.php:224 msgid "" "We encountered a problem while logging in with the OpenID you provided. " "Please check the correct spelling of the ID." msgstr "" -#: src/Model/User.php:962 src/Security/Authentication.php:223 +#: src/Model/User.php:962 src/Security/Authentication.php:224 msgid "The error message was:" msgstr "" @@ -10579,20 +10579,20 @@ msgstr "" msgid "The folder view/smarty3/ must be writable by webserver." msgstr "" -#: src/Security/Authentication.php:209 +#: src/Security/Authentication.php:210 msgid "Login failed." msgstr "" -#: src/Security/Authentication.php:250 +#: src/Security/Authentication.php:251 msgid "Login failed. Please check your credentials." msgstr "" -#: src/Security/Authentication.php:348 +#: src/Security/Authentication.php:349 #, php-format msgid "Welcome %s" msgstr "" -#: src/Security/Authentication.php:349 +#: src/Security/Authentication.php:350 msgid "Please upload a profile photo." msgstr "" From 7c38647573b3bd767c1a924753f1e2f11ab585e4 Mon Sep 17 00:00:00 2001 From: Philipp Date: Wed, 27 Oct 2021 20:06:04 +0200 Subject: [PATCH 13/19] Cleanup namespace --- src/Console/Storage.php | 2 +- src/Core/Storage/Repository/StorageManager.php | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Console/Storage.php b/src/Console/Storage.php index fbe55f34c..a4342e4b4 100644 --- a/src/Console/Storage.php +++ b/src/Console/Storage.php @@ -33,7 +33,7 @@ class Storage extends \Asika\SimpleConsole\Console { protected $helpOptions = ['h', 'help', '?']; - /** @var \Friendica\Core\Storage\Repository\StorageManager */ + /** @var StorageManager */ private $storageManager; /** diff --git a/src/Core/Storage/Repository/StorageManager.php b/src/Core/Storage/Repository/StorageManager.php index 5df6e5ac7..b8cb0c9e4 100644 --- a/src/Core/Storage/Repository/StorageManager.php +++ b/src/Core/Storage/Repository/StorageManager.php @@ -195,11 +195,11 @@ class StorageManager $this->backendInstances[$name] = new Type\Database($this->dba); break; // at least, try if there's an addon for the backend - case \Friendica\Core\Storage\Type\SystemResource::getName(): - $this->backendInstances[$name] = new \Friendica\Core\Storage\Type\SystemResource(); + case Type\SystemResource::getName(): + $this->backendInstances[$name] = new Type\SystemResource(); break; - case \Friendica\Core\Storage\Type\ExternalResource::getName(): - $this->backendInstances[$name] = new \Friendica\Core\Storage\Type\ExternalResource(); + case Type\ExternalResource::getName(): + $this->backendInstances[$name] = new Type\ExternalResource(); break; default: $data = [ From d778af0b0ee3462d6cff943e0a8d8a9a5364c67f Mon Sep 17 00:00:00 2001 From: Philipp Date: Wed, 27 Oct 2021 20:16:34 +0200 Subject: [PATCH 14/19] Cleanup namespaces --- src/Module/Admin/Storage.php | 3 +-- tests/src/Core/Storage/Repository/StorageManagerTest.php | 5 +++-- tests/src/Core/Storage/StorageConfigTest.php | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Module/Admin/Storage.php b/src/Module/Admin/Storage.php index 8eb706fa0..dfee3d236 100644 --- a/src/Module/Admin/Storage.php +++ b/src/Module/Admin/Storage.php @@ -40,7 +40,7 @@ class Storage extends BaseAdmin $storagebackend = Strings::escapeTags(trim($parameters['name'] ?? '')); try { - /** @var \Friendica\Core\Storage\Capability\ICanConfigureStorage|false $newStorageConfig */ + /** @var ICanConfigureStorage|false $newStorageConfig */ $newStorageConfig = DI::storageManager()->getConfigurationByName($storagebackend); } catch (InvalidClassStorageException $storageException) { notice(DI::l10n()->t('Storage backend, %s is invalid.', $storagebackend)); @@ -78,7 +78,6 @@ class Storage extends BaseAdmin if (!empty($_POST['submit_save_set'])) { try { - /** @var \Friendica\Core\Storage\Capability\ICanWriteToStorage $newstorage */ $newstorage = DI::storageManager()->getWritableStorageByName($storagebackend); if (!DI::storageManager()->setBackend($newstorage)) { diff --git a/tests/src/Core/Storage/Repository/StorageManagerTest.php b/tests/src/Core/Storage/Repository/StorageManagerTest.php index c7b656943..0ba28af82 100644 --- a/tests/src/Core/Storage/Repository/StorageManagerTest.php +++ b/tests/src/Core/Storage/Repository/StorageManagerTest.php @@ -31,6 +31,7 @@ use Friendica\Core\Session\Type\Memory; use Friendica\Core\Storage\Exception\InvalidClassStorageException; use Friendica\Core\Storage\Capability\ICanReadFromStorage; use Friendica\Core\Storage\Capability\ICanWriteToStorage; +use Friendica\Core\Storage\Exception\StorageException; use Friendica\Core\Storage\Repository\StorageManager; use Friendica\Core\Storage\Type\Filesystem; use Friendica\Core\Storage\Type\SystemResource; @@ -257,7 +258,7 @@ class StorageManagerTest extends DatabaseTest $dice = (new Dice()) ->addRules(include __DIR__ . '/../../../../../static/dependencies.config.php') ->addRule(Database::class, ['instanceOf' => StaticDatabase::class, 'shared' => true]) - ->addRule(IHandleSessions::class, ['instanceOf' => Session\Type\Memory::class, 'shared' => true, 'call' => null]); + ->addRule(IHandleSessions::class, ['instanceOf' => Memory::class, 'shared' => true, 'call' => null]); DI::init($dice); $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); @@ -308,7 +309,7 @@ class StorageManagerTest extends DatabaseTest self::assertInstanceOf(SampleStorageBackend::class, $storageManager->getBackend()); - self::expectException(\Friendica\Core\Storage\Exception\StorageException::class); + self::expectException(StorageException::class); self::expectExceptionMessage('Cannot unregister Sample Storage, because it\'s currently active.'); $storageManager->unregister(SampleStorageBackend::class); diff --git a/tests/src/Core/Storage/StorageConfigTest.php b/tests/src/Core/Storage/StorageConfigTest.php index a01be343d..51beef640 100644 --- a/tests/src/Core/Storage/StorageConfigTest.php +++ b/tests/src/Core/Storage/StorageConfigTest.php @@ -26,10 +26,10 @@ use Friendica\Test\MockedTest; abstract class StorageConfigTest extends MockedTest { - /** @return \Friendica\Core\Storage\Capability\ICanConfigureStorage */ + /** @return ICanConfigureStorage */ abstract protected function getInstance(); - abstract protected function assertOption(\Friendica\Core\Storage\Capability\ICanConfigureStorage $storage); + abstract protected function assertOption(ICanConfigureStorage $storage); /** * Test if the "getOption" is asserted From 184f6cc255ff40e4db428bc256127403b03bd087 Mon Sep 17 00:00:00 2001 From: Philipp Date: Sat, 23 Oct 2021 12:22:27 +0200 Subject: [PATCH 15/19] Restructure Logger to new paradigm --- src/Core/Logger.php | 2 +- .../Exception/LoggerArgumentException.php | 13 ++++ src/Core/Logger/Exception/LoggerException.php | 13 ++++ .../Logger/Factory/Logger.php} | 68 +++++++++---------- .../Logger/Type}/AbstractLogger.php | 41 ++++++----- .../Logger/Type}/Monolog/DevelopHandler.php | 9 ++- .../Type}/Monolog/IntrospectionProcessor.php | 6 +- .../Logger/Type}/ProfilerLogger.php | 23 +++---- .../Logger => Core/Logger/Type}/README.md | 0 .../Logger/Type}/StreamLogger.php | 50 ++++++++++---- .../Logger/Type}/SyslogLogger.php | 47 +++++++------ .../Logger/Type}/VoidLogger.php | 2 +- .../Logger/Type}/WorkerLogger.php | 27 +++++--- src/DI.php | 2 +- src/Util/FileSystem.php | 4 +- static/dependencies.config.php | 4 +- .../AutomaticInstallationConsoleTest.php | 2 +- .../Factory/FriendSuggestTest.php | 2 +- .../Logger/AbstractLoggerTest.php | 2 +- .../{Util => Core}/Logger/LoggerDataTrait.php | 2 +- .../Logger/ProfilerLoggerTest.php | 4 +- .../Logger/StreamLoggerTest.php | 20 +++--- .../Logger/SyslogLoggerTest.php | 27 ++------ .../Logger/SyslogLoggerWrapper.php | 6 +- .../{Util => Core}/Logger/VoidLoggerTest.php | 4 +- .../Logger/WorkerLoggerTest.php | 4 +- .../ProfileField/Entity/ProfileFieldTest.php | 2 +- .../TwoFactor/Factory/TrustedBrowserTest.php | 2 +- 28 files changed, 219 insertions(+), 169 deletions(-) create mode 100644 src/Core/Logger/Exception/LoggerArgumentException.php create mode 100644 src/Core/Logger/Exception/LoggerException.php rename src/{Factory/LoggerFactory.php => Core/Logger/Factory/Logger.php} (81%) rename src/{Util/Logger => Core/Logger/Type}/AbstractLogger.php (77%) rename src/{Util/Logger => Core/Logger/Type}/Monolog/DevelopHandler.php (93%) rename src/{Util/Logger => Core/Logger/Type}/Monolog/IntrospectionProcessor.php (92%) rename src/{Util/Logger => Core/Logger/Type}/ProfilerLogger.php (82%) rename src/{Util/Logger => Core/Logger/Type}/README.md (100%) rename src/{Util/Logger => Core/Logger/Type}/StreamLogger.php (72%) rename src/{Util/Logger => Core/Logger/Type}/SyslogLogger.php (76%) rename src/{Util/Logger => Core/Logger/Type}/VoidLogger.php (98%) rename src/{Util/Logger => Core/Logger/Type}/WorkerLogger.php (84%) rename tests/src/{Util => Core}/Logger/AbstractLoggerTest.php (99%) rename tests/src/{Util => Core}/Logger/LoggerDataTrait.php (97%) rename tests/src/{Util => Core}/Logger/ProfilerLoggerTest.php (96%) rename tests/src/{Util => Core}/Logger/StreamLoggerTest.php (87%) rename tests/src/{Util => Core}/Logger/SyslogLoggerTest.php (72%) rename tests/src/{Util => Core}/Logger/SyslogLoggerWrapper.php (91%) rename tests/src/{Util => Core}/Logger/VoidLoggerTest.php (94%) rename tests/src/{Util => Core}/Logger/WorkerLoggerTest.php (97%) diff --git a/src/Core/Logger.php b/src/Core/Logger.php index 6dde142cc..4e2575d1b 100644 --- a/src/Core/Logger.php +++ b/src/Core/Logger.php @@ -22,7 +22,7 @@ namespace Friendica\Core; use Friendica\DI; -use Friendica\Util\Logger\WorkerLogger; +use Friendica\Core\Logger\Type\WorkerLogger; use Psr\Log\LoggerInterface; use Psr\Log\LogLevel; diff --git a/src/Core/Logger/Exception/LoggerArgumentException.php b/src/Core/Logger/Exception/LoggerArgumentException.php new file mode 100644 index 000000000..1b5f653f4 --- /dev/null +++ b/src/Core/Logger/Exception/LoggerArgumentException.php @@ -0,0 +1,13 @@ +get('system', 'debugging', false))) { $logger = new VoidLogger(); @@ -106,6 +106,7 @@ class LoggerFactory static::addStreamHandler($logger, $stream, $loglevel); } catch (\Throwable $e) { // No Logger .. + /// @todo isn't it possible to give the admin any hint about this wrong configuration? $logger = new VoidLogger(); } } @@ -116,6 +117,7 @@ class LoggerFactory $logger = new SyslogLogger($this->channel, $introspection, $loglevel); } catch (\Throwable $e) { // No logger ... + /// @todo isn't it possible to give the admin any hint about this wrong configuration? $logger = new VoidLogger(); } break; @@ -129,9 +131,11 @@ class LoggerFactory $logger = new StreamLogger($this->channel, $stream, $introspection, $fileSystem, $loglevel); } catch (\Throwable $t) { // No logger ... + /// @todo isn't it possible to give the admin any hint about this wrong configuration? $logger = new VoidLogger(); } } else { + /// @todo isn't it possible to give the admin any hint about this wrong configuration? $logger = new VoidLogger(); } break; @@ -161,8 +165,6 @@ class LoggerFactory * @param FileSystem $fileSystem FileSystem utils * * @return LoggerInterface The PSR-3 compliant logger instance - * - * @throws InternalServerErrorException * @throws \Exception */ public static function createDev(IManageConfigValues $config, Profiler $profiler, FileSystem $fileSystem) @@ -172,9 +174,8 @@ class LoggerFactory $developerIp = $config->get('system', 'dlogip'); if ((!isset($developerIp) || !$debugging) && - (!is_file($stream) || is_writable($stream))) { - $logger = new VoidLogger(); - return $logger; + (!is_file($stream) || is_writable($stream))) { + return new VoidLogger(); } $loggerTimeZone = new \DateTimeZone('UTC'); @@ -228,7 +229,7 @@ class LoggerFactory * * @return string the PSR-3 compliant level */ - private static function mapLegacyConfigDebugLevel($level) + private static function mapLegacyConfigDebugLevel(string $level): string { switch ($level) { // legacy WARNING @@ -263,9 +264,9 @@ class LoggerFactory * * @return void * - * @throws \Exception in case of general failures + * @throws LoggerException */ - public static function addStreamHandler($logger, $stream, $level = LogLevel::NOTICE) + public static function addStreamHandler(LoggerInterface $logger, $stream, string $level = LogLevel::NOTICE) { if ($logger instanceof Monolog\Logger) { $loglevel = Monolog\Logger::toMonologLevel($level); @@ -275,19 +276,16 @@ class LoggerFactory $loglevel = LogLevel::NOTICE; } - $fileHandler = new Monolog\Handler\StreamHandler($stream, $loglevel); + try { + $fileHandler = new Monolog\Handler\StreamHandler($stream, $loglevel); - $formatter = new Monolog\Formatter\LineFormatter("%datetime% %channel% [%level_name%]: %message% %context% %extra%\n"); - $fileHandler->setFormatter($formatter); + $formatter = new Monolog\Formatter\LineFormatter("%datetime% %channel% [%level_name%]: %message% %context% %extra%\n"); + $fileHandler->setFormatter($formatter); - $logger->pushHandler($fileHandler); - } - } - - public static function addVoidHandler($logger) - { - if ($logger instanceof Monolog\Logger) { - $logger->pushHandler(new Monolog\Handler\NullHandler()); + $logger->pushHandler($fileHandler); + } catch (\Exception $exception) { + throw new LoggerException('Cannot create Monolog Logger.', $exception); + } } } } diff --git a/src/Util/Logger/AbstractLogger.php b/src/Core/Logger/Type/AbstractLogger.php similarity index 77% rename from src/Util/Logger/AbstractLogger.php rename to src/Core/Logger/Type/AbstractLogger.php index a8aba34d3..0b6d9f38f 100644 --- a/src/Util/Logger/AbstractLogger.php +++ b/src/Core/Logger/Type/AbstractLogger.php @@ -19,8 +19,9 @@ * */ -namespace Friendica\Util\Logger; +namespace Friendica\Core\Logger\Type; +use Friendica\Core\Logger\Exception\LoggerException; use Friendica\Util\Introspection; use Friendica\Util\Strings; use Psr\Log\LoggerInterface; @@ -58,29 +59,35 @@ abstract class AbstractLogger implements LoggerInterface /** * Adds a new entry to the log * - * @param int $level + * @param mixed $level * @param string $message * @param array $context * * @return void */ - abstract protected function addEntry($level, $message, $context = []); + abstract protected function addEntry($level, string $message, array $context = []); /** * @param string $channel The output channel * @param Introspection $introspection The introspection of the current call * - * @throws \Exception + * @throws LoggerException */ - public function __construct($channel, Introspection $introspection) + public function __construct(string $channel, Introspection $introspection) { $this->channel = $channel; $this->introspection = $introspection; - $this->logUid = Strings::getRandomHex(6); + + try { + $this->logUid = Strings::getRandomHex(6); + } catch (\Exception $exception) { + throw new LoggerException('Cannot generate log Id', $exception); + } } /** * Simple interpolation of PSR-3 compliant replacements ( variables between '{' and '}' ) + * * @see https://www.php-fig.org/psr/psr-3/#12-message * * @param string $message @@ -88,7 +95,7 @@ abstract class AbstractLogger implements LoggerInterface * * @return string the interpolated message */ - protected function psrInterpolate($message, array $context = array()) + protected function psrInterpolate(string $message, array $context = []): string { $replace = []; foreach ($context as $key => $value) { @@ -104,7 +111,7 @@ abstract class AbstractLogger implements LoggerInterface } /** - * JSON Encodes an complete array including objects with "__toString()" methods + * JSON Encodes a complete array including objects with "__toString()" methods * * @param array $input an Input Array to encode * @@ -128,7 +135,7 @@ abstract class AbstractLogger implements LoggerInterface /** * {@inheritdoc} */ - public function emergency($message, array $context = array()) + public function emergency($message, array $context = []) { $this->addEntry(LogLevel::EMERGENCY, (string) $message, $context); } @@ -136,7 +143,7 @@ abstract class AbstractLogger implements LoggerInterface /** * {@inheritdoc} */ - public function alert($message, array $context = array()) + public function alert($message, array $context = []) { $this->addEntry(LogLevel::ALERT, (string) $message, $context); } @@ -144,7 +151,7 @@ abstract class AbstractLogger implements LoggerInterface /** * {@inheritdoc} */ - public function critical($message, array $context = array()) + public function critical($message, array $context = []) { $this->addEntry(LogLevel::CRITICAL, (string) $message, $context); } @@ -152,7 +159,7 @@ abstract class AbstractLogger implements LoggerInterface /** * {@inheritdoc} */ - public function error($message, array $context = array()) + public function error($message, array $context = []) { $this->addEntry(LogLevel::ERROR, (string) $message, $context); } @@ -160,7 +167,7 @@ abstract class AbstractLogger implements LoggerInterface /** * {@inheritdoc} */ - public function warning($message, array $context = array()) + public function warning($message, array $context = []) { $this->addEntry(LogLevel::WARNING, (string) $message, $context); } @@ -168,7 +175,7 @@ abstract class AbstractLogger implements LoggerInterface /** * {@inheritdoc} */ - public function notice($message, array $context = array()) + public function notice($message, array $context = []) { $this->addEntry(LogLevel::NOTICE, (string) $message, $context); } @@ -176,7 +183,7 @@ abstract class AbstractLogger implements LoggerInterface /** * {@inheritdoc} */ - public function info($message, array $context = array()) + public function info($message, array $context = []) { $this->addEntry(LogLevel::INFO, (string) $message, $context); } @@ -184,7 +191,7 @@ abstract class AbstractLogger implements LoggerInterface /** * {@inheritdoc} */ - public function debug($message, array $context = array()) + public function debug($message, array $context = []) { $this->addEntry(LogLevel::DEBUG, (string) $message, $context); } @@ -192,7 +199,7 @@ abstract class AbstractLogger implements LoggerInterface /** * {@inheritdoc} */ - public function log($level, $message, array $context = array()) + public function log($level, $message, array $context = []) { $this->addEntry($level, (string) $message, $context); } diff --git a/src/Util/Logger/Monolog/DevelopHandler.php b/src/Core/Logger/Type/Monolog/DevelopHandler.php similarity index 93% rename from src/Util/Logger/Monolog/DevelopHandler.php rename to src/Core/Logger/Type/Monolog/DevelopHandler.php index a55ac373a..5d2a84401 100644 --- a/src/Util/Logger/Monolog/DevelopHandler.php +++ b/src/Core/Logger/Type/Monolog/DevelopHandler.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Util\Logger\Monolog; +namespace Friendica\Core\Logger\Type\Monolog; use Monolog\Handler; use Monolog\Logger; @@ -42,7 +42,7 @@ class DevelopHandler extends Handler\AbstractHandler * @param int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not */ - public function __construct($developerIp, $level = Logger::DEBUG, $bubble = true) + public function __construct($developerIp, $level = Logger::DEBUG, bool $bubble = true) { parent::__construct($level, $bubble); @@ -52,15 +52,14 @@ class DevelopHandler extends Handler\AbstractHandler /** * {@inheritdoc} */ - public function handle(array $record) + public function handle(array $record): bool { if (!$this->isHandling($record)) { return false; } /// Just in case the remote IP is the same as the developer IP log the output - if (!is_null($this->developerIp) && $_SERVER['REMOTE_ADDR'] != $this->developerIp) - { + if (!is_null($this->developerIp) && $_SERVER['REMOTE_ADDR'] != $this->developerIp) { return false; } diff --git a/src/Util/Logger/Monolog/IntrospectionProcessor.php b/src/Core/Logger/Type/Monolog/IntrospectionProcessor.php similarity index 92% rename from src/Util/Logger/Monolog/IntrospectionProcessor.php rename to src/Core/Logger/Type/Monolog/IntrospectionProcessor.php index ceb0e3123..756331b22 100644 --- a/src/Util/Logger/Monolog/IntrospectionProcessor.php +++ b/src/Core/Logger/Type/Monolog/IntrospectionProcessor.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Util\Logger\Monolog; +namespace Friendica\Core\Logger\Type\Monolog; use Friendica\Util\Introspection; use Monolog\Logger; @@ -41,11 +41,11 @@ class IntrospectionProcessor implements ProcessorInterface public function __construct(Introspection $introspection, $level = Logger::DEBUG) { $this->level = Logger::toMonologLevel($level); - $introspection->addClasses(array('Monolog\\')); + $introspection->addClasses(['Monolog\\']); $this->introspection = $introspection; } - public function __invoke(array $record) + public function __invoke(array $record): array { // return if the level is not high enough if ($record['level'] < $this->level) { diff --git a/src/Util/Logger/ProfilerLogger.php b/src/Core/Logger/Type/ProfilerLogger.php similarity index 82% rename from src/Util/Logger/ProfilerLogger.php rename to src/Core/Logger/Type/ProfilerLogger.php index 1c190d4f5..2333dd540 100644 --- a/src/Util/Logger/ProfilerLogger.php +++ b/src/Core/Logger/Type/ProfilerLogger.php @@ -19,9 +19,8 @@ * */ -namespace Friendica\Util\Logger; +namespace Friendica\Core\Logger\Type; -use Friendica\Core\System; use Friendica\Util\Profiler; use Psr\Log\LoggerInterface; @@ -50,14 +49,14 @@ class ProfilerLogger implements LoggerInterface */ public function __construct(LoggerInterface $logger, Profiler $profiler) { - $this->logger = $logger; + $this->logger = $logger; $this->profiler = $profiler; } /** * {@inheritdoc} */ - public function emergency($message, array $context = array()) + public function emergency($message, array $context = []) { $this->profiler->startRecording('file'); $this->logger->emergency($message, $context); @@ -67,7 +66,7 @@ class ProfilerLogger implements LoggerInterface /** * {@inheritdoc} */ - public function alert($message, array $context = array()) + public function alert($message, array $context = []) { $this->profiler->startRecording('file'); $this->logger->alert($message, $context); @@ -77,7 +76,7 @@ class ProfilerLogger implements LoggerInterface /** * {@inheritdoc} */ - public function critical($message, array $context = array()) + public function critical($message, array $context = []) { $this->profiler->startRecording('file'); $this->logger->critical($message, $context); @@ -87,7 +86,7 @@ class ProfilerLogger implements LoggerInterface /** * {@inheritdoc} */ - public function error($message, array $context = array()) + public function error($message, array $context = []) { $this->profiler->startRecording('file'); $this->logger->error($message, $context); @@ -97,7 +96,7 @@ class ProfilerLogger implements LoggerInterface /** * {@inheritdoc} */ - public function warning($message, array $context = array()) + public function warning($message, array $context = []) { $this->profiler->startRecording('file'); $this->logger->warning($message, $context); @@ -107,7 +106,7 @@ class ProfilerLogger implements LoggerInterface /** * {@inheritdoc} */ - public function notice($message, array $context = array()) + public function notice($message, array $context = []) { $this->profiler->startRecording('file'); $this->logger->notice($message, $context); @@ -117,7 +116,7 @@ class ProfilerLogger implements LoggerInterface /** * {@inheritdoc} */ - public function info($message, array $context = array()) + public function info($message, array $context = []) { $this->profiler->startRecording('file'); $this->logger->info($message, $context); @@ -127,7 +126,7 @@ class ProfilerLogger implements LoggerInterface /** * {@inheritdoc} */ - public function debug($message, array $context = array()) + public function debug($message, array $context = []) { $this->profiler->startRecording('file'); $this->logger->debug($message, $context); @@ -137,7 +136,7 @@ class ProfilerLogger implements LoggerInterface /** * {@inheritdoc} */ - public function log($level, $message, array $context = array()) + public function log($level, $message, array $context = []) { $this->profiler->startRecording('file'); $this->logger->log($level, $message, $context); diff --git a/src/Util/Logger/README.md b/src/Core/Logger/Type/README.md similarity index 100% rename from src/Util/Logger/README.md rename to src/Core/Logger/Type/README.md diff --git a/src/Util/Logger/StreamLogger.php b/src/Core/Logger/Type/StreamLogger.php similarity index 72% rename from src/Util/Logger/StreamLogger.php rename to src/Core/Logger/Type/StreamLogger.php index 752f48658..be0283d0e 100644 --- a/src/Util/Logger/StreamLogger.php +++ b/src/Core/Logger/Type/StreamLogger.php @@ -19,8 +19,10 @@ * */ -namespace Friendica\Util\Logger; +namespace Friendica\Core\Logger\Type; +use Friendica\Core\Logger\Exception\LoggerArgumentException; +use Friendica\Core\Logger\Exception\LoggerException; use Friendica\Util\DateTimeFormat; use Friendica\Util\FileSystem; use Friendica\Util\Introspection; @@ -80,9 +82,9 @@ class StreamLogger extends AbstractLogger * @param string|resource $stream The stream to write with this logger (either a file or a stream, i.e. stdout) * @param string $level The minimum loglevel at which this logger will be triggered * - * @throws \Exception + * @throws LoggerArgumentException */ - public function __construct($channel, $stream, Introspection $introspection, FileSystem $fileSystem, $level = LogLevel::DEBUG) + public function __construct($channel, $stream, Introspection $introspection, FileSystem $fileSystem, string $level = LogLevel::DEBUG) { $this->fileSystem = $fileSystem; @@ -93,14 +95,14 @@ class StreamLogger extends AbstractLogger } elseif (is_string($stream)) { $this->url = $stream; } else { - throw new \InvalidArgumentException('A stream must either be a resource or a string.'); + throw new LoggerArgumentException('A stream must either be a resource or a string.'); } $this->pid = getmypid(); if (array_key_exists($level, $this->levelToInt)) { $this->logLevel = $this->levelToInt[$level]; } else { - throw new \InvalidArgumentException(sprintf('The level "%s" is not valid.', $level)); + throw new LoggerArgumentException(sprintf('The level "%s" is not valid.', $level)); } $this->checkStream(); @@ -118,16 +120,19 @@ class StreamLogger extends AbstractLogger /** * Adds a new entry to the log * - * @param int $level + * @param mixed $level * @param string $message - * @param array $context + * @param array $context * * @return void + * + * @throws LoggerException + * @throws LoggerArgumentException */ - protected function addEntry($level, $message, $context = []) + protected function addEntry($level, string $message, array $context = []) { if (!array_key_exists($level, $this->levelToInt)) { - throw new \InvalidArgumentException(sprintf('The level "%s" is not valid.', $level)); + throw new LoggerArgumentException(sprintf('The level "%s" is not valid.', $level)); } $logLevel = $this->levelToInt[$level]; @@ -145,19 +150,24 @@ class StreamLogger extends AbstractLogger /** * Formats a log record for the syslog output * - * @param int $level The loglevel/priority + * @param mixed $level The loglevel/priority * @param string $message The message * @param array $context The context of this call * * @return string the formatted syslog output + * + * @throws LoggerException */ - private function formatLog($level, $message, $context = []) + private function formatLog($level, string $message, array $context = []): string { $record = $this->introspection->getRecord(); $record = array_merge($record, ['uid' => $this->logUid, 'process_id' => $this->pid]); - $logMessage = ''; - $logMessage .= DateTimeFormat::utcNow(DateTimeFormat::ATOM) . ' '; + try { + $logMessage = DateTimeFormat::utcNow(DateTimeFormat::ATOM) . ' '; + } catch (\Exception $exception) { + throw new LoggerException('Cannot get current datetime.', $exception); + } $logMessage .= $this->channel . ' '; $logMessage .= '[' . strtoupper($level) . ']: '; $logMessage .= $this->psrInterpolate($message, $context) . ' '; @@ -168,6 +178,12 @@ class StreamLogger extends AbstractLogger return $logMessage; } + /** + * Checks the current stream + * + * @throws LoggerException + * @throws LoggerArgumentException + */ private function checkStream() { if (is_resource($this->stream)) { @@ -175,9 +191,13 @@ class StreamLogger extends AbstractLogger } if (empty($this->url)) { - throw new \LogicException('Missing stream URL.'); + throw new LoggerArgumentException('Missing stream URL.'); } - $this->stream = $this->fileSystem->createStream($this->url); + try { + $this->stream = $this->fileSystem->createStream($this->url); + } catch (\UnexpectedValueException $exception) { + throw new LoggerException('Cannot create stream.', $exception); + } } } diff --git a/src/Util/Logger/SyslogLogger.php b/src/Core/Logger/Type/SyslogLogger.php similarity index 76% rename from src/Util/Logger/SyslogLogger.php rename to src/Core/Logger/Type/SyslogLogger.php index f33e2d624..667b44ccc 100644 --- a/src/Util/Logger/SyslogLogger.php +++ b/src/Core/Logger/Type/SyslogLogger.php @@ -19,10 +19,12 @@ * */ -namespace Friendica\Util\Logger; +namespace Friendica\Core\Logger\Type; -use Friendica\Network\HTTPException\InternalServerErrorException; +use Friendica\Core\Logger\Exception\LoggerArgumentException; +use Friendica\Core\Logger\Exception\LoggerException; use Friendica\Util\Introspection; +use Psr\Log\InvalidArgumentException; use Psr\Log\LogLevel; /** @@ -97,27 +99,28 @@ class SyslogLogger extends AbstractLogger * @param int $logOpts Indicates what logging options will be used when generating a log message * @param int $logFacility Used to specify what type of program is logging the message * - * @throws \Exception + * @throws LoggerArgumentException */ - public function __construct($channel, Introspection $introspection, $level = LogLevel::NOTICE, $logOpts = LOG_PID, $logFacility = LOG_USER) + public function __construct($channel, Introspection $introspection, string $level = LogLevel::NOTICE, int $logOpts = LOG_PID, int $logFacility = LOG_USER) { parent::__construct($channel, $introspection); - $this->logOpts = $logOpts; + $this->logOpts = $logOpts; $this->logFacility = $logFacility; - $this->logLevel = $this->mapLevelToPriority($level); - $this->introspection->addClasses(array(self::class)); + $this->logLevel = $this->mapLevelToPriority($level); + $this->introspection->addClasses([self::class]); } /** * Adds a new entry to the syslog * - * @param int $level + * @param mixed $level * @param string $message * @param array $context * - * @throws InternalServerErrorException if the syslog isn't available + * @throws LoggerArgumentException in case the level isn't valid + * @throws LoggerException In case the syslog cannot be opened for writing */ - protected function addEntry($level, $message, $context = []) + protected function addEntry($level, string $message, array $context = []) { $logLevel = $this->mapLevelToPriority($level); @@ -136,12 +139,12 @@ class SyslogLogger extends AbstractLogger * * @return int The SysLog priority * - * @throws \Psr\Log\InvalidArgumentException If the loglevel isn't valid + * @throws LoggerArgumentException If the loglevel isn't valid */ - public function mapLevelToPriority($level) + public function mapLevelToPriority(string $level): int { if (!array_key_exists($level, $this->logLevels)) { - throw new \InvalidArgumentException(sprintf('The level "%s" is not valid.', $level)); + throw new LoggerArgumentException(sprintf('The level "%s" is not valid.', $level)); } return $this->logLevels[$level]; @@ -157,21 +160,22 @@ class SyslogLogger extends AbstractLogger /** * Writes a message to the syslog + * * @see http://php.net/manual/en/function.syslog.php#refsect1-function.syslog-parameters * * @param int $priority The Priority * @param string $message The message of the log * - * @throws InternalServerErrorException if syslog cannot be used + * @throws LoggerException In case the syslog cannot be opened/written */ - private function write($priority, $message) + private function write(int $priority, string $message) { set_error_handler([$this, 'customErrorHandler']); $opened = openlog(self::IDENT, $this->logOpts, $this->logFacility); restore_error_handler(); if (!$opened) { - throw new \UnexpectedValueException(sprintf('Can\'t open syslog for ident "%s" and facility "%s": ' . $this->errorMessage, $this->channel, $this->logFacility)); + throw new LoggerException(sprintf('Can\'t open syslog for ident "%s" and facility "%s": ' . $this->errorMessage, $this->channel, $this->logFacility)); } $this->syslogWrapper($priority, $message); @@ -186,13 +190,12 @@ class SyslogLogger extends AbstractLogger * * @return string the formatted syslog output */ - private function formatLog($level, $message, $context = []) + private function formatLog(int $level, string $message, array $context = []): string { $record = $this->introspection->getRecord(); $record = array_merge($record, ['uid' => $this->logUid]); - $logMessage = ''; - $logMessage .= $this->channel . ' '; + $logMessage = $this->channel . ' '; $logMessage .= '[' . $this->logToString[$level] . ']: '; $logMessage .= $this->psrInterpolate($message, $context) . ' '; $logMessage .= $this->jsonEncodeArray($context) . ' - '; @@ -211,15 +214,17 @@ class SyslogLogger extends AbstractLogger * * @param int $level The syslog priority * @param string $entry The message to send to the syslog function + * + * @throws LoggerException */ - protected function syslogWrapper($level, $entry) + protected function syslogWrapper(int $level, string $entry) { set_error_handler([$this, 'customErrorHandler']); $written = syslog($level, $entry); restore_error_handler(); if (!$written) { - throw new \UnexpectedValueException(sprintf('Can\'t write into syslog for ident "%s" and facility "%s": ' . $this->errorMessage, $this->channel, $this->logFacility)); + throw new LoggerException(sprintf('Can\'t write into syslog for ident "%s" and facility "%s": ' . $this->errorMessage, $this->channel, $this->logFacility)); } } } diff --git a/src/Util/Logger/VoidLogger.php b/src/Core/Logger/Type/VoidLogger.php similarity index 98% rename from src/Util/Logger/VoidLogger.php rename to src/Core/Logger/Type/VoidLogger.php index 6c47601a0..5cd2cac86 100644 --- a/src/Util/Logger/VoidLogger.php +++ b/src/Core/Logger/Type/VoidLogger.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Util\Logger; +namespace Friendica\Core\Logger\Type; use Psr\Log\LoggerInterface; diff --git a/src/Util/Logger/WorkerLogger.php b/src/Core/Logger/Type/WorkerLogger.php similarity index 84% rename from src/Util/Logger/WorkerLogger.php rename to src/Core/Logger/Type/WorkerLogger.php index fdda6c9b5..fcbe12801 100644 --- a/src/Util/Logger/WorkerLogger.php +++ b/src/Core/Logger/Type/WorkerLogger.php @@ -19,13 +19,14 @@ * */ -namespace Friendica\Util\Logger; +namespace Friendica\Core\Logger\Type; +use Friendica\Core\Logger\Exception\LoggerException; use Friendica\Util\Strings; use Psr\Log\LoggerInterface; /** - * A Logger for specific worker tasks, which adds an additional woker-id to it. + * A Logger for specific worker tasks, which adds a worker id to it. * Uses the decorator pattern (https://en.wikipedia.org/wiki/Decorator_pattern) */ class WorkerLogger implements LoggerInterface @@ -46,15 +47,21 @@ class WorkerLogger implements LoggerInterface private $functionName; /** - * @param LoggerInterface $logger The logger for worker entries - * @param string $functionName The current function name of the worker - * @param int $idLength The length of the generated worker ID + * @param LoggerInterface $logger The logger for worker entries + * @param string $functionName The current function name of the worker + * @param int $idLength The length of the generated worker ID + * + * @throws LoggerException */ - public function __construct(LoggerInterface $logger, $functionName = '', $idLength = 7) + public function __construct(LoggerInterface $logger, string $functionName = '', int $idLength = 7) { - $this->logger = $logger; + $this->logger = $logger; $this->functionName = $functionName; - $this->workerId = Strings::getRandomHex($idLength); + try { + $this->workerId = Strings::getRandomHex($idLength); + } catch (\Exception $exception) { + throw new LoggerException('Cannot generate random Hex.', $exception); + } } /** @@ -74,7 +81,7 @@ class WorkerLogger implements LoggerInterface */ private function addContext(array &$context) { - $context['worker_id'] = $this->workerId; + $context['worker_id'] = $this->workerId; $context['worker_cmd'] = $this->functionName; } @@ -83,7 +90,7 @@ class WorkerLogger implements LoggerInterface * * @return string */ - public function getWorkerId() + public function getWorkerId(): string { return $this->workerId; } diff --git a/src/DI.php b/src/DI.php index 5ba7e88db..8ee700440 100644 --- a/src/DI.php +++ b/src/DI.php @@ -243,7 +243,7 @@ abstract class DI */ public static function workerLogger() { - return self::$dice->create(Util\Logger\WorkerLogger::class); + return self::$dice->create(Core\Logger\Type\WorkerLogger::class); } // diff --git a/src/Util/FileSystem.php b/src/Util/FileSystem.php index 4fa5c31c8..1a86f43be 100644 --- a/src/Util/FileSystem.php +++ b/src/Util/FileSystem.php @@ -73,7 +73,9 @@ class FileSystem * * @param string $url The file/url * - * @return false|resource the open stream ressource + * @return resource the open stream rssource + * + * @throws \UnexpectedValueException */ public function createStream(string $url) { diff --git a/static/dependencies.config.php b/static/dependencies.config.php index bbf8c5599..042949e60 100644 --- a/static/dependencies.config.php +++ b/static/dependencies.config.php @@ -141,7 +141,7 @@ return [ * and is automatically passed as an argument with the same name */ LoggerInterface::class => [ - 'instanceOf' => Factory\LoggerFactory::class, + 'instanceOf' => \Friendica\Core\Logger\Factory\Logger::class, 'constructParams' => [ 'index', ], @@ -150,7 +150,7 @@ return [ ], ], '$devLogger' => [ - 'instanceOf' => Factory\LoggerFactory::class, + 'instanceOf' => \Friendica\Core\Logger\Factory\Logger::class, 'constructParams' => [ 'dev', ], diff --git a/tests/src/Console/AutomaticInstallationConsoleTest.php b/tests/src/Console/AutomaticInstallationConsoleTest.php index 760a732d6..3f4f8c03c 100644 --- a/tests/src/Console/AutomaticInstallationConsoleTest.php +++ b/tests/src/Console/AutomaticInstallationConsoleTest.php @@ -32,7 +32,7 @@ use Friendica\Database\Database; use Friendica\DI; use Friendica\Test\Util\RendererMockTrait; use Friendica\Test\Util\VFSTrait; -use Friendica\Util\Logger\VoidLogger; +use Friendica\Core\Logger\Type\VoidLogger; use Mockery; use Mockery\MockInterface; use org\bovigo\vfs\vfsStream; diff --git a/tests/src/Contact/FriendSuggest/Factory/FriendSuggestTest.php b/tests/src/Contact/FriendSuggest/Factory/FriendSuggestTest.php index afa0711ae..969107316 100644 --- a/tests/src/Contact/FriendSuggest/Factory/FriendSuggestTest.php +++ b/tests/src/Contact/FriendSuggest/Factory/FriendSuggestTest.php @@ -5,7 +5,7 @@ namespace Friendica\Test\src\Contact\FriendSuggest\Factory; use Friendica\Contact\FriendSuggest\Factory\FriendSuggest; use Friendica\Contact\FriendSuggest\Entity; use Friendica\Test\MockedTest; -use Friendica\Util\Logger\VoidLogger; +use Friendica\Core\Logger\Type\VoidLogger; class FriendSuggestTest extends MockedTest { diff --git a/tests/src/Util/Logger/AbstractLoggerTest.php b/tests/src/Core/Logger/AbstractLoggerTest.php similarity index 99% rename from tests/src/Util/Logger/AbstractLoggerTest.php rename to tests/src/Core/Logger/AbstractLoggerTest.php index d008f4dc4..f1a055310 100644 --- a/tests/src/Util/Logger/AbstractLoggerTest.php +++ b/tests/src/Core/Logger/AbstractLoggerTest.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Test\src\Util\Logger; +namespace Friendica\Test\src\Core\Logger; use Friendica\Test\MockedTest; use Friendica\Util\Introspection; diff --git a/tests/src/Util/Logger/LoggerDataTrait.php b/tests/src/Core/Logger/LoggerDataTrait.php similarity index 97% rename from tests/src/Util/Logger/LoggerDataTrait.php rename to tests/src/Core/Logger/LoggerDataTrait.php index 0bebe7d2c..0d6b004cf 100644 --- a/tests/src/Util/Logger/LoggerDataTrait.php +++ b/tests/src/Core/Logger/LoggerDataTrait.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Test\src\Util\Logger; +namespace Friendica\Test\src\Core\Logger; trait LoggerDataTrait { diff --git a/tests/src/Util/Logger/ProfilerLoggerTest.php b/tests/src/Core/Logger/ProfilerLoggerTest.php similarity index 96% rename from tests/src/Util/Logger/ProfilerLoggerTest.php rename to tests/src/Core/Logger/ProfilerLoggerTest.php index 7b6244614..3b8e7711f 100644 --- a/tests/src/Util/Logger/ProfilerLoggerTest.php +++ b/tests/src/Core/Logger/ProfilerLoggerTest.php @@ -19,10 +19,10 @@ * */ -namespace Friendica\Test\src\Util\Logger; +namespace Friendica\Test\src\Core\Logger; use Friendica\Test\MockedTest; -use Friendica\Util\Logger\ProfilerLogger; +use Friendica\Core\Logger\Type\ProfilerLogger; use Friendica\Util\Profiler; use Mockery\MockInterface; use Psr\Log\LoggerInterface; diff --git a/tests/src/Util/Logger/StreamLoggerTest.php b/tests/src/Core/Logger/StreamLoggerTest.php similarity index 87% rename from tests/src/Util/Logger/StreamLoggerTest.php rename to tests/src/Core/Logger/StreamLoggerTest.php index 8599e08f4..65ef76ea3 100644 --- a/tests/src/Util/Logger/StreamLoggerTest.php +++ b/tests/src/Core/Logger/StreamLoggerTest.php @@ -19,11 +19,13 @@ * */ -namespace Friendica\Test\src\Util\Logger; +namespace Friendica\Test\src\Core\Logger; +use Friendica\Core\Logger\Exception\LoggerArgumentException; +use Friendica\Core\Logger\Exception\LoggerException; use Friendica\Util\FileSystem; use Friendica\Test\Util\VFSTrait; -use Friendica\Util\Logger\StreamLogger; +use Friendica\Core\Logger\Type\StreamLogger; use org\bovigo\vfs\vfsStream; use org\bovigo\vfs\vfsStreamFile; use Psr\Log\LogLevel; @@ -82,7 +84,7 @@ class StreamLoggerTest extends AbstractLoggerTest $filehandler = fopen($logfile->url(), 'ab'); - $logger = new StreamLogger('test', $filehandler, $this->introspection, $this->fileSystem); + $logger = new \Friendica\Core\Logger\Type\StreamLogger('test', $filehandler, $this->introspection, $this->fileSystem); $logger->emergency('working'); $text = $logfile->getContent(); @@ -114,7 +116,7 @@ class StreamLoggerTest extends AbstractLoggerTest */ public function testNoUrl() { - $this->expectException(\LogicException::class); + $this->expectException(LoggerArgumentException::class); $this->expectExceptionMessage("Missing stream URL."); $logger = new StreamLogger('test', '', $this->introspection, $this->fileSystem); @@ -127,8 +129,8 @@ class StreamLoggerTest extends AbstractLoggerTest */ public function testWrongUrl() { - $this->expectException(\UnexpectedValueException::class); - $this->expectExceptionMessageMatches("/The stream or file .* could not be opened: .* /"); + $this->expectException(LoggerException::class); + $this->expectExceptionMessage("Cannot create stream."); $logfile = vfsStream::newFile('friendica.log') ->at($this->root)->chmod(0); @@ -158,7 +160,7 @@ class StreamLoggerTest extends AbstractLoggerTest */ public function testWrongMinimumLevel() { - $this->expectException(\InvalidArgumentException::class); + $this->expectException(LoggerArgumentException::class); $this->expectExceptionMessageMatches("/The level \".*\" is not valid./"); $logger = new StreamLogger('test', 'file.text', $this->introspection, $this->fileSystem, 'NOPE'); @@ -169,7 +171,7 @@ class StreamLoggerTest extends AbstractLoggerTest */ public function testWrongLogLevel() { - $this->expectException(\InvalidArgumentException::class); + $this->expectException(LoggerArgumentException::class); $this->expectExceptionMessageMatches("/The level \".*\" is not valid./"); $logfile = vfsStream::newFile('friendica.log') @@ -185,7 +187,7 @@ class StreamLoggerTest extends AbstractLoggerTest */ public function testWrongFile() { - $this->expectException(\InvalidArgumentException::class); + $this->expectException(LoggerArgumentException::class); $this->expectExceptionMessage("A stream must either be a resource or a string."); $logger = new StreamLogger('test', null, $this->introspection, $this->fileSystem); diff --git a/tests/src/Util/Logger/SyslogLoggerTest.php b/tests/src/Core/Logger/SyslogLoggerTest.php similarity index 72% rename from tests/src/Util/Logger/SyslogLoggerTest.php rename to tests/src/Core/Logger/SyslogLoggerTest.php index e93e43dd5..8ba2ebc08 100644 --- a/tests/src/Util/Logger/SyslogLoggerTest.php +++ b/tests/src/Core/Logger/SyslogLoggerTest.php @@ -19,9 +19,11 @@ * */ -namespace Friendica\Test\src\Util\Logger; +namespace Friendica\Test\src\Core\Logger; -use Friendica\Util\Logger\SyslogLogger; +use Friendica\Core\Logger\Exception\LoggerArgumentException; +use Friendica\Core\Logger\Exception\LoggerException; +use Friendica\Core\Logger\Type\SyslogLogger; use Psr\Log\LogLevel; class SyslogLoggerTest extends AbstractLoggerTest @@ -62,7 +64,7 @@ class SyslogLoggerTest extends AbstractLoggerTest */ public function testWrongMinimumLevel() { - $this->expectException(\InvalidArgumentException::class); + $this->expectException(LoggerArgumentException::class); $this->expectExceptionMessageMatches("/The level \".*\" is not valid./"); $logger = new SyslogLoggerWrapper('test', $this->introspection, 'NOPE'); @@ -73,7 +75,7 @@ class SyslogLoggerTest extends AbstractLoggerTest */ public function testWrongLogLevel() { - $this->expectException(\InvalidArgumentException::class); + $this->expectException(LoggerArgumentException::class); $this->expectExceptionMessageMatches("/The level \".*\" is not valid./"); $logger = new SyslogLoggerWrapper('test', $this->introspection); @@ -81,23 +83,6 @@ class SyslogLoggerTest extends AbstractLoggerTest $logger->log('NOPE', 'a test'); } - /** - * Test when the logfacility is wrong (string) - */ - public function testServerException() - { - if (PHP_MAJOR_VERSION < 8) { - $this->expectException(\UnexpectedValueException::class); - $this->expectExceptionMessageMatches("/Can\'t open syslog for ident \".*\" and facility \".*\": .* /"); - } else { - $this->expectException(\TypeError::class); - $this->expectExceptionMessage("openlog(): Argument #3 (\$facility) must be of type int, string given"); - } - - $logger = new SyslogLoggerWrapper('test', $this->introspection, LogLevel::DEBUG, null, 'a string'); - $logger->emergency('not working'); - } - /** * Test the close() method * @doesNotPerformAssertions diff --git a/tests/src/Util/Logger/SyslogLoggerWrapper.php b/tests/src/Core/Logger/SyslogLoggerWrapper.php similarity index 91% rename from tests/src/Util/Logger/SyslogLoggerWrapper.php rename to tests/src/Core/Logger/SyslogLoggerWrapper.php index 710899cc2..05dcbd6bc 100644 --- a/tests/src/Util/Logger/SyslogLoggerWrapper.php +++ b/tests/src/Core/Logger/SyslogLoggerWrapper.php @@ -19,10 +19,10 @@ * */ -namespace Friendica\Test\src\Util\Logger; +namespace Friendica\Test\src\Core\Logger; +use Friendica\Core\Logger\Type\SyslogLogger; use Friendica\Util\Introspection; -use Friendica\Util\Logger\SyslogLogger; use Psr\Log\LogLevel; /** @@ -53,7 +53,7 @@ class SyslogLoggerWrapper extends SyslogLogger * {@inheritdoc} * @noinspection PhpMissingParentCallCommonInspection */ - protected function syslogWrapper($level, $entry) + protected function syslogWrapper(int $level, string $entry) { $this->content .= $entry . PHP_EOL; } diff --git a/tests/src/Util/Logger/VoidLoggerTest.php b/tests/src/Core/Logger/VoidLoggerTest.php similarity index 94% rename from tests/src/Util/Logger/VoidLoggerTest.php rename to tests/src/Core/Logger/VoidLoggerTest.php index 75b2d1a8b..a2134ce71 100644 --- a/tests/src/Util/Logger/VoidLoggerTest.php +++ b/tests/src/Core/Logger/VoidLoggerTest.php @@ -19,10 +19,10 @@ * */ -namespace Friendica\Test\src\Util\Logger; +namespace Friendica\Test\src\Core\Logger; use Friendica\Test\MockedTest; -use Friendica\Util\Logger\VoidLogger; +use Friendica\Core\Logger\Type\VoidLogger; use Psr\Log\LogLevel; class VoidLoggerTest extends MockedTest diff --git a/tests/src/Util/Logger/WorkerLoggerTest.php b/tests/src/Core/Logger/WorkerLoggerTest.php similarity index 97% rename from tests/src/Util/Logger/WorkerLoggerTest.php rename to tests/src/Core/Logger/WorkerLoggerTest.php index 06fae3c38..0f751f2e4 100644 --- a/tests/src/Util/Logger/WorkerLoggerTest.php +++ b/tests/src/Core/Logger/WorkerLoggerTest.php @@ -19,10 +19,10 @@ * */ -namespace Friendica\Test\src\Util\Logger; +namespace Friendica\Test\src\Core\Logger; +use Friendica\Core\Logger\Type\WorkerLogger; use Friendica\Test\MockedTest; -use Friendica\Util\Logger\WorkerLogger; use Psr\Log\LoggerInterface; class WorkerLoggerTest extends MockedTest diff --git a/tests/src/Profile/ProfileField/Entity/ProfileFieldTest.php b/tests/src/Profile/ProfileField/Entity/ProfileFieldTest.php index 275a1d597..6e054428d 100644 --- a/tests/src/Profile/ProfileField/Entity/ProfileFieldTest.php +++ b/tests/src/Profile/ProfileField/Entity/ProfileFieldTest.php @@ -11,7 +11,7 @@ use Friendica\Security\PermissionSet\Factory\PermissionSet as PermissionSetFacto use Friendica\Test\MockedTest; use Friendica\Util\ACLFormatter; use Friendica\Util\DateTimeFormat; -use Friendica\Util\Logger\VoidLogger; +use Friendica\Core\Logger\Type\VoidLogger; use Mockery\MockInterface; class ProfileFieldTest extends MockedTest diff --git a/tests/src/Security/TwoFactor/Factory/TrustedBrowserTest.php b/tests/src/Security/TwoFactor/Factory/TrustedBrowserTest.php index 0a093db5a..e27445d32 100644 --- a/tests/src/Security/TwoFactor/Factory/TrustedBrowserTest.php +++ b/tests/src/Security/TwoFactor/Factory/TrustedBrowserTest.php @@ -5,7 +5,7 @@ namespace Friendica\Test\src\Security\TwoFactor\Factory; use Friendica\Security\TwoFactor\Factory\TrustedBrowser; use Friendica\Test\MockedTest; use Friendica\Util\DateTimeFormat; -use Friendica\Util\Logger\VoidLogger; +use Friendica\Core\Logger\Type\VoidLogger; use Friendica\Util\Strings; class TrustedBrowserTest extends MockedTest From fa55928ea3978e96bf1cc21f3759f5607f3ef503 Mon Sep 17 00:00:00 2001 From: Philipp Date: Sat, 23 Oct 2021 12:26:06 +0200 Subject: [PATCH 16/19] Replace own VoidLogger with PSR-Standard NullLogger() --- src/Core/Logger/Factory/Logger.php | 14 +- src/Core/Logger/Type/VoidLogger.php | 159 ------------------ .../AutomaticInstallationConsoleTest.php | 4 +- .../Factory/FriendSuggestTest.php | 8 +- tests/src/Core/Logger/VoidLoggerTest.php | 52 ------ .../ProfileField/Entity/ProfileFieldTest.php | 6 +- .../TwoFactor/Factory/TrustedBrowserTest.php | 8 +- 7 files changed, 20 insertions(+), 231 deletions(-) delete mode 100644 src/Core/Logger/Type/VoidLogger.php delete mode 100644 tests/src/Core/Logger/VoidLoggerTest.php diff --git a/src/Core/Logger/Factory/Logger.php b/src/Core/Logger/Factory/Logger.php index 4ca4f050a..204835ffd 100644 --- a/src/Core/Logger/Factory/Logger.php +++ b/src/Core/Logger/Factory/Logger.php @@ -32,11 +32,11 @@ use Friendica\Core\Logger\Type\Monolog\IntrospectionProcessor; use Friendica\Core\Logger\Type\ProfilerLogger; use Friendica\Core\Logger\Type\StreamLogger; use Friendica\Core\Logger\Type\SyslogLogger; -use Friendica\Core\Logger\Type\VoidLogger; use Friendica\Util\Profiler; use Monolog; use Psr\Log\LoggerInterface; use Psr\Log\LogLevel; +use Psr\Log\NullLogger; /** * A logger factory @@ -78,7 +78,7 @@ class Logger public function create(Database $database, IManageConfigValues $config, Profiler $profiler, FileSystem $fileSystem): LoggerInterface { if (empty($config->get('system', 'debugging', false))) { - $logger = new VoidLogger(); + $logger = new NullLogger(); $database->setLogger($logger); return $logger; } @@ -107,7 +107,7 @@ class Logger } catch (\Throwable $e) { // No Logger .. /// @todo isn't it possible to give the admin any hint about this wrong configuration? - $logger = new VoidLogger(); + $logger = new NullLogger(); } } break; @@ -118,7 +118,7 @@ class Logger } catch (\Throwable $e) { // No logger ... /// @todo isn't it possible to give the admin any hint about this wrong configuration? - $logger = new VoidLogger(); + $logger = new NullLogger(); } break; @@ -132,11 +132,11 @@ class Logger } catch (\Throwable $t) { // No logger ... /// @todo isn't it possible to give the admin any hint about this wrong configuration? - $logger = new VoidLogger(); + $logger = new NullLogger(); } } else { /// @todo isn't it possible to give the admin any hint about this wrong configuration? - $logger = new VoidLogger(); + $logger = new NullLogger(); } break; } @@ -175,7 +175,7 @@ class Logger if ((!isset($developerIp) || !$debugging) && (!is_file($stream) || is_writable($stream))) { - return new VoidLogger(); + return new NullLogger(); } $loggerTimeZone = new \DateTimeZone('UTC'); diff --git a/src/Core/Logger/Type/VoidLogger.php b/src/Core/Logger/Type/VoidLogger.php deleted file mode 100644 index 5cd2cac86..000000000 --- a/src/Core/Logger/Type/VoidLogger.php +++ /dev/null @@ -1,159 +0,0 @@ -. - * - */ - -namespace Friendica\Core\Logger\Type; - -use Psr\Log\LoggerInterface; - -/** - * A Logger instance to not log - */ -class VoidLogger implements LoggerInterface -{ - /** - * System is unusable. - * - * @param string $message - * @param array $context - * - * @return void - */ - public function emergency($message, array $context = array()) - { - return; - } - - /** - * Action must be taken immediately. - * - * Example: Entire website down, database unavailable, etc. This should - * trigger the SMS alerts and wake you up. - * - * @param string $message - * @param array $context - * - * @return void - */ - public function alert($message, array $context = array()) - { - return; - } - - /** - * Critical conditions. - * - * Example: Application component unavailable, unexpected exception. - * - * @param string $message - * @param array $context - * - * @return void - */ - public function critical($message, array $context = array()) - { - return; - } - - /** - * Runtime errors that do not require immediate action but should typically - * be logged and monitored. - * - * @param string $message - * @param array $context - * - * @return void - */ - public function error($message, array $context = array()) - { - return; - } - - /** - * Exceptional occurrences that are not errors. - * - * Example: Use of deprecated APIs, poor use of an API, undesirable things - * that are not necessarily wrong. - * - * @param string $message - * @param array $context - * - * @return void - */ - public function warning($message, array $context = array()) - { - return; - } - - /** - * Normal but significant events. - * - * @param string $message - * @param array $context - * - * @return void - */ - public function notice($message, array $context = array()) - { - return; - } - - /** - * Interesting events. - * - * Example: User logs in, SQL logs. - * - * @param string $message - * @param array $context - * - * @return void - */ - public function info($message, array $context = array()) - { - return; - } - - /** - * Detailed debug information. - * - * @param string $message - * @param array $context - * - * @return void - */ - public function debug($message, array $context = array()) - { - return; - } - - /** - * Logs with an arbitrary level. - * - * @param mixed $level - * @param string $message - * @param array $context - * - * @return void - */ - public function log($level, $message, array $context = array()) - { - return; - } -} diff --git a/tests/src/Console/AutomaticInstallationConsoleTest.php b/tests/src/Console/AutomaticInstallationConsoleTest.php index 3f4f8c03c..1fc307a68 100644 --- a/tests/src/Console/AutomaticInstallationConsoleTest.php +++ b/tests/src/Console/AutomaticInstallationConsoleTest.php @@ -32,11 +32,11 @@ use Friendica\Database\Database; use Friendica\DI; use Friendica\Test\Util\RendererMockTrait; use Friendica\Test\Util\VFSTrait; -use Friendica\Core\Logger\Type\VoidLogger; use Mockery; use Mockery\MockInterface; use org\bovigo\vfs\vfsStream; use org\bovigo\vfs\vfsStreamFile; +use Psr\Log\NullLogger; class AutomaticInstallationConsoleTest extends ConsoleTest { @@ -117,7 +117,7 @@ class AutomaticInstallationConsoleTest extends ConsoleTest }); $this->mode->shouldReceive('isInstall')->andReturn(true); - Logger::init(new VoidLogger()); + Logger::init(new NullLogger()); } /** diff --git a/tests/src/Contact/FriendSuggest/Factory/FriendSuggestTest.php b/tests/src/Contact/FriendSuggest/Factory/FriendSuggestTest.php index 969107316..62b90b1cc 100644 --- a/tests/src/Contact/FriendSuggest/Factory/FriendSuggestTest.php +++ b/tests/src/Contact/FriendSuggest/Factory/FriendSuggestTest.php @@ -5,7 +5,7 @@ namespace Friendica\Test\src\Contact\FriendSuggest\Factory; use Friendica\Contact\FriendSuggest\Factory\FriendSuggest; use Friendica\Contact\FriendSuggest\Entity; use Friendica\Test\MockedTest; -use Friendica\Core\Logger\Type\VoidLogger; +use Psr\Log\NullLogger; class FriendSuggestTest extends MockedTest { @@ -91,7 +91,7 @@ class FriendSuggestTest extends MockedTest public function testCreateNew() { - $factory = new FriendSuggest(new VoidLogger()); + $factory = new FriendSuggest(new NullLogger()); $this->assertFriendSuggest( $factory->createNew(12, 13), @@ -106,14 +106,14 @@ class FriendSuggestTest extends MockedTest */ public function testCreateFromTableRow(array $input, Entity\FriendSuggest $assertion) { - $factory = new FriendSuggest(new VoidLogger()); + $factory = new FriendSuggest(new NullLogger()); $this->assertFriendSuggest($factory->createFromTableRow($input), $assertion); } public function testCreateEmpty() { - $factory = new FriendSuggest(new VoidLogger()); + $factory = new FriendSuggest(new NullLogger()); $this->assertFriendSuggest($factory->createEmpty(66), new Entity\FriendSuggest(0, 0, '', '', '', '', '', new \DateTime('now', new \DateTimeZone('UTC')), 66 diff --git a/tests/src/Core/Logger/VoidLoggerTest.php b/tests/src/Core/Logger/VoidLoggerTest.php deleted file mode 100644 index a2134ce71..000000000 --- a/tests/src/Core/Logger/VoidLoggerTest.php +++ /dev/null @@ -1,52 +0,0 @@ -. - * - */ - -namespace Friendica\Test\src\Core\Logger; - -use Friendica\Test\MockedTest; -use Friendica\Core\Logger\Type\VoidLogger; -use Psr\Log\LogLevel; - -class VoidLoggerTest extends MockedTest -{ - use LoggerDataTrait; - - /** - * Test if the profiler is profiling data - * @dataProvider dataTests - * @doesNotPerformAssertions - */ - public function testNormal($function, $message, array $context) - { - $logger = new VoidLogger(); - $logger->$function($message, $context); - } - - /** - * Test the log() function - * @doesNotPerformAssertions - */ - public function testProfilingLog() - { - $logger = new VoidLogger(); - $logger->log(LogLevel::WARNING, 'test', ['a' => 'context']); - } -} diff --git a/tests/src/Profile/ProfileField/Entity/ProfileFieldTest.php b/tests/src/Profile/ProfileField/Entity/ProfileFieldTest.php index 6e054428d..9e89c9c54 100644 --- a/tests/src/Profile/ProfileField/Entity/ProfileFieldTest.php +++ b/tests/src/Profile/ProfileField/Entity/ProfileFieldTest.php @@ -11,8 +11,8 @@ use Friendica\Security\PermissionSet\Factory\PermissionSet as PermissionSetFacto use Friendica\Test\MockedTest; use Friendica\Util\ACLFormatter; use Friendica\Util\DateTimeFormat; -use Friendica\Core\Logger\Type\VoidLogger; use Mockery\MockInterface; +use Psr\Log\NullLogger; class ProfileFieldTest extends MockedTest { @@ -28,8 +28,8 @@ class ProfileFieldTest extends MockedTest parent::setUp(); $this->permissionSetRepository = \Mockery::mock(PermissionSetRepository::class); - $this->permissionSetFactory = new PermissionSetFactory(new VoidLogger(), new ACLFormatter()); - $this->profileFieldFactory = new ProfileFieldFactory(new VoidLogger(), $this->permissionSetFactory); + $this->permissionSetFactory = new PermissionSetFactory(new NullLogger(), new ACLFormatter()); + $this->profileFieldFactory = new ProfileFieldFactory(new NullLogger(), $this->permissionSetFactory); } public function dataEntity() diff --git a/tests/src/Security/TwoFactor/Factory/TrustedBrowserTest.php b/tests/src/Security/TwoFactor/Factory/TrustedBrowserTest.php index e27445d32..ca29e13a1 100644 --- a/tests/src/Security/TwoFactor/Factory/TrustedBrowserTest.php +++ b/tests/src/Security/TwoFactor/Factory/TrustedBrowserTest.php @@ -5,14 +5,14 @@ namespace Friendica\Test\src\Security\TwoFactor\Factory; use Friendica\Security\TwoFactor\Factory\TrustedBrowser; use Friendica\Test\MockedTest; use Friendica\Util\DateTimeFormat; -use Friendica\Core\Logger\Type\VoidLogger; use Friendica\Util\Strings; +use Psr\Log\NullLogger; class TrustedBrowserTest extends MockedTest { public function testCreateFromTableRowSuccess() { - $factory = new TrustedBrowser(new VoidLogger()); + $factory = new TrustedBrowser(new NullLogger()); $row = [ 'cookie_hash' => Strings::getRandomHex(), @@ -31,7 +31,7 @@ class TrustedBrowserTest extends MockedTest { $this->expectException(\TypeError::class); - $factory = new TrustedBrowser(new VoidLogger()); + $factory = new TrustedBrowser(new NullLogger()); $row = [ 'cookie_hash' => null, @@ -48,7 +48,7 @@ class TrustedBrowserTest extends MockedTest public function testCreateForUserWithUserAgent() { - $factory = new TrustedBrowser(new VoidLogger()); + $factory = new TrustedBrowser(new NullLogger()); $uid = 42; $userAgent = 'PHPUnit'; From 409d909d0f52395eae4bebf7960c368efed3865f Mon Sep 17 00:00:00 2001 From: Philipp Date: Sat, 23 Oct 2021 12:50:31 +0200 Subject: [PATCH 17/19] Restructure HTTPClient for new paradigm --- src/Content/Text/BBCode.php | 6 +- src/Core/Search.php | 4 +- src/DI.php | 4 +- src/Model/GServer.php | 22 +++--- src/Model/Post/Link.php | 4 +- src/Model/Post/Media.php | 4 +- src/Module/Magic.php | 4 +- .../Capability/ICanHandleHttpResponses.php} | 9 +-- .../Capability/ICanRequestPerHttp.php} | 30 ++++---- .../Client/HttpClientCan.php} | 61 ++++++++-------- .../Client/HttpClientOptions.php} | 4 +- .../HTTPClient/Factory/HttpClient.php} | 28 ++++---- .../{ => HTTPClient/Response}/CurlResult.php | 71 ++++++++++--------- .../Response}/GuzzleResponse.php | 34 +++++---- src/Network/Probe.php | 9 +-- src/Protocol/OStatus.php | 6 +- src/Util/HTTPSignature.php | 10 +-- src/Util/ParseUrl.php | 4 +- src/Worker/OnePoll.php | 4 +- static/dependencies.config.php | 4 +- tests/DiceHttpMockHandlerTrait.php | 8 +-- tests/src/Core/InstallerTest.php | 18 ++--- .../Storage/Repository/StorageManagerTest.php | 6 +- .../Client}/HTTPClientTest.php | 2 +- .../Response}/CurlResultTest.php | 52 +++++++------- 25 files changed, 210 insertions(+), 198 deletions(-) rename src/Network/{IHTTPResult.php => HTTPClient/Capability/ICanHandleHttpResponses.php} (90%) rename src/Network/{IHTTPClient.php => HTTPClient/Capability/ICanRequestPerHttp.php} (85%) rename src/Network/{HTTPClient.php => HTTPClient/Client/HttpClientCan.php} (76%) rename src/Network/{HTTPClientOptions.php => HTTPClient/Client/HttpClientOptions.php} (93%) rename src/{Factory/HTTPClientFactory.php => Network/HTTPClient/Factory/HttpClient.php} (83%) rename src/Network/{ => HTTPClient/Response}/CurlResult.php (79%) rename src/Network/{ => HTTPClient/Response}/GuzzleResponse.php (81%) rename tests/src/Network/{ => HTTPClient/Client}/HTTPClientTest.php (92%) rename tests/src/Network/{ => HTTPClient/Response}/CurlResultTest.php (70%) diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index da95c3d67..ecaf34527 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -39,7 +39,7 @@ use Friendica\Model\Event; use Friendica\Model\Photo; use Friendica\Model\Post; use Friendica\Model\Tag; -use Friendica\Network\HTTPClientOptions; +use Friendica\Network\HTTPClient\Client\HttpClientOptions; use Friendica\Object\Image; use Friendica\Protocol\Activity; use Friendica\Util\Images; @@ -1201,7 +1201,7 @@ class BBCode $text = DI::cache()->get($cache_key); if (is_null($text)) { - $curlResult = DI::httpClient()->head($match[1], [HTTPClientOptions::TIMEOUT => DI::config()->get('system', 'xrd_timeout')]); + $curlResult = DI::httpClient()->head($match[1], [HttpClientOptions::TIMEOUT => DI::config()->get('system', 'xrd_timeout')]); if ($curlResult->isSuccess()) { $mimetype = $curlResult->getHeader('Content-Type')[0] ?? ''; } else { @@ -1272,7 +1272,7 @@ class BBCode return $text; } - $curlResult = DI::httpClient()->head($match[1], [HTTPClientOptions::TIMEOUT => DI::config()->get('system', 'xrd_timeout')]); + $curlResult = DI::httpClient()->head($match[1], [HttpClientOptions::TIMEOUT => DI::config()->get('system', 'xrd_timeout')]); if ($curlResult->isSuccess()) { $mimetype = $curlResult->getHeader('Content-Type')[0] ?? ''; } else { diff --git a/src/Core/Search.php b/src/Core/Search.php index ff4abdfac..82c0ea3d3 100644 --- a/src/Core/Search.php +++ b/src/Core/Search.php @@ -24,7 +24,7 @@ namespace Friendica\Core; use Friendica\DI; use Friendica\Model\Contact; use Friendica\Network\HTTPException; -use Friendica\Network\HTTPClientOptions; +use Friendica\Network\HTTPClient\Client\HttpClientOptions; use Friendica\Object\Search\ContactResult; use Friendica\Object\Search\ResultList; use Friendica\Util\Network; @@ -228,7 +228,7 @@ class Search $return = Contact::searchByName($search, $mode); } else { $p = $page > 1 ? 'p=' . $page : ''; - $curlResult = DI::httpClient()->get(self::getGlobalDirectory() . '/search/people?' . $p . '&q=' . urlencode($search), [HTTPClientOptions::ACCEPT_CONTENT => ['application/json']]); + $curlResult = DI::httpClient()->get(self::getGlobalDirectory() . '/search/people?' . $p . '&q=' . urlencode($search), [HttpClientOptions::ACCEPT_CONTENT => ['application/json']]); if ($curlResult->isSuccess()) { $searchResult = json_decode($curlResult->getBody(), true); if (!empty($searchResult['profiles'])) { diff --git a/src/DI.php b/src/DI.php index 8ee700440..ecc65bbc9 100644 --- a/src/DI.php +++ b/src/DI.php @@ -415,11 +415,11 @@ abstract class DI // /** - * @return Network\IHTTPClient + * @return Network\HTTPClient\Capability\ICanRequestPerHttp */ public static function httpClient() { - return self::$dice->create(Network\IHTTPClient::class); + return self::$dice->create(Network\HTTPClient\Capability\ICanRequestPerHttp::class); } // diff --git a/src/Model/GServer.php b/src/Model/GServer.php index 7c5a2b98a..c56e7701e 100644 --- a/src/Model/GServer.php +++ b/src/Model/GServer.php @@ -32,8 +32,8 @@ use Friendica\Database\Database; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Module\Register; -use Friendica\Network\HTTPClientOptions; -use Friendica\Network\IHTTPResult; +use Friendica\Network\HTTPClient\Client\HttpClientOptions; +use Friendica\Network\HTTPClient\Capability\ICanHandleHttpResponses; use Friendica\Protocol\Relay; use Friendica\Util\DateTimeFormat; use Friendica\Util\Network; @@ -315,7 +315,7 @@ class GServer // When a nodeinfo is present, we don't need to dig further $xrd_timeout = DI::config()->get('system', 'xrd_timeout'); - $curlResult = DI::httpClient()->get($url . '/.well-known/nodeinfo', [HTTPClientOptions::TIMEOUT => $xrd_timeout]); + $curlResult = DI::httpClient()->get($url . '/.well-known/nodeinfo', [HttpClientOptions::TIMEOUT => $xrd_timeout]); if ($curlResult->isTimeout()) { self::setFailure($url); return false; @@ -323,7 +323,7 @@ class GServer // On a redirect follow the new host but mark the old one as failure if ($curlResult->isSuccess() && (parse_url($url, PHP_URL_HOST) != parse_url($curlResult->getRedirectUrl(), PHP_URL_HOST))) { - $curlResult = DI::httpClient()->get($url, [HTTPClientOptions::TIMEOUT => $xrd_timeout]); + $curlResult = DI::httpClient()->get($url, [HttpClientOptions::TIMEOUT => $xrd_timeout]); if (parse_url($url, PHP_URL_HOST) != parse_url($curlResult->getRedirectUrl(), PHP_URL_HOST)) { Logger::info('Found redirect. Mark old entry as failure', ['old' => $url, 'new' => $curlResult->getRedirectUrl()]); self::setFailure($url); @@ -359,7 +359,7 @@ class GServer $basedata = ['detection-method' => self::DETECT_MANUAL]; } - $curlResult = DI::httpClient()->get($baseurl, [HTTPClientOptions::TIMEOUT => $xrd_timeout]); + $curlResult = DI::httpClient()->get($baseurl, [HttpClientOptions::TIMEOUT => $xrd_timeout]); if ($curlResult->isSuccess()) { if ((parse_url($baseurl, PHP_URL_HOST) != parse_url($curlResult->getRedirectUrl(), PHP_URL_HOST))) { Logger::info('Found redirect. Mark old entry as failure', ['old' => $url, 'new' => $curlResult->getRedirectUrl()]); @@ -383,7 +383,7 @@ class GServer // When the base path doesn't seem to contain a social network we try the complete path. // Most detectable system have to be installed in the root directory. // We checked the base to avoid false positives. - $curlResult = DI::httpClient()->get($url, [HTTPClientOptions::TIMEOUT => $xrd_timeout]); + $curlResult = DI::httpClient()->get($url, [HttpClientOptions::TIMEOUT => $xrd_timeout]); if ($curlResult->isSuccess()) { $urldata = self::analyseRootHeader($curlResult, $serverdata); $urldata = self::analyseRootBody($curlResult, $urldata, $url); @@ -672,13 +672,13 @@ class GServer /** * Detect server type by using the nodeinfo data * - * @param string $url address of the server - * @param IHTTPResult $httpResult + * @param string $url address of the server + * @param ICanHandleHttpResponses $httpResult * * @return array Server data * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - private static function fetchNodeinfo(string $url, IHTTPResult $httpResult) + private static function fetchNodeinfo(string $url, ICanHandleHttpResponses $httpResult) { if (!$httpResult->isSuccess()) { return []; @@ -959,7 +959,7 @@ class GServer private static function validHostMeta(string $url) { $xrd_timeout = DI::config()->get('system', 'xrd_timeout'); - $curlResult = DI::httpClient()->get($url . '/.well-known/host-meta', [HTTPClientOptions::TIMEOUT => $xrd_timeout]); + $curlResult = DI::httpClient()->get($url . '/.well-known/host-meta', [HttpClientOptions::TIMEOUT => $xrd_timeout]); if (!$curlResult->isSuccess()) { return false; } @@ -1725,7 +1725,7 @@ class GServer if (!empty($accesstoken)) { $api = 'https://instances.social/api/1.0/instances/list?count=0'; - $curlResult = DI::httpClient()->get($api, [HTTPClientOptions::HEADERS => ['Authorization' => ['Bearer ' . $accesstoken]]]); + $curlResult = DI::httpClient()->get($api, [HttpClientOptions::HEADERS => ['Authorization' => ['Bearer ' . $accesstoken]]]); if ($curlResult->isSuccess()) { $servers = json_decode($curlResult->getBody(), true); diff --git a/src/Model/Post/Link.php b/src/Model/Post/Link.php index dcda036ec..50ed12a36 100644 --- a/src/Model/Post/Link.php +++ b/src/Model/Post/Link.php @@ -26,7 +26,7 @@ use Friendica\Core\System; use Friendica\Database\Database; use Friendica\Database\DBA; use Friendica\DI; -use Friendica\Network\HTTPClientOptions; +use Friendica\Network\HTTPClient\Client\HttpClientOptions; use Friendica\Util\Proxy; /** @@ -100,7 +100,7 @@ class Link { $timeout = DI::config()->get('system', 'xrd_timeout'); - $curlResult = DI::httpClient()->head($url, [HTTPClientOptions::TIMEOUT => $timeout]); + $curlResult = DI::httpClient()->head($url, [HttpClientOptions::TIMEOUT => $timeout]); if ($curlResult->isSuccess()) { if (empty($media['mimetype'])) { return $curlResult->getHeader('Content-Type')[0] ?? ''; diff --git a/src/Model/Post/Media.php b/src/Model/Post/Media.php index b42ba89cf..6fe996d76 100644 --- a/src/Model/Post/Media.php +++ b/src/Model/Post/Media.php @@ -30,7 +30,7 @@ use Friendica\DI; use Friendica\Model\Item; use Friendica\Model\Photo; use Friendica\Model\Post; -use Friendica\Network\HTTPClientOptions; +use Friendica\Network\HTTPClient\Client\HttpClientOptions; use Friendica\Util\Images; use Friendica\Util\Network; use Friendica\Util\ParseUrl; @@ -168,7 +168,7 @@ class Media // Fetch the mimetype or size if missing. if (empty($media['mimetype']) || empty($media['size'])) { $timeout = DI::config()->get('system', 'xrd_timeout'); - $curlResult = DI::httpClient()->head($media['url'], [HTTPClientOptions::TIMEOUT => $timeout]); + $curlResult = DI::httpClient()->head($media['url'], [HttpClientOptions::TIMEOUT => $timeout]); if ($curlResult->isSuccess()) { if (empty($media['mimetype'])) { $media['mimetype'] = $curlResult->getHeader('Content-Type')[0] ?? ''; diff --git a/src/Module/Magic.php b/src/Module/Magic.php index d508835b0..c51c05844 100644 --- a/src/Module/Magic.php +++ b/src/Module/Magic.php @@ -28,7 +28,7 @@ use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Contact; use Friendica\Model\User; -use Friendica\Network\HTTPClientOptions; +use Friendica\Network\HTTPClient\Client\HttpClientOptions; use Friendica\Util\HTTPSignature; use Friendica\Util\Strings; @@ -102,7 +102,7 @@ class Magic extends BaseModule ); // Try to get an authentication token from the other instance. - $curlResult = DI::httpClient()->get($basepath . '/owa', [HTTPClientOptions::HEADERS => $header]); + $curlResult = DI::httpClient()->get($basepath . '/owa', [HttpClientOptions::HEADERS => $header]); if ($curlResult->isSuccess()) { $j = json_decode($curlResult->getBody(), true); diff --git a/src/Network/IHTTPResult.php b/src/Network/HTTPClient/Capability/ICanHandleHttpResponses.php similarity index 90% rename from src/Network/IHTTPResult.php rename to src/Network/HTTPClient/Capability/ICanHandleHttpResponses.php index 38a117628..b0ad0a968 100644 --- a/src/Network/IHTTPResult.php +++ b/src/Network/HTTPClient/Capability/ICanHandleHttpResponses.php @@ -1,13 +1,13 @@ path to cookie jar file * 'header' => header array * - * @return CurlResult + * @return ICanHandleHttpResponses */ - public function head(string $url, array $opts = []); + public function head(string $url, array $opts = []): ICanHandleHttpResponses; /** * Send a GET to an URL. @@ -83,9 +83,9 @@ interface IHTTPClient * 'header' => header array * 'content_length' => int maximum File content length * - * @return IHTTPResult + * @return ICanHandleHttpResponses */ - public function get(string $url, array $opts = []); + public function get(string $url, array $opts = []): ICanHandleHttpResponses; /** * Sends a HTTP request to a given url @@ -101,9 +101,9 @@ interface IHTTPClient * 'content_length' => int maximum File content length * 'auth' => array authentication settings * - * @return IHTTPResult + * @return ICanHandleHttpResponses */ - public function request(string $method, string $url, array $opts = []); + public function request(string $method, string $url, array $opts = []): ICanHandleHttpResponses; /** * Send POST request to an URL @@ -113,9 +113,9 @@ interface IHTTPClient * @param array $headers HTTP headers * @param int $timeout The timeout in seconds, default system config value or 60 seconds * - * @return IHTTPResult The content + * @return ICanHandleHttpResponses The content */ - public function post(string $url, $params, array $headers = [], int $timeout = 0); + public function post(string $url, $params, array $headers = [], int $timeout = 0): ICanHandleHttpResponses; /** * Returns the original URL of the provided URL @@ -129,5 +129,5 @@ interface IHTTPClient * * @throws TransferException In case there's an error during the resolving */ - public function finalUrl(string $url); + public function finalUrl(string $url): string; } diff --git a/src/Network/HTTPClient.php b/src/Network/HTTPClient/Client/HttpClientCan.php similarity index 76% rename from src/Network/HTTPClient.php rename to src/Network/HTTPClient/Client/HttpClientCan.php index 004af57f9..ea07a5c83 100644 --- a/src/Network/HTTPClient.php +++ b/src/Network/HTTPClient/Client/HttpClientCan.php @@ -19,9 +19,14 @@ * */ -namespace Friendica\Network; +namespace Friendica\Network\HTTPClient\Client; use Friendica\Core\System; +use Friendica\Network\HTTPClient\Response\CurlResult; +use Friendica\Network\HTTPClient\Response\GuzzleResponse; +use Friendica\Network\HTTPClient\Capability\ICanRequestPerHttp; +use Friendica\Network\HTTPClient\Capability\ICanHandleHttpResponses; +use Friendica\Network\HTTPException\InternalServerErrorException; use Friendica\Util\Network; use Friendica\Util\Profiler; use GuzzleHttp\Client; @@ -37,7 +42,7 @@ use Psr\Log\LoggerInterface; /** * Performs HTTP requests to a given URL */ -class HTTPClient implements IHTTPClient +class HttpClientCan implements ICanRequestPerHttp { /** @var LoggerInterface */ private $logger; @@ -59,7 +64,7 @@ class HTTPClient implements IHTTPClient /** * {@inheritDoc} */ - public function request(string $method, string $url, array $opts = []): IHTTPResult + public function request(string $method, string $url, array $opts = []): ICanHandleHttpResponses { $this->profiler->startRecording('network'); $this->logger->debug('Request start.', ['url' => $url, 'method' => $method]); @@ -95,43 +100,43 @@ class HTTPClient implements IHTTPClient $conf = []; - if (!empty($opts[HTTPClientOptions::COOKIEJAR])) { - $jar = new FileCookieJar($opts[HTTPClientOptions::COOKIEJAR]); + if (!empty($opts[HttpClientOptions::COOKIEJAR])) { + $jar = new FileCookieJar($opts[HttpClientOptions::COOKIEJAR]); $conf[RequestOptions::COOKIES] = $jar; } $headers = []; - if (!empty($opts[HTTPClientOptions::ACCEPT_CONTENT])) { - $headers['Accept'] = $opts[HTTPClientOptions::ACCEPT_CONTENT]; + if (!empty($opts[HttpClientOptions::ACCEPT_CONTENT])) { + $headers['Accept'] = $opts[HttpClientOptions::ACCEPT_CONTENT]; } - if (!empty($opts[HTTPClientOptions::LEGACY_HEADER])) { + if (!empty($opts[HttpClientOptions::LEGACY_HEADER])) { $this->logger->notice('Wrong option \'headers\' used.'); - $headers = array_merge($opts[HTTPClientOptions::LEGACY_HEADER], $headers); + $headers = array_merge($opts[HttpClientOptions::LEGACY_HEADER], $headers); } - if (!empty($opts[HTTPClientOptions::HEADERS])) { - $headers = array_merge($opts[HTTPClientOptions::HEADERS], $headers); + if (!empty($opts[HttpClientOptions::HEADERS])) { + $headers = array_merge($opts[HttpClientOptions::HEADERS], $headers); } $conf[RequestOptions::HEADERS] = array_merge($this->client->getConfig(RequestOptions::HEADERS), $headers); - if (!empty($opts[HTTPClientOptions::TIMEOUT])) { - $conf[RequestOptions::TIMEOUT] = $opts[HTTPClientOptions::TIMEOUT]; + if (!empty($opts[HttpClientOptions::TIMEOUT])) { + $conf[RequestOptions::TIMEOUT] = $opts[HttpClientOptions::TIMEOUT]; } - if (!empty($opts[HTTPClientOptions::BODY])) { - $conf[RequestOptions::BODY] = $opts[HTTPClientOptions::BODY]; + if (!empty($opts[HttpClientOptions::BODY])) { + $conf[RequestOptions::BODY] = $opts[HttpClientOptions::BODY]; } - if (!empty($opts[HTTPClientOptions::AUTH])) { - $conf[RequestOptions::AUTH] = $opts[HTTPClientOptions::AUTH]; + if (!empty($opts[HttpClientOptions::AUTH])) { + $conf[RequestOptions::AUTH] = $opts[HttpClientOptions::AUTH]; } $conf[RequestOptions::ON_HEADERS] = function (ResponseInterface $response) use ($opts) { - if (!empty($opts[HTTPClientOptions::CONTENT_LENGTH]) && - (int)$response->getHeaderLine('Content-Length') > $opts[HTTPClientOptions::CONTENT_LENGTH]) { + if (!empty($opts[HttpClientOptions::CONTENT_LENGTH]) && + (int)$response->getHeaderLine('Content-Length') > $opts[HttpClientOptions::CONTENT_LENGTH]) { throw new TransferException('The file is too big!'); } }; @@ -159,7 +164,7 @@ class HTTPClient implements IHTTPClient /** {@inheritDoc} */ - public function head(string $url, array $opts = []): IHTTPResult + public function head(string $url, array $opts = []): ICanHandleHttpResponses { return $this->request('head', $url, $opts); } @@ -167,7 +172,7 @@ class HTTPClient implements IHTTPClient /** * {@inheritDoc} */ - public function get(string $url, array $opts = []): IHTTPResult + public function get(string $url, array $opts = []): ICanHandleHttpResponses { return $this->request('get', $url, $opts); } @@ -175,18 +180,18 @@ class HTTPClient implements IHTTPClient /** * {@inheritDoc} */ - public function post(string $url, $params, array $headers = [], int $timeout = 0): IHTTPResult + public function post(string $url, $params, array $headers = [], int $timeout = 0): ICanHandleHttpResponses { $opts = []; - $opts[HTTPClientOptions::BODY] = $params; + $opts[HttpClientOptions::BODY] = $params; if (!empty($headers)) { - $opts[HTTPClientOptions::HEADERS] = $headers; + $opts[HttpClientOptions::HEADERS] = $headers; } if (!empty($timeout)) { - $opts[HTTPClientOptions::TIMEOUT] = $timeout; + $opts[HttpClientOptions::TIMEOUT] = $timeout; } return $this->request('post', $url, $opts); @@ -195,7 +200,7 @@ class HTTPClient implements IHTTPClient /** * {@inheritDoc} */ - public function finalUrl(string $url) + public function finalUrl(string $url): string { $this->profiler->startRecording('network'); @@ -229,7 +234,7 @@ class HTTPClient implements IHTTPClient /** * {@inheritDoc} */ - public function fetch(string $url, int $timeout = 0, string $accept_content = '', string $cookiejar = '') + public function fetch(string $url, int $timeout = 0, string $accept_content = '', string $cookiejar = ''): string { $ret = $this->fetchFull($url, $timeout, $accept_content, $cookiejar); @@ -239,7 +244,7 @@ class HTTPClient implements IHTTPClient /** * {@inheritDoc} */ - public function fetchFull(string $url, int $timeout = 0, string $accept_content = '', string $cookiejar = '') + public function fetchFull(string $url, int $timeout = 0, string $accept_content = '', string $cookiejar = ''): ICanHandleHttpResponses { return $this->get( $url, diff --git a/src/Network/HTTPClientOptions.php b/src/Network/HTTPClient/Client/HttpClientOptions.php similarity index 93% rename from src/Network/HTTPClientOptions.php rename to src/Network/HTTPClient/Client/HttpClientOptions.php index f9438fb47..fa684c763 100644 --- a/src/Network/HTTPClientOptions.php +++ b/src/Network/HTTPClient/Client/HttpClientOptions.php @@ -1,13 +1,13 @@ config->get('system', 'proxy'); if (!empty($proxy)) { - $proxyuser = $this->config->get('system', 'proxyuser'); + $proxyUser = $this->config->get('system', 'proxyuser'); - if (!empty($proxyuser)) { - $proxy = $proxyuser . '@' . $proxy; + if (!empty($proxyUser)) { + $proxy = $proxyUser . '@' . $proxy; } } @@ -72,7 +72,7 @@ class HTTPClientFactory extends BaseFactory DB_UPDATE_VERSION . '; ' . $this->baseUrl->get(); - $guzzle = new Client([ + $guzzle = new GuzzleHttp\Client([ RequestOptions::ALLOW_REDIRECTS => [ 'max' => 8, 'on_redirect' => $onRedirect, @@ -88,7 +88,7 @@ class HTTPClientFactory extends BaseFactory RequestOptions::FORCE_IP_RESOLVE => ($this->config->get('system', 'ipv4_resolve') ? 'v4' : null), RequestOptions::CONNECT_TIMEOUT => 10, RequestOptions::TIMEOUT => $this->config->get('system', 'curl_timeout', 60), - // by default we will allow self-signed certs + // by default, we will allow self-signed certs, // but it can be overridden RequestOptions::VERIFY => (bool)$this->config->get('system', 'verifyssl'), RequestOptions::PROXY => $proxy, @@ -108,6 +108,6 @@ class HTTPClientFactory extends BaseFactory // Some websites test the browser for cookie support, so this enhances results. $resolver->setCookieJar(get_temppath() .'/resolver-cookie-' . Strings::getRandomName(10)); - return new HTTPClient($logger, $this->profiler, $guzzle, $resolver); + return new Client\HttpClientCan($logger, $this->profiler, $guzzle, $resolver); } } diff --git a/src/Network/CurlResult.php b/src/Network/HTTPClient/Response/CurlResult.php similarity index 79% rename from src/Network/CurlResult.php rename to src/Network/HTTPClient/Response/CurlResult.php index 8b3b12876..adff9b8dc 100644 --- a/src/Network/CurlResult.php +++ b/src/Network/HTTPClient/Response/CurlResult.php @@ -19,17 +19,17 @@ * */ -namespace Friendica\Network; +namespace Friendica\Network\HTTPClient\Response; use Friendica\Core\Logger; -use Friendica\Core\System; +use Friendica\Network\HTTPClient\Capability\ICanHandleHttpResponses; use Friendica\Network\HTTPException\InternalServerErrorException; use Friendica\Util\Network; /** * A content class for Curl call results */ -class CurlResult implements IHTTPResult +class CurlResult implements ICanHandleHttpResponses { /** * @var int HTTP return code or 0 if timeout or failure @@ -101,35 +101,36 @@ class CurlResult implements IHTTPResult * * @param string $url optional URL * - * @return IHTTPResult a CURL with error response + * @return ICanHandleHttpResponses a CURL with error response * @throws InternalServerErrorException */ - public static function createErrorCurl($url = '') + public static function createErrorCurl(string $url = '') { return new CurlResult($url, '', ['http_code' => 0]); } /** * Curl constructor. - * @param string $url the URL which was called - * @param string $result the result of the curl execution - * @param array $info an additional info array - * @param int $errorNumber the error number or 0 (zero) if no error - * @param string $error the error message or '' (the empty string) if no + * + * @param string $url the URL which was called + * @param string $result the result of the curl execution + * @param array $info an additional info array + * @param int $errorNumber the error number or 0 (zero) if no error + * @param string $error the error message or '' (the empty string) if no * * @throws InternalServerErrorException when HTTP code of the CURL response is missing */ - public function __construct($url, $result, $info, $errorNumber = 0, $error = '') + public function __construct(string $url, string $result, array $info, int $errorNumber = 0, string $error = '') { if (!array_key_exists('http_code', $info)) { throw new InternalServerErrorException('CURL response doesn\'t contains a response HTTP code'); } - $this->returnCode = $info['http_code']; - $this->url = $url; - $this->info = $info; + $this->returnCode = $info['http_code']; + $this->url = $url; + $this->info = $info; $this->errorNumber = $errorNumber; - $this->error = $error; + $this->error = $error; Logger::debug('construct', ['url' => $url, 'returncode' => $this->returnCode, 'result' => $result]); @@ -145,15 +146,15 @@ class CurlResult implements IHTTPResult // allow for HTTP/2.x without fixing code $header = ''; - $base = $result; + $base = $result; while (preg_match('/^HTTP\/.+? \d+/', $base)) { $chunk = substr($base, 0, strpos($base, "\r\n\r\n") + 4); $header .= $chunk; $base = substr($base, strlen($chunk)); } - $this->body = substr($result, strlen($header)); - $this->header = $header; + $this->body = substr($result, strlen($header)); + $this->header = $header; $this->header_fields = []; // Is filled on demand } @@ -185,7 +186,7 @@ class CurlResult implements IHTTPResult $this->redirectUrl = $this->info['url']; } - if ($this->returnCode == 301 || $this->returnCode == 302 || $this->returnCode == 303 || $this->returnCode== 307) { + if ($this->returnCode == 301 || $this->returnCode == 302 || $this->returnCode == 303 || $this->returnCode == 307) { $redirect_parts = parse_url($this->info['redirect_url'] ?? ''); if (empty($redirect_parts)) { $redirect_parts = []; @@ -229,19 +230,19 @@ class CurlResult implements IHTTPResult } /** {@inheritDoc} */ - public function getReturnCode() + public function getReturnCode(): string { return $this->returnCode; } /** {@inheritDoc} */ - public function getContentType() + public function getContentType(): string { return $this->contentType; } /** {@inheritDoc} */ - public function getHeader($header) + public function getHeader(string $header): array { if (empty($header)) { return []; @@ -259,13 +260,13 @@ class CurlResult implements IHTTPResult } /** {@inheritDoc} */ - public function getHeaders() + public function getHeaders(): array { return $this->getHeaderArray(); } /** {@inheritDoc} */ - public function inHeader(string $field) + public function inHeader(string $field): bool { $field = strtolower(trim($field)); @@ -275,7 +276,7 @@ class CurlResult implements IHTTPResult } /** {@inheritDoc} */ - public function getHeaderArray() + public function getHeaderArray(): array { if (!empty($this->header_fields)) { return $this->header_fields; @@ -285,9 +286,9 @@ class CurlResult implements IHTTPResult $lines = explode("\n", trim($this->header)); foreach ($lines as $line) { - $parts = explode(':', $line); + $parts = explode(':', $line); $headerfield = strtolower(trim(array_shift($parts))); - $headerdata = trim(implode(':', $parts)); + $headerdata = trim(implode(':', $parts)); if (empty($this->header_fields[$headerfield])) { $this->header_fields[$headerfield] = [$headerdata]; } elseif (!in_array($headerdata, $this->header_fields[$headerfield])) { @@ -299,49 +300,49 @@ class CurlResult implements IHTTPResult } /** {@inheritDoc} */ - public function isSuccess() + public function isSuccess(): bool { return $this->isSuccess; } /** {@inheritDoc} */ - public function getUrl() + public function getUrl(): string { return $this->url; } /** {@inheritDoc} */ - public function getRedirectUrl() + public function getRedirectUrl(): string { return $this->redirectUrl; } /** {@inheritDoc} */ - public function getBody() + public function getBody(): string { return $this->body; } /** {@inheritDoc} */ - public function isRedirectUrl() + public function isRedirectUrl(): bool { return $this->isRedirectUrl; } /** {@inheritDoc} */ - public function getErrorNumber() + public function getErrorNumber(): int { return $this->errorNumber; } /** {@inheritDoc} */ - public function getError() + public function getError(): string { return $this->error; } /** {@inheritDoc} */ - public function isTimeout() + public function isTimeout(): bool { return $this->isTimeout; } diff --git a/src/Network/GuzzleResponse.php b/src/Network/HTTPClient/Response/GuzzleResponse.php similarity index 81% rename from src/Network/GuzzleResponse.php rename to src/Network/HTTPClient/Response/GuzzleResponse.php index d5afb4ca6..aa92309e5 100644 --- a/src/Network/GuzzleResponse.php +++ b/src/Network/HTTPClient/Response/GuzzleResponse.php @@ -19,10 +19,10 @@ * */ -namespace Friendica\Network; +namespace Friendica\Network\HTTPClient\Response; use Friendica\Core\Logger; -use Friendica\Core\System; +use Friendica\Network\HTTPClient\Capability\ICanHandleHttpResponses; use Friendica\Network\HTTPException\NotImplementedException; use GuzzleHttp\Psr7\Response; use Psr\Http\Message\ResponseInterface; @@ -30,7 +30,7 @@ use Psr\Http\Message\ResponseInterface; /** * A content wrapper class for Guzzle call results */ -class GuzzleResponse extends Response implements IHTTPResult, ResponseInterface +class GuzzleResponse extends Response implements ICanHandleHttpResponses, ResponseInterface { /** @var string The URL */ private $url; @@ -79,68 +79,72 @@ class GuzzleResponse extends Response implements IHTTPResult, ResponseInterface } /** {@inheritDoc} */ - public function getReturnCode() + public function getReturnCode(): string { return $this->getStatusCode(); } /** {@inheritDoc} */ - public function getContentType() + public function getContentType(): string { $contentTypes = $this->getHeader('Content-Type') ?? []; + return array_pop($contentTypes) ?? ''; } /** {@inheritDoc} */ - public function inHeader(string $field) + public function inHeader(string $field): bool { return $this->hasHeader($field); } /** {@inheritDoc} */ - public function getHeaderArray() + public function getHeaderArray(): array { return $this->getHeaders(); } /** {@inheritDoc} */ - public function isSuccess() + public function isSuccess(): bool { return $this->isSuccess; } /** {@inheritDoc} */ - public function getUrl() + public function getUrl(): string { return $this->url; } /** {@inheritDoc} */ - public function getRedirectUrl() + public function getRedirectUrl(): string { return $this->url; } - /** {@inheritDoc} */ - public function isRedirectUrl() + /** {@inheritDoc} + * + * @throws NotImplementedException + */ + public function isRedirectUrl(): bool { throw new NotImplementedException(); } /** {@inheritDoc} */ - public function getErrorNumber() + public function getErrorNumber(): int { return $this->errorNumber; } /** {@inheritDoc} */ - public function getError() + public function getError(): string { return $this->error; } /** {@inheritDoc} */ - public function isTimeout() + public function isTimeout(): bool { return $this->isTimeout; } diff --git a/src/Network/Probe.php b/src/Network/Probe.php index 23c115eab..64855b83a 100644 --- a/src/Network/Probe.php +++ b/src/Network/Probe.php @@ -34,6 +34,7 @@ use Friendica\Model\Contact; use Friendica\Model\GServer; use Friendica\Model\Profile; use Friendica\Model\User; +use Friendica\Network\HTTPClient\Client\HttpClientOptions; use Friendica\Protocol\ActivityNamespace; use Friendica\Protocol\ActivityPub; use Friendica\Protocol\Email; @@ -170,7 +171,7 @@ class Probe Logger::info('Probing', ['host' => $host, 'ssl_url' => $ssl_url, 'url' => $url, 'callstack' => System::callstack(20)]); $xrd = null; - $curlResult = DI::httpClient()->get($ssl_url, [HTTPClientOptions::TIMEOUT => $xrd_timeout, HTTPClientOptions::ACCEPT_CONTENT => ['application/xrd+xml']]); + $curlResult = DI::httpClient()->get($ssl_url, [HttpClientOptions::TIMEOUT => $xrd_timeout, HttpClientOptions::ACCEPT_CONTENT => ['application/xrd+xml']]); $ssl_connection_error = ($curlResult->getErrorNumber() == CURLE_COULDNT_CONNECT) || ($curlResult->getReturnCode() == 0); if ($curlResult->isSuccess()) { $xml = $curlResult->getBody(); @@ -187,7 +188,7 @@ class Probe } if (!is_object($xrd) && !empty($url)) { - $curlResult = DI::httpClient()->get($url, [HTTPClientOptions::TIMEOUT => $xrd_timeout, HTTPClientOptions::ACCEPT_CONTENT => ['application/xrd+xml']]); + $curlResult = DI::httpClient()->get($url, [HttpClientOptions::TIMEOUT => $xrd_timeout, HttpClientOptions::ACCEPT_CONTENT => ['application/xrd+xml']]); $connection_error = ($curlResult->getErrorNumber() == CURLE_COULDNT_CONNECT) || ($curlResult->getReturnCode() == 0); if ($curlResult->isTimeout()) { Logger::info('Probing timeout', ['url' => $url]); @@ -429,7 +430,7 @@ class Probe */ private static function getHideStatus($url) { - $curlResult = DI::httpClient()->get($url, [HTTPClientOptions::CONTENT_LENGTH => 1000000]); + $curlResult = DI::httpClient()->get($url, [HttpClientOptions::CONTENT_LENGTH => 1000000]); if (!$curlResult->isSuccess()) { return false; } @@ -950,7 +951,7 @@ class Probe { $xrd_timeout = DI::config()->get('system', 'xrd_timeout', 20); - $curlResult = DI::httpClient()->get($url, [HTTPClientOptions::TIMEOUT => $xrd_timeout, HTTPClientOptions::ACCEPT_CONTENT => [$type]]); + $curlResult = DI::httpClient()->get($url, [HttpClientOptions::TIMEOUT => $xrd_timeout, HttpClientOptions::ACCEPT_CONTENT => [$type]]); if ($curlResult->isTimeout()) { self::$istimeout = true; return []; diff --git a/src/Protocol/OStatus.php b/src/Protocol/OStatus.php index 46f68086b..ca8a76b6b 100644 --- a/src/Protocol/OStatus.php +++ b/src/Protocol/OStatus.php @@ -38,7 +38,7 @@ use Friendica\Model\ItemURI; use Friendica\Model\Post; use Friendica\Model\Tag; use Friendica\Model\User; -use Friendica\Network\HTTPClientOptions; +use Friendica\Network\HTTPClient\Client\HttpClientOptions; use Friendica\Network\Probe; use Friendica\Util\DateTimeFormat; use Friendica\Util\Images; @@ -728,7 +728,7 @@ class OStatus self::$conv_list[$conversation] = true; - $curlResult = DI::httpClient()->get($conversation, [HTTPClientOptions::ACCEPT_CONTENT => ['application/atom+xml', 'text/html']]); + $curlResult = DI::httpClient()->get($conversation, [HttpClientOptions::ACCEPT_CONTENT => ['application/atom+xml', 'text/html']]); if (!$curlResult->isSuccess() || empty($curlResult->getBody())) { return; @@ -922,7 +922,7 @@ class OStatus } $stored = false; - $curlResult = DI::httpClient()->get($related, [HTTPClientOptions::ACCEPT_CONTENT => ['application/atom+xml', 'text/html']]); + $curlResult = DI::httpClient()->get($related, [HttpClientOptions::ACCEPT_CONTENT => ['application/atom+xml', 'text/html']]); if (!$curlResult->isSuccess() || empty($curlResult->getBody())) { return; diff --git a/src/Util/HTTPSignature.php b/src/Util/HTTPSignature.php index f11dbcceb..36919b5b6 100644 --- a/src/Util/HTTPSignature.php +++ b/src/Util/HTTPSignature.php @@ -28,9 +28,9 @@ use Friendica\DI; use Friendica\Model\APContact; use Friendica\Model\Contact; use Friendica\Model\User; -use Friendica\Network\CurlResult; -use Friendica\Network\HTTPClientOptions; -use Friendica\Network\IHTTPResult; +use Friendica\Network\HTTPClient\Response\CurlResult; +use Friendica\Network\HTTPClient\Client\HttpClientOptions; +use Friendica\Network\HTTPClient\Capability\ICanHandleHttpResponses; /** * Implements HTTP Signatures per draft-cavage-http-signatures-07. @@ -414,7 +414,7 @@ class HTTPSignature * 'nobody' => only return the header * 'cookiejar' => path to cookie jar file * - * @return IHTTPResult CurlResult + * @return \Friendica\Network\HTTPClient\Capability\ICanHandleHttpResponses CurlResult * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ public static function fetchRaw($request, $uid = 0, $opts = ['accept_content' => ['application/activity+json', 'application/ld+json']]) @@ -450,7 +450,7 @@ class HTTPSignature } $curl_opts = $opts; - $curl_opts[HTTPClientOptions::HEADERS] = $header; + $curl_opts[HttpClientOptions::HEADERS] = $header; if (!empty($opts['nobody'])) { $curlResult = DI::httpClient()->head($request, $curl_opts); diff --git a/src/Util/ParseUrl.php b/src/Util/ParseUrl.php index 589164952..6c3c4a025 100644 --- a/src/Util/ParseUrl.php +++ b/src/Util/ParseUrl.php @@ -30,7 +30,7 @@ use Friendica\Database\Database; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Network\HTTPException; -use Friendica\Network\HTTPClientOptions; +use Friendica\Network\HTTPClient\Client\HttpClientOptions; /** * Get information about a given URL @@ -214,7 +214,7 @@ class ParseUrl return $siteinfo; } - $curlResult = DI::httpClient()->get($url, [HTTPClientOptions::CONTENT_LENGTH => 1000000]); + $curlResult = DI::httpClient()->get($url, [HttpClientOptions::CONTENT_LENGTH => 1000000]); if (!$curlResult->isSuccess() || empty($curlResult->getBody())) { return $siteinfo; } diff --git a/src/Worker/OnePoll.php b/src/Worker/OnePoll.php index 99d5054ca..6d05e6cdc 100644 --- a/src/Worker/OnePoll.php +++ b/src/Worker/OnePoll.php @@ -29,7 +29,7 @@ use Friendica\Model\Contact; use Friendica\Model\Item; use Friendica\Model\Post; use Friendica\Model\User; -use Friendica\Network\HTTPClientOptions; +use Friendica\Network\HTTPClient\Client\HttpClientOptions; use Friendica\Protocol\Activity; use Friendica\Protocol\ActivityPub; use Friendica\Protocol\Email; @@ -153,7 +153,7 @@ class OnePoll } $cookiejar = tempnam(get_temppath(), 'cookiejar-onepoll-'); - $curlResult = DI::httpClient()->get($contact['poll'], [HTTPClientOptions::COOKIEJAR => $cookiejar]); + $curlResult = DI::httpClient()->get($contact['poll'], [HttpClientOptions::COOKIEJAR => $cookiejar]); unlink($cookiejar); if ($curlResult->isTimeout()) { diff --git a/static/dependencies.config.php b/static/dependencies.config.php index 042949e60..dad374d8d 100644 --- a/static/dependencies.config.php +++ b/static/dependencies.config.php @@ -224,8 +224,8 @@ return [ ['getBackend', [], Dice::CHAIN_CALL], ], ], - Network\IHTTPClient::class => [ - 'instanceOf' => Factory\HTTPClientFactory::class, + Network\HTTPClient\Capability\ICanRequestPerHttp::class => [ + 'instanceOf' => Network\HTTPClient\Factory\HttpClient::class, 'call' => [ ['createClient', [], Dice::CHAIN_CALL], ], diff --git a/tests/DiceHttpMockHandlerTrait.php b/tests/DiceHttpMockHandlerTrait.php index 969b76b5b..7f77d7e4f 100644 --- a/tests/DiceHttpMockHandlerTrait.php +++ b/tests/DiceHttpMockHandlerTrait.php @@ -23,8 +23,8 @@ namespace Friendica\Test; use Dice\Dice; use Friendica\DI; -use Friendica\Factory\HTTPClientFactory; -use Friendica\Network\IHTTPClient; +use Friendica\Network\HTTPClient\Factory\HttpClient; +use Friendica\Network\HTTPClient\Capability\ICanRequestPerHttp; use GuzzleHttp\HandlerStack; /** @@ -49,8 +49,8 @@ trait DiceHttpMockHandlerTrait $dice = DI::getDice(); // addRule() clones the current instance and returns a new one, so no concurrency problems :-) - $newDice = $dice->addRule(IHTTPClient::class, [ - 'instanceOf' => HTTPClientFactory::class, + $newDice = $dice->addRule(ICanRequestPerHttp::class, [ + 'instanceOf' => HttpClient::class, 'call' => [ ['createClient', [$this->httpRequestHandler], Dice::CHAIN_CALL], ], diff --git a/tests/src/Core/InstallerTest.php b/tests/src/Core/InstallerTest.php index 4742d41d8..8db5a7d5c 100644 --- a/tests/src/Core/InstallerTest.php +++ b/tests/src/Core/InstallerTest.php @@ -25,8 +25,8 @@ namespace Friendica\Core; use Dice\Dice; use Friendica\Core\Config\ValueObject\Cache; use Friendica\DI; -use Friendica\Network\IHTTPResult; -use Friendica\Network\IHTTPClient; +use Friendica\Network\HTTPClient\Capability\ICanHandleHttpResponses; +use Friendica\Network\HTTPClient\Capability\ICanRequestPerHttp; use Friendica\Test\MockedTest; use Friendica\Test\Util\VFSTrait; use Mockery; @@ -319,7 +319,7 @@ class InstallerTest extends MockedTest $this->l10nMock->shouldReceive('t')->andReturnUsing(function ($args) { return $args; }); // Mocking the CURL Response - $IHTTPResult = Mockery::mock(IHTTPResult::class); + $IHTTPResult = Mockery::mock(ICanHandleHttpResponses::class); $IHTTPResult ->shouldReceive('getReturnCode') ->andReturn('404'); @@ -331,7 +331,7 @@ class InstallerTest extends MockedTest ->andReturn('test Error'); // Mocking the CURL Request - $networkMock = Mockery::mock(IHTTPClient::class); + $networkMock = Mockery::mock(ICanRequestPerHttp::class); $networkMock ->shouldReceive('fetchFull') ->with('https://test/install/testrewrite') @@ -342,7 +342,7 @@ class InstallerTest extends MockedTest ->andReturn($IHTTPResult); $this->dice->shouldReceive('create') - ->with(IHTTPClient::class) + ->with(ICanRequestPerHttp::class) ->andReturn($networkMock); DI::init($this->dice); @@ -366,19 +366,19 @@ class InstallerTest extends MockedTest $this->l10nMock->shouldReceive('t')->andReturnUsing(function ($args) { return $args; }); // Mocking the failed CURL Response - $IHTTPResultF = Mockery::mock(IHTTPResult::class); + $IHTTPResultF = Mockery::mock(ICanHandleHttpResponses::class); $IHTTPResultF ->shouldReceive('getReturnCode') ->andReturn('404'); // Mocking the working CURL Response - $IHTTPResultW = Mockery::mock(IHTTPResult::class); + $IHTTPResultW = Mockery::mock(ICanHandleHttpResponses::class); $IHTTPResultW ->shouldReceive('getReturnCode') ->andReturn('204'); // Mocking the CURL Request - $networkMock = Mockery::mock(IHTTPClient::class); + $networkMock = Mockery::mock(ICanRequestPerHttp::class); $networkMock ->shouldReceive('fetchFull') ->with('https://test/install/testrewrite') @@ -389,7 +389,7 @@ class InstallerTest extends MockedTest ->andReturn($IHTTPResultW); $this->dice->shouldReceive('create') - ->with(IHTTPClient::class) + ->with(ICanRequestPerHttp::class) ->andReturn($networkMock); DI::init($this->dice); diff --git a/tests/src/Core/Storage/Repository/StorageManagerTest.php b/tests/src/Core/Storage/Repository/StorageManagerTest.php index 0ba28af82..c090c2696 100644 --- a/tests/src/Core/Storage/Repository/StorageManagerTest.php +++ b/tests/src/Core/Storage/Repository/StorageManagerTest.php @@ -40,7 +40,7 @@ use Friendica\DI; use Friendica\Core\Config\Factory\Config; use Friendica\Core\Config\Repository; use Friendica\Core\Storage\Type; -use Friendica\Network\HTTPClient; +use Friendica\Network\HTTPClient\Client\HttpClientCan; use Friendica\Test\DatabaseTest; use Friendica\Test\Util\Database\StaticDatabase; use Friendica\Test\Util\VFSTrait; @@ -61,7 +61,7 @@ class StorageManagerTest extends DatabaseTest private $logger; /** @var L10n */ private $l10n; - /** @var HTTPClient */ + /** @var HttpClientCan */ private $httpRequest; protected function setUp(): void @@ -93,7 +93,7 @@ class StorageManagerTest extends DatabaseTest $this->l10n = \Mockery::mock(L10n::class); - $this->httpRequest = \Mockery::mock(HTTPClient::class); + $this->httpRequest = \Mockery::mock(HttpClientCan::class); } protected function tearDown(): void diff --git a/tests/src/Network/HTTPClientTest.php b/tests/src/Network/HTTPClient/Client/HTTPClientTest.php similarity index 92% rename from tests/src/Network/HTTPClientTest.php rename to tests/src/Network/HTTPClient/Client/HTTPClientTest.php index 0e3f74c09..0e2c0b3e3 100644 --- a/tests/src/Network/HTTPClientTest.php +++ b/tests/src/Network/HTTPClient/Client/HTTPClientTest.php @@ -1,6 +1,6 @@ makePartial(); - $dice = $dice->addRules(include __DIR__ . '/../../../static/dependencies.config.php'); + $dice = $dice->addRules(include __DIR__ . '/../../../../../static/dependencies.config.php'); $logger = new NullLogger(); $dice->shouldReceive('create') @@ -52,12 +52,12 @@ class CurlResultTest extends TestCase */ public function testNormal() { - $header = file_get_contents(__DIR__ . '/../../datasets/curl/about.head'); - $headerArray = include(__DIR__ . '/../../datasets/curl/about.head.php'); - $body = file_get_contents(__DIR__ . '/../../datasets/curl/about.body'); + $header = file_get_contents(__DIR__ . '/../../../../datasets/curl/about.head'); + $headerArray = include(__DIR__ . '/../../../../datasets/curl/about.head.php'); + $body = file_get_contents(__DIR__ . '/../../../../datasets/curl/about.body'); - $curlResult = new CurlResult('https://test.local', $header . $body, [ + $curlResult = new \Friendica\Network\HTTPClient\Response\CurlResult('https://test.local', $header . $body, [ 'http_code' => 200, 'content_type' => 'text/html; charset=utf-8', 'url' => 'https://test.local' @@ -80,12 +80,12 @@ class CurlResultTest extends TestCase */ public function testRedirect() { - $header = file_get_contents(__DIR__ . '/../../datasets/curl/about.head'); - $headerArray = include(__DIR__ . '/../../datasets/curl/about.head.php'); - $body = file_get_contents(__DIR__ . '/../../datasets/curl/about.body'); + $header = file_get_contents(__DIR__ . '/../../../../datasets/curl/about.head'); + $headerArray = include(__DIR__ . '/../../../../datasets/curl/about.head.php'); + $body = file_get_contents(__DIR__ . '/../../../../datasets/curl/about.body'); - $curlResult = new CurlResult('https://test.local/test/it', $header . $body, [ + $curlResult = new \Friendica\Network\HTTPClient\Response\CurlResult('https://test.local/test/it', $header . $body, [ 'http_code' => 301, 'content_type' => 'text/html; charset=utf-8', 'url' => 'https://test.local/test/it', @@ -107,12 +107,12 @@ class CurlResultTest extends TestCase */ public function testTimeout() { - $header = file_get_contents(__DIR__ . '/../../datasets/curl/about.head'); - $headerArray = include(__DIR__ . '/../../datasets/curl/about.head.php'); - $body = file_get_contents(__DIR__ . '/../../datasets/curl/about.body'); + $header = file_get_contents(__DIR__ . '/../../../../datasets/curl/about.head'); + $headerArray = include(__DIR__ . '/../../../../datasets/curl/about.head.php'); + $body = file_get_contents(__DIR__ . '/../../../../datasets/curl/about.body'); - $curlResult = new CurlResult('https://test.local/test/it', $header . $body, [ + $curlResult = new \Friendica\Network\HTTPClient\Response\CurlResult('https://test.local/test/it', $header . $body, [ 'http_code' => 500, 'content_type' => 'text/html; charset=utf-8', 'url' => 'https://test.local/test/it', @@ -136,9 +136,9 @@ class CurlResultTest extends TestCase */ public function testRedirectHeader() { - $header = file_get_contents(__DIR__ . '/../../datasets/curl/about.redirect'); - $headerArray = include(__DIR__ . '/../../datasets/curl/about.redirect.php'); - $body = file_get_contents(__DIR__ . '/../../datasets/curl/about.body'); + $header = file_get_contents(__DIR__ . '/../../../../datasets/curl/about.redirect'); + $headerArray = include(__DIR__ . '/../../../../datasets/curl/about.redirect.php'); + $body = file_get_contents(__DIR__ . '/../../../../datasets/curl/about.body'); $curlResult = new CurlResult('https://test.local/test/it?key=value', $header . $body, [ @@ -162,10 +162,10 @@ class CurlResultTest extends TestCase */ public function testInHeader() { - $header = file_get_contents(__DIR__ . '/../../datasets/curl/about.head'); - $body = file_get_contents(__DIR__ . '/../../datasets/curl/about.body'); + $header = file_get_contents(__DIR__ . '/../../../../datasets/curl/about.head'); + $body = file_get_contents(__DIR__ . '/../../../../datasets/curl/about.body'); - $curlResult = new CurlResult('https://test.local', $header . $body, [ + $curlResult = new \Friendica\Network\HTTPClient\Response\CurlResult('https://test.local', $header . $body, [ 'http_code' => 200, 'content_type' => 'text/html; charset=utf-8', 'url' => 'https://test.local' @@ -179,10 +179,10 @@ class CurlResultTest extends TestCase */ public function testGetHeaderArray() { - $header = file_get_contents(__DIR__ . '/../../datasets/curl/about.head'); - $body = file_get_contents(__DIR__ . '/../../datasets/curl/about.body'); + $header = file_get_contents(__DIR__ . '/../../../../datasets/curl/about.head'); + $body = file_get_contents(__DIR__ . '/../../../../datasets/curl/about.body'); - $curlResult = new CurlResult('https://test.local', $header . $body, [ + $curlResult = new \Friendica\Network\HTTPClient\Response\CurlResult('https://test.local', $header . $body, [ 'http_code' => 200, 'content_type' => 'text/html; charset=utf-8', 'url' => 'https://test.local' @@ -199,8 +199,8 @@ class CurlResultTest extends TestCase */ public function testGetHeaderWithParam() { - $header = file_get_contents(__DIR__ . '/../../datasets/curl/about.head'); - $body = file_get_contents(__DIR__ . '/../../datasets/curl/about.body'); + $header = file_get_contents(__DIR__ . '/../../../../datasets/curl/about.head'); + $body = file_get_contents(__DIR__ . '/../../../../datasets/curl/about.body'); $curlResult = new CurlResult('https://test.local', $header . $body, [ 'http_code' => 200, From f4ea74447e8a487bdd7236bdc6789a5d53fa2226 Mon Sep 17 00:00:00 2001 From: Philipp Date: Fri, 29 Oct 2021 08:03:59 +0200 Subject: [PATCH 18/19] Add Feedback :-) --- .../Logger/Exception/LogLevelException.php | 13 +++++++ src/Core/Logger/Factory/Logger.php | 39 ++++++++++++++----- src/Core/Logger/Type/StreamLogger.php | 8 ++-- src/Core/Logger/Type/SyslogLogger.php | 12 +++--- src/DI.php | 4 +- ...stPerHttp.php => ICanSendHttpRequests.php} | 2 +- .../{HttpClientCan.php => HttpClient.php} | 4 +- src/Network/HTTPClient/Factory/HttpClient.php | 8 ++-- static/dependencies.config.php | 4 +- tests/DiceHttpMockHandlerTrait.php | 4 +- tests/src/Core/InstallerTest.php | 10 ++--- tests/src/Core/Logger/StreamLoggerTest.php | 5 ++- tests/src/Core/Logger/SyslogLoggerTest.php | 5 ++- .../Storage/Repository/StorageManagerTest.php | 6 +-- 14 files changed, 80 insertions(+), 44 deletions(-) create mode 100644 src/Core/Logger/Exception/LogLevelException.php rename src/Network/HTTPClient/Capability/{ICanRequestPerHttp.php => ICanSendHttpRequests.php} (99%) rename src/Network/HTTPClient/Client/{HttpClientCan.php => HttpClient.php} (98%) diff --git a/src/Core/Logger/Exception/LogLevelException.php b/src/Core/Logger/Exception/LogLevelException.php new file mode 100644 index 000000000..96abd2a9a --- /dev/null +++ b/src/Core/Logger/Exception/LogLevelException.php @@ -0,0 +1,13 @@ +get('system', 'debugging', false))) { $logger = new NullLogger(); @@ -84,8 +85,8 @@ class Logger } $introspection = new Introspection(self::$ignoreClassList); - $level = $config->get('system', 'loglevel'); - $loglevel = self::mapLegacyConfigDebugLevel((string)$level); + $minLevel = $minLevel ?? $config->get('system', 'loglevel'); + $loglevel = self::mapLegacyConfigDebugLevel((string)$minLevel); switch ($config->get('system', 'logger_config', 'stream')) { case 'monolog': @@ -106,8 +107,12 @@ class Logger static::addStreamHandler($logger, $stream, $loglevel); } catch (\Throwable $e) { // No Logger .. - /// @todo isn't it possible to give the admin any hint about this wrong configuration? - $logger = new NullLogger(); + try { + $logger = new SyslogLogger($this->channel, $introspection, $loglevel); + } catch (\Throwable $e) { + // No logger ... + $logger = new NullLogger(); + } } } break; @@ -115,9 +120,12 @@ class Logger case 'syslog': try { $logger = new SyslogLogger($this->channel, $introspection, $loglevel); + } catch (LogLevelException $exception) { + // If there's a wrong config value for loglevel, try again with standard + $logger = $this->create($database, $config, $profiler, $fileSystem, LogLevel::NOTICE); + $logger->warning('Invalid loglevel set in config.', ['loglevel' => $loglevel]); } catch (\Throwable $e) { // No logger ... - /// @todo isn't it possible to give the admin any hint about this wrong configuration? $logger = new NullLogger(); } break; @@ -129,14 +137,25 @@ class Logger if (!is_file($stream) || is_writable($stream)) { try { $logger = new StreamLogger($this->channel, $stream, $introspection, $fileSystem, $loglevel); + } catch (LogLevelException $exception) { + // If there's a wrong config value for loglevel, try again with standard + $logger = $this->create($database, $config, $profiler, $fileSystem, LogLevel::NOTICE); + $logger->warning('Invalid loglevel set in config.', ['loglevel' => $loglevel]); } catch (\Throwable $t) { // No logger ... - /// @todo isn't it possible to give the admin any hint about this wrong configuration? $logger = new NullLogger(); } } else { - /// @todo isn't it possible to give the admin any hint about this wrong configuration? - $logger = new NullLogger(); + try { + $logger = new SyslogLogger($this->channel, $introspection, $loglevel); + } catch (LogLevelException $exception) { + // If there's a wrong config value for loglevel, try again with standard + $logger = $this->create($database, $config, $profiler, $fileSystem, LogLevel::NOTICE); + $logger->warning('Invalid loglevel set in config.', ['loglevel' => $loglevel]); + } catch (\Throwable $e) { + // No logger ... + $logger = new NullLogger(); + } } break; } diff --git a/src/Core/Logger/Type/StreamLogger.php b/src/Core/Logger/Type/StreamLogger.php index be0283d0e..f67aef9a4 100644 --- a/src/Core/Logger/Type/StreamLogger.php +++ b/src/Core/Logger/Type/StreamLogger.php @@ -23,6 +23,7 @@ namespace Friendica\Core\Logger\Type; use Friendica\Core\Logger\Exception\LoggerArgumentException; use Friendica\Core\Logger\Exception\LoggerException; +use Friendica\Core\Logger\Exception\LogLevelException; use Friendica\Util\DateTimeFormat; use Friendica\Util\FileSystem; use Friendica\Util\Introspection; @@ -83,6 +84,7 @@ class StreamLogger extends AbstractLogger * @param string $level The minimum loglevel at which this logger will be triggered * * @throws LoggerArgumentException + * @throws LogLevelException */ public function __construct($channel, $stream, Introspection $introspection, FileSystem $fileSystem, string $level = LogLevel::DEBUG) { @@ -102,7 +104,7 @@ class StreamLogger extends AbstractLogger if (array_key_exists($level, $this->levelToInt)) { $this->logLevel = $this->levelToInt[$level]; } else { - throw new LoggerArgumentException(sprintf('The level "%s" is not valid.', $level)); + throw new LogLevelException(sprintf('The level "%s" is not valid.', $level)); } $this->checkStream(); @@ -127,12 +129,12 @@ class StreamLogger extends AbstractLogger * @return void * * @throws LoggerException - * @throws LoggerArgumentException + * @throws LogLevelException */ protected function addEntry($level, string $message, array $context = []) { if (!array_key_exists($level, $this->levelToInt)) { - throw new LoggerArgumentException(sprintf('The level "%s" is not valid.', $level)); + throw new LogLevelException(sprintf('The level "%s" is not valid.', $level)); } $logLevel = $this->levelToInt[$level]; diff --git a/src/Core/Logger/Type/SyslogLogger.php b/src/Core/Logger/Type/SyslogLogger.php index 667b44ccc..024d47b31 100644 --- a/src/Core/Logger/Type/SyslogLogger.php +++ b/src/Core/Logger/Type/SyslogLogger.php @@ -21,10 +21,9 @@ namespace Friendica\Core\Logger\Type; -use Friendica\Core\Logger\Exception\LoggerArgumentException; use Friendica\Core\Logger\Exception\LoggerException; +use Friendica\Core\Logger\Exception\LogLevelException; use Friendica\Util\Introspection; -use Psr\Log\InvalidArgumentException; use Psr\Log\LogLevel; /** @@ -99,7 +98,8 @@ class SyslogLogger extends AbstractLogger * @param int $logOpts Indicates what logging options will be used when generating a log message * @param int $logFacility Used to specify what type of program is logging the message * - * @throws LoggerArgumentException + * @throws LogLevelException + * @throws LoggerException */ public function __construct($channel, Introspection $introspection, string $level = LogLevel::NOTICE, int $logOpts = LOG_PID, int $logFacility = LOG_USER) { @@ -117,7 +117,7 @@ class SyslogLogger extends AbstractLogger * @param string $message * @param array $context * - * @throws LoggerArgumentException in case the level isn't valid + * @throws LogLevelException in case the level isn't valid * @throws LoggerException In case the syslog cannot be opened for writing */ protected function addEntry($level, string $message, array $context = []) @@ -139,12 +139,12 @@ class SyslogLogger extends AbstractLogger * * @return int The SysLog priority * - * @throws LoggerArgumentException If the loglevel isn't valid + * @throws LogLevelException If the loglevel isn't valid */ public function mapLevelToPriority(string $level): int { if (!array_key_exists($level, $this->logLevels)) { - throw new LoggerArgumentException(sprintf('The level "%s" is not valid.', $level)); + throw new LogLevelException(sprintf('The level "%s" is not valid.', $level)); } return $this->logLevels[$level]; diff --git a/src/DI.php b/src/DI.php index ecc65bbc9..823644784 100644 --- a/src/DI.php +++ b/src/DI.php @@ -415,11 +415,11 @@ abstract class DI // /** - * @return Network\HTTPClient\Capability\ICanRequestPerHttp + * @return Network\HTTPClient\Capability\ICanSendHttpRequests */ public static function httpClient() { - return self::$dice->create(Network\HTTPClient\Capability\ICanRequestPerHttp::class); + return self::$dice->create(Network\HTTPClient\Capability\ICanSendHttpRequests::class); } // diff --git a/src/Network/HTTPClient/Capability/ICanRequestPerHttp.php b/src/Network/HTTPClient/Capability/ICanSendHttpRequests.php similarity index 99% rename from src/Network/HTTPClient/Capability/ICanRequestPerHttp.php rename to src/Network/HTTPClient/Capability/ICanSendHttpRequests.php index b7ddcb254..24eb6dc50 100644 --- a/src/Network/HTTPClient/Capability/ICanRequestPerHttp.php +++ b/src/Network/HTTPClient/Capability/ICanSendHttpRequests.php @@ -26,7 +26,7 @@ use GuzzleHttp\Exception\TransferException; /** * Interface for calling HTTP requests and returning their responses */ -interface ICanRequestPerHttp +interface ICanSendHttpRequests { /** * Fetches the content of an URL diff --git a/src/Network/HTTPClient/Client/HttpClientCan.php b/src/Network/HTTPClient/Client/HttpClient.php similarity index 98% rename from src/Network/HTTPClient/Client/HttpClientCan.php rename to src/Network/HTTPClient/Client/HttpClient.php index ea07a5c83..33bb8357e 100644 --- a/src/Network/HTTPClient/Client/HttpClientCan.php +++ b/src/Network/HTTPClient/Client/HttpClient.php @@ -24,7 +24,7 @@ namespace Friendica\Network\HTTPClient\Client; use Friendica\Core\System; use Friendica\Network\HTTPClient\Response\CurlResult; use Friendica\Network\HTTPClient\Response\GuzzleResponse; -use Friendica\Network\HTTPClient\Capability\ICanRequestPerHttp; +use Friendica\Network\HTTPClient\Capability\ICanSendHttpRequests; use Friendica\Network\HTTPClient\Capability\ICanHandleHttpResponses; use Friendica\Network\HTTPException\InternalServerErrorException; use Friendica\Util\Network; @@ -42,7 +42,7 @@ use Psr\Log\LoggerInterface; /** * Performs HTTP requests to a given URL */ -class HttpClientCan implements ICanRequestPerHttp +class HttpClient implements ICanSendHttpRequests { /** @var LoggerInterface */ private $logger; diff --git a/src/Network/HTTPClient/Factory/HttpClient.php b/src/Network/HTTPClient/Factory/HttpClient.php index 732f01b34..c7ee68a92 100644 --- a/src/Network/HTTPClient/Factory/HttpClient.php +++ b/src/Network/HTTPClient/Factory/HttpClient.php @@ -6,7 +6,7 @@ use Friendica\App; use Friendica\BaseFactory; use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Network\HTTPClient\Client; -use Friendica\Network\HTTPClient\Capability\ICanRequestPerHttp; +use Friendica\Network\HTTPClient\Capability\ICanSendHttpRequests; use Friendica\Util\Profiler; use Friendica\Util\Strings; use GuzzleHttp; @@ -42,9 +42,9 @@ class HttpClient extends BaseFactory * * @param HandlerStack|null $handlerStack (optional) A handler replacement (just usefull at test environments) * - * @return ICanRequestPerHttp + * @return ICanSendHttpRequests */ - public function createClient(HandlerStack $handlerStack = null): ICanRequestPerHttp + public function createClient(HandlerStack $handlerStack = null): ICanSendHttpRequests { $proxy = $this->config->get('system', 'proxy'); @@ -108,6 +108,6 @@ class HttpClient extends BaseFactory // Some websites test the browser for cookie support, so this enhances results. $resolver->setCookieJar(get_temppath() .'/resolver-cookie-' . Strings::getRandomName(10)); - return new Client\HttpClientCan($logger, $this->profiler, $guzzle, $resolver); + return new Client\HttpClient($logger, $this->profiler, $guzzle, $resolver); } } diff --git a/static/dependencies.config.php b/static/dependencies.config.php index dad374d8d..a43fb368a 100644 --- a/static/dependencies.config.php +++ b/static/dependencies.config.php @@ -146,7 +146,7 @@ return [ 'index', ], 'call' => [ - ['create', ['index'], Dice::CHAIN_CALL], + ['create', [], Dice::CHAIN_CALL], ], ], '$devLogger' => [ @@ -224,7 +224,7 @@ return [ ['getBackend', [], Dice::CHAIN_CALL], ], ], - Network\HTTPClient\Capability\ICanRequestPerHttp::class => [ + Network\HTTPClient\Capability\ICanSendHttpRequests::class => [ 'instanceOf' => Network\HTTPClient\Factory\HttpClient::class, 'call' => [ ['createClient', [], Dice::CHAIN_CALL], diff --git a/tests/DiceHttpMockHandlerTrait.php b/tests/DiceHttpMockHandlerTrait.php index 7f77d7e4f..3381a3219 100644 --- a/tests/DiceHttpMockHandlerTrait.php +++ b/tests/DiceHttpMockHandlerTrait.php @@ -24,7 +24,7 @@ namespace Friendica\Test; use Dice\Dice; use Friendica\DI; use Friendica\Network\HTTPClient\Factory\HttpClient; -use Friendica\Network\HTTPClient\Capability\ICanRequestPerHttp; +use Friendica\Network\HTTPClient\Capability\ICanSendHttpRequests; use GuzzleHttp\HandlerStack; /** @@ -49,7 +49,7 @@ trait DiceHttpMockHandlerTrait $dice = DI::getDice(); // addRule() clones the current instance and returns a new one, so no concurrency problems :-) - $newDice = $dice->addRule(ICanRequestPerHttp::class, [ + $newDice = $dice->addRule(ICanSendHttpRequests::class, [ 'instanceOf' => HttpClient::class, 'call' => [ ['createClient', [$this->httpRequestHandler], Dice::CHAIN_CALL], diff --git a/tests/src/Core/InstallerTest.php b/tests/src/Core/InstallerTest.php index 8db5a7d5c..0e44f19a4 100644 --- a/tests/src/Core/InstallerTest.php +++ b/tests/src/Core/InstallerTest.php @@ -26,7 +26,7 @@ use Dice\Dice; use Friendica\Core\Config\ValueObject\Cache; use Friendica\DI; use Friendica\Network\HTTPClient\Capability\ICanHandleHttpResponses; -use Friendica\Network\HTTPClient\Capability\ICanRequestPerHttp; +use Friendica\Network\HTTPClient\Capability\ICanSendHttpRequests; use Friendica\Test\MockedTest; use Friendica\Test\Util\VFSTrait; use Mockery; @@ -331,7 +331,7 @@ class InstallerTest extends MockedTest ->andReturn('test Error'); // Mocking the CURL Request - $networkMock = Mockery::mock(ICanRequestPerHttp::class); + $networkMock = Mockery::mock(ICanSendHttpRequests::class); $networkMock ->shouldReceive('fetchFull') ->with('https://test/install/testrewrite') @@ -342,7 +342,7 @@ class InstallerTest extends MockedTest ->andReturn($IHTTPResult); $this->dice->shouldReceive('create') - ->with(ICanRequestPerHttp::class) + ->with(ICanSendHttpRequests::class) ->andReturn($networkMock); DI::init($this->dice); @@ -378,7 +378,7 @@ class InstallerTest extends MockedTest ->andReturn('204'); // Mocking the CURL Request - $networkMock = Mockery::mock(ICanRequestPerHttp::class); + $networkMock = Mockery::mock(ICanSendHttpRequests::class); $networkMock ->shouldReceive('fetchFull') ->with('https://test/install/testrewrite') @@ -389,7 +389,7 @@ class InstallerTest extends MockedTest ->andReturn($IHTTPResultW); $this->dice->shouldReceive('create') - ->with(ICanRequestPerHttp::class) + ->with(ICanSendHttpRequests::class) ->andReturn($networkMock); DI::init($this->dice); diff --git a/tests/src/Core/Logger/StreamLoggerTest.php b/tests/src/Core/Logger/StreamLoggerTest.php index 65ef76ea3..16c8786be 100644 --- a/tests/src/Core/Logger/StreamLoggerTest.php +++ b/tests/src/Core/Logger/StreamLoggerTest.php @@ -23,6 +23,7 @@ namespace Friendica\Test\src\Core\Logger; use Friendica\Core\Logger\Exception\LoggerArgumentException; use Friendica\Core\Logger\Exception\LoggerException; +use Friendica\Core\Logger\Exception\LogLevelException; use Friendica\Util\FileSystem; use Friendica\Test\Util\VFSTrait; use Friendica\Core\Logger\Type\StreamLogger; @@ -160,7 +161,7 @@ class StreamLoggerTest extends AbstractLoggerTest */ public function testWrongMinimumLevel() { - $this->expectException(LoggerArgumentException::class); + $this->expectException(LogLevelException::class); $this->expectExceptionMessageMatches("/The level \".*\" is not valid./"); $logger = new StreamLogger('test', 'file.text', $this->introspection, $this->fileSystem, 'NOPE'); @@ -171,7 +172,7 @@ class StreamLoggerTest extends AbstractLoggerTest */ public function testWrongLogLevel() { - $this->expectException(LoggerArgumentException::class); + $this->expectException(LogLevelException::class); $this->expectExceptionMessageMatches("/The level \".*\" is not valid./"); $logfile = vfsStream::newFile('friendica.log') diff --git a/tests/src/Core/Logger/SyslogLoggerTest.php b/tests/src/Core/Logger/SyslogLoggerTest.php index 8ba2ebc08..fc3525e0b 100644 --- a/tests/src/Core/Logger/SyslogLoggerTest.php +++ b/tests/src/Core/Logger/SyslogLoggerTest.php @@ -23,6 +23,7 @@ namespace Friendica\Test\src\Core\Logger; use Friendica\Core\Logger\Exception\LoggerArgumentException; use Friendica\Core\Logger\Exception\LoggerException; +use Friendica\Core\Logger\Exception\LogLevelException; use Friendica\Core\Logger\Type\SyslogLogger; use Psr\Log\LogLevel; @@ -64,7 +65,7 @@ class SyslogLoggerTest extends AbstractLoggerTest */ public function testWrongMinimumLevel() { - $this->expectException(LoggerArgumentException::class); + $this->expectException(LogLevelException::class); $this->expectExceptionMessageMatches("/The level \".*\" is not valid./"); $logger = new SyslogLoggerWrapper('test', $this->introspection, 'NOPE'); @@ -75,7 +76,7 @@ class SyslogLoggerTest extends AbstractLoggerTest */ public function testWrongLogLevel() { - $this->expectException(LoggerArgumentException::class); + $this->expectException(LogLevelException::class); $this->expectExceptionMessageMatches("/The level \".*\" is not valid./"); $logger = new SyslogLoggerWrapper('test', $this->introspection); diff --git a/tests/src/Core/Storage/Repository/StorageManagerTest.php b/tests/src/Core/Storage/Repository/StorageManagerTest.php index c090c2696..608e48f07 100644 --- a/tests/src/Core/Storage/Repository/StorageManagerTest.php +++ b/tests/src/Core/Storage/Repository/StorageManagerTest.php @@ -40,7 +40,7 @@ use Friendica\DI; use Friendica\Core\Config\Factory\Config; use Friendica\Core\Config\Repository; use Friendica\Core\Storage\Type; -use Friendica\Network\HTTPClient\Client\HttpClientCan; +use Friendica\Network\HTTPClient\Client\HttpClient; use Friendica\Test\DatabaseTest; use Friendica\Test\Util\Database\StaticDatabase; use Friendica\Test\Util\VFSTrait; @@ -61,7 +61,7 @@ class StorageManagerTest extends DatabaseTest private $logger; /** @var L10n */ private $l10n; - /** @var HttpClientCan */ + /** @var HttpClient */ private $httpRequest; protected function setUp(): void @@ -93,7 +93,7 @@ class StorageManagerTest extends DatabaseTest $this->l10n = \Mockery::mock(L10n::class); - $this->httpRequest = \Mockery::mock(HttpClientCan::class); + $this->httpRequest = \Mockery::mock(HttpClient::class); } protected function tearDown(): void From 22663c4ae5d6dcb61d5a1ff151b711e5e0b337cc Mon Sep 17 00:00:00 2001 From: Philipp Date: Fri, 29 Oct 2021 12:36:14 +0200 Subject: [PATCH 19/19] Move Introspection to Logger package --- src/Core/Logger/Factory/Logger.php | 2 +- src/Core/Logger/Type/AbstractLogger.php | 2 +- .../Type/Monolog/IntrospectionProcessor.php | 2 +- src/Core/Logger/Type/StreamLogger.php | 2 +- src/Core/Logger/Type/SyslogLogger.php | 2 +- src/{ => Core/Logger}/Util/Introspection.php | 19 +++++++++++-------- tests/src/Core/Logger/AbstractLoggerTest.php | 2 +- tests/src/Core/Logger/SyslogLoggerWrapper.php | 2 +- 8 files changed, 18 insertions(+), 15 deletions(-) rename src/{ => Core/Logger}/Util/Introspection.php (80%) diff --git a/src/Core/Logger/Factory/Logger.php b/src/Core/Logger/Factory/Logger.php index f9b32d932..8f555483c 100644 --- a/src/Core/Logger/Factory/Logger.php +++ b/src/Core/Logger/Factory/Logger.php @@ -27,7 +27,7 @@ use Friendica\Core; use Friendica\Core\Logger\Exception\LogLevelException; use Friendica\Database\Database; use Friendica\Util\FileSystem; -use Friendica\Util\Introspection; +use Friendica\Core\Logger\Util\Introspection; use Friendica\Core\Logger\Type\Monolog\DevelopHandler; use Friendica\Core\Logger\Type\Monolog\IntrospectionProcessor; use Friendica\Core\Logger\Type\ProfilerLogger; diff --git a/src/Core/Logger/Type/AbstractLogger.php b/src/Core/Logger/Type/AbstractLogger.php index 0b6d9f38f..e26f1705d 100644 --- a/src/Core/Logger/Type/AbstractLogger.php +++ b/src/Core/Logger/Type/AbstractLogger.php @@ -22,7 +22,7 @@ namespace Friendica\Core\Logger\Type; use Friendica\Core\Logger\Exception\LoggerException; -use Friendica\Util\Introspection; +use Friendica\Core\Logger\Util\Introspection; use Friendica\Util\Strings; use Psr\Log\LoggerInterface; use Psr\Log\LogLevel; diff --git a/src/Core/Logger/Type/Monolog/IntrospectionProcessor.php b/src/Core/Logger/Type/Monolog/IntrospectionProcessor.php index 756331b22..9da48ff36 100644 --- a/src/Core/Logger/Type/Monolog/IntrospectionProcessor.php +++ b/src/Core/Logger/Type/Monolog/IntrospectionProcessor.php @@ -21,7 +21,7 @@ namespace Friendica\Core\Logger\Type\Monolog; -use Friendica\Util\Introspection; +use Friendica\Core\Logger\Util\Introspection; use Monolog\Logger; use Monolog\Processor\ProcessorInterface; diff --git a/src/Core/Logger/Type/StreamLogger.php b/src/Core/Logger/Type/StreamLogger.php index f67aef9a4..8d4d8b577 100644 --- a/src/Core/Logger/Type/StreamLogger.php +++ b/src/Core/Logger/Type/StreamLogger.php @@ -26,7 +26,7 @@ use Friendica\Core\Logger\Exception\LoggerException; use Friendica\Core\Logger\Exception\LogLevelException; use Friendica\Util\DateTimeFormat; use Friendica\Util\FileSystem; -use Friendica\Util\Introspection; +use Friendica\Core\Logger\Util\Introspection; use Psr\Log\LogLevel; /** diff --git a/src/Core/Logger/Type/SyslogLogger.php b/src/Core/Logger/Type/SyslogLogger.php index 024d47b31..54cb32795 100644 --- a/src/Core/Logger/Type/SyslogLogger.php +++ b/src/Core/Logger/Type/SyslogLogger.php @@ -23,7 +23,7 @@ namespace Friendica\Core\Logger\Type; use Friendica\Core\Logger\Exception\LoggerException; use Friendica\Core\Logger\Exception\LogLevelException; -use Friendica\Util\Introspection; +use Friendica\Core\Logger\Util\Introspection; use Psr\Log\LogLevel; /** diff --git a/src/Util/Introspection.php b/src/Core/Logger/Util/Introspection.php similarity index 80% rename from src/Util/Introspection.php rename to src/Core/Logger/Util/Introspection.php index 540bfea72..7c2040bbf 100644 --- a/src/Util/Introspection.php +++ b/src/Core/Logger/Util/Introspection.php @@ -19,15 +19,17 @@ * */ -namespace Friendica\Util; +namespace Friendica\Core\Logger\Util; /** * Get Introspection information about the current call */ class Introspection { + /** @var int */ private $skipStackFramesCount; + /** @var string[] */ private $skipClassesPartials; private $skipFunctions = [ @@ -36,10 +38,10 @@ class Introspection ]; /** - * @param array $skipClassesPartials An array of classes to skip during logging - * @param int $skipStackFramesCount If the logger should use information from other hierarchy levels of the call + * @param string[] $skipClassesPartials An array of classes to skip during logging + * @param int $skipStackFramesCount If the logger should use information from other hierarchy levels of the call */ - public function __construct($skipClassesPartials = array(), $skipStackFramesCount = 0) + public function __construct(array $skipClassesPartials = [], int $skipStackFramesCount = 0) { $this->skipClassesPartials = $skipClassesPartials; $this->skipStackFramesCount = $skipStackFramesCount; @@ -47,6 +49,7 @@ class Introspection /** * Adds new classes to get skipped + * * @param array $classNames */ public function addClasses(array $classNames) @@ -59,7 +62,7 @@ class Introspection * * @return array */ - public function getRecord() + public function getRecord(): array { $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); @@ -73,8 +76,8 @@ class Introspection return [ 'file' => isset($trace[$i - 1]['file']) ? basename($trace[$i - 1]['file']) : null, - 'line' => isset($trace[$i - 1]['line']) ? $trace[$i - 1]['line'] : null, - 'function' => isset($trace[$i]['function']) ? $trace[$i]['function'] : null, + 'line' => $trace[$i - 1]['line'] ?? null, + 'function' => $trace[$i]['function'] ?? null, ]; } @@ -86,7 +89,7 @@ class Introspection * * @return bool True if the class or function should get skipped, otherwise false */ - private function isTraceClassOrSkippedFunction(array $trace, $index) + private function isTraceClassOrSkippedFunction(array $trace, int $index): bool { if (!isset($trace[$index])) { return false; diff --git a/tests/src/Core/Logger/AbstractLoggerTest.php b/tests/src/Core/Logger/AbstractLoggerTest.php index f1a055310..2734158b5 100644 --- a/tests/src/Core/Logger/AbstractLoggerTest.php +++ b/tests/src/Core/Logger/AbstractLoggerTest.php @@ -22,7 +22,7 @@ namespace Friendica\Test\src\Core\Logger; use Friendica\Test\MockedTest; -use Friendica\Util\Introspection; +use Friendica\Core\Logger\Util\Introspection; use Mockery\MockInterface; use Psr\Log\LoggerInterface; use Psr\Log\LogLevel; diff --git a/tests/src/Core/Logger/SyslogLoggerWrapper.php b/tests/src/Core/Logger/SyslogLoggerWrapper.php index 05dcbd6bc..92d71f80a 100644 --- a/tests/src/Core/Logger/SyslogLoggerWrapper.php +++ b/tests/src/Core/Logger/SyslogLoggerWrapper.php @@ -22,7 +22,7 @@ namespace Friendica\Test\src\Core\Logger; use Friendica\Core\Logger\Type\SyslogLogger; -use Friendica\Util\Introspection; +use Friendica\Core\Logger\Util\Introspection; use Psr\Log\LogLevel; /**