mirror of
https://github.com/friendica/friendica
synced 2025-12-07 16:37:10 +01:00
Merge branch 'develop' into phpstan-level-3
This commit is contained in:
commit
63558f92eb
50 changed files with 1362 additions and 611 deletions
|
|
@ -43,14 +43,10 @@ steps:
|
||||||
- apt-get update -q
|
- apt-get update -q
|
||||||
- DEBIAN_FRONTEND=noninteractive apt-get install -q -y git
|
- DEBIAN_FRONTEND=noninteractive apt-get install -q -y git
|
||||||
- if [ ! -z "$${CI_COMMIT_PULL_REQUEST}" ]; then
|
- if [ ! -z "$${CI_COMMIT_PULL_REQUEST}" ]; then
|
||||||
git fetch --no-tags origin ${CI_COMMIT_TARGET_BRANCH};
|
git fetch --no-tags --unshallow origin ${CI_COMMIT_TARGET_BRANCH}:refs/remotes/origin/${CI_COMMIT_TARGET_BRANCH};
|
||||||
CHANGED_FILES="$(git diff --name-only --diff-filter=ACMRTUXB $(git merge-base FETCH_HEAD origin/${CI_COMMIT_TARGET_BRANCH})..${CI_COMMIT_SHA})";
|
CHANGED_FILES="$(git diff --name-only --diff-filter=ACMRTUXB $(git merge-base ${CI_COMMIT_SHA} origin/${CI_COMMIT_TARGET_BRANCH})..${CI_COMMIT_SHA})";
|
||||||
else
|
else
|
||||||
CHANGED_FILES="$(git diff --name-only --diff-filter=ACMRTUXB ${CI_COMMIT_SHA})";
|
CHANGED_FILES="$(git diff --name-only --diff-filter=ACMRTUXB ${CI_COMMIT_SHA})";
|
||||||
fi
|
fi
|
||||||
- if ! echo "$${CHANGED_FILES}" | grep -qE "^(\\.php-cs-fixer(\\.dist)?\\.php|composer\\.lock)$"; then
|
- EXTRA_ARGS="--path-mode=intersection -- $${CHANGED_FILES}";
|
||||||
EXTRA_ARGS=$(printf -- '--path-mode=intersection\n--\n%s' "$${CHANGED_FILES}");
|
|
||||||
else
|
|
||||||
EXTRA_ARGS='';
|
|
||||||
fi
|
|
||||||
- ./bin/dev/php-cs-fixer/vendor/bin/php-cs-fixer check --config=.php-cs-fixer.dist.php -v --diff --using-cache=no $${EXTRA_ARGS}
|
- ./bin/dev/php-cs-fixer/vendor/bin/php-cs-fixer check --config=.php-cs-fixer.dist.php -v --diff --using-cache=no $${EXTRA_ARGS}
|
||||||
|
|
|
||||||
|
|
@ -153,6 +153,7 @@
|
||||||
"dms/phpunit-arraysubset-asserts": "^0.3.1",
|
"dms/phpunit-arraysubset-asserts": "^0.3.1",
|
||||||
"mikey179/vfsstream": "^1.6",
|
"mikey179/vfsstream": "^1.6",
|
||||||
"mockery/mockery": "^1.3",
|
"mockery/mockery": "^1.3",
|
||||||
|
"php-mock/php-mock-mockery": "^1.5",
|
||||||
"php-mock/php-mock-phpunit": "^2.10",
|
"php-mock/php-mock-phpunit": "^2.10",
|
||||||
"phpmd/phpmd": "^2.15",
|
"phpmd/phpmd": "^2.15",
|
||||||
"phpstan/phpstan": "^2.0",
|
"phpstan/phpstan": "^2.0",
|
||||||
|
|
|
||||||
67
composer.lock
generated
67
composer.lock
generated
|
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "b77bf714197f04022a5feb001bf07852",
|
"content-hash": "32af97f73ec49df2a6cfe98f11bc1d60",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "asika/simple-console",
|
"name": "asika/simple-console",
|
||||||
|
|
@ -5441,6 +5441,71 @@
|
||||||
],
|
],
|
||||||
"time": "2024-02-10T21:37:25+00:00"
|
"time": "2024-02-10T21:37:25+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "php-mock/php-mock-mockery",
|
||||||
|
"version": "1.5.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-mock/php-mock-mockery.git",
|
||||||
|
"reference": "291994acdc26daf1e3c659cfbe58b01eeb180b7f"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-mock/php-mock-mockery/zipball/291994acdc26daf1e3c659cfbe58b01eeb180b7f",
|
||||||
|
"reference": "291994acdc26daf1e3c659cfbe58b01eeb180b7f",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"mockery/mockery": "^1",
|
||||||
|
"php": ">=5.6",
|
||||||
|
"php-mock/php-mock-integration": "^2.2.1 || ^3.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^4|^5|^8"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"phpmock\\mockery\\": "classes/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"WTFPL"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Markus Malkusch",
|
||||||
|
"email": "markus@malkusch.de",
|
||||||
|
"homepage": "http://markus.malkusch.de",
|
||||||
|
"role": "Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Mock built-in PHP functions (e.g. time()) with Mockery. This package relies on PHP's namespace fallback policy. No further extension is needed.",
|
||||||
|
"homepage": "https://github.com/php-mock/php-mock-mockery",
|
||||||
|
"keywords": [
|
||||||
|
"BDD",
|
||||||
|
"TDD",
|
||||||
|
"function",
|
||||||
|
"mock",
|
||||||
|
"mockery",
|
||||||
|
"stub",
|
||||||
|
"test",
|
||||||
|
"test double",
|
||||||
|
"testing"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/php-mock/php-mock-mockery/issues",
|
||||||
|
"source": "https://github.com/php-mock/php-mock-mockery/tree/1.5.0"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/michalbundyra",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2025-03-08T19:46:20+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "php-mock/php-mock-phpunit",
|
"name": "php-mock/php-mock-phpunit",
|
||||||
"version": "2.10.0",
|
"version": "2.10.0",
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ Some examples of common known configuration files:
|
||||||
Addons can define their own default configuration values in `addon/[addon]/config/[addon].config.php` which is loaded when the addon is activated.
|
Addons can define their own default configuration values in `addon/[addon]/config/[addon].config.php` which is loaded when the addon is activated.
|
||||||
|
|
||||||
If needed, an alternative `config` path can be used by using the `FRIENDICA_CONFIG_DIR` environment variable (full path required!).
|
If needed, an alternative `config` path can be used by using the `FRIENDICA_CONFIG_DIR` environment variable (full path required!).
|
||||||
This is useful in case of hardening the system by separating configuration from program binaries.
|
This is useful in case of hardening the system by separating configuration from program binaries.
|
||||||
|
|
||||||
### Static Configuration location
|
### Static Configuration location
|
||||||
|
|
||||||
|
|
@ -160,16 +160,6 @@ $a->config['register_policy'] = REGISTER_CLOSED;
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><pre>
|
<td><pre>
|
||||||
$a->path = "value";
|
|
||||||
</pre></td>
|
|
||||||
<td><pre>
|
|
||||||
'system' => [
|
|
||||||
'urlpath' => 'value',
|
|
||||||
],
|
|
||||||
</pre></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><pre>
|
|
||||||
$default_timezone = "value";
|
$default_timezone = "value";
|
||||||
</pre></td>
|
</pre></td>
|
||||||
<td><pre>
|
<td><pre>
|
||||||
|
|
@ -313,7 +303,7 @@ Enabling the admin panel for an account, and thus making the account holder admi
|
||||||
'config' => [
|
'config' => [
|
||||||
'admin_email' => 'someone@example.com',
|
'admin_email' => 'someone@example.com',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
Where you have to match the email address used for the account with the one you enter to the `config/local.config.php` file.
|
Where you have to match the email address used for the account with the one you enter to the `config/local.config.php` file.
|
||||||
If more than one account should be able to access the admin panel, separate the email addresses with a comma.
|
If more than one account should be able to access the admin panel, separate the email addresses with a comma.
|
||||||
|
|
|
||||||
|
|
@ -218,7 +218,6 @@ All options will be saved in the `config/local.config.php` and are overruling th
|
||||||
- `-U|--dbuser <username>` The username of the mysql/mariadb database login (env `MYSQL_USER` or `MYSQL_USERNAME`)
|
- `-U|--dbuser <username>` The username of the mysql/mariadb database login (env `MYSQL_USER` or `MYSQL_USERNAME`)
|
||||||
- `-P|--dbpass <password>` The password of the mysql/mariadb database login (env `MYSQL_PASSWORD`)
|
- `-P|--dbpass <password>` The password of the mysql/mariadb database login (env `MYSQL_PASSWORD`)
|
||||||
- `-d|--dbdata <database>` The name of the mysql/mariadb database (env `MYSQL_DATABASE`)
|
- `-d|--dbdata <database>` The name of the mysql/mariadb database (env `MYSQL_DATABASE`)
|
||||||
- `-u|--urlpath <url_path>` The URL path of Friendica - f.e. '/friendica' (env `FRIENDICA_URL_PATH`)
|
|
||||||
- `-b|--phppath <php_path>` The path of the PHP binary (env `FRIENDICA_PHP_PATH`)
|
- `-b|--phppath <php_path>` The path of the PHP binary (env `FRIENDICA_PHP_PATH`)
|
||||||
- `-A|--admin <mail>` The admin email address of Friendica (env `FRIENDICA_ADMIN_MAIL`)
|
- `-A|--admin <mail>` The admin email address of Friendica (env `FRIENDICA_ADMIN_MAIL`)
|
||||||
- `-T|--tz <timezone>` The timezone of Friendica (env `FRIENDICA_TZ`)
|
- `-T|--tz <timezone>` The timezone of Friendica (env `FRIENDICA_TZ`)
|
||||||
|
|
|
||||||
|
|
@ -419,7 +419,7 @@ We strongly discourage you from doing so, as this will break federation to other
|
||||||
Say you have a subdirectory for tests and put Friendica into a further subdirectory, the config would be:
|
Say you have a subdirectory for tests and put Friendica into a further subdirectory, the config would be:
|
||||||
|
|
||||||
'system' => [
|
'system' => [
|
||||||
'urlpath' => 'tests/friendica',
|
'url' => 'https://example.com/tests/friendica',
|
||||||
],
|
],
|
||||||
|
|
||||||
## Other exceptions
|
## Other exceptions
|
||||||
|
|
|
||||||
|
|
@ -410,7 +410,7 @@ Wir raten allerdings dringen davon ab, da es die Interoperabilität mit anderen
|
||||||
Mal angenommen, du hast ein Unterverzeichnis tests und willst Friendica in ein weiteres Unterverzeichnis installieren, dann lautet die Konfiguration hierfür:
|
Mal angenommen, du hast ein Unterverzeichnis tests und willst Friendica in ein weiteres Unterverzeichnis installieren, dann lautet die Konfiguration hierfür:
|
||||||
|
|
||||||
'system' => [
|
'system' => [
|
||||||
'urlpath' => 'tests/friendica',
|
'url' => 'https://example.com/tests/friendica',
|
||||||
],
|
],
|
||||||
|
|
||||||
## Weitere Ausnahmen
|
## Weitere Ausnahmen
|
||||||
|
|
|
||||||
35
doc/stats.md
Normal file
35
doc/stats.md
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
Monitoring
|
||||||
|
===========
|
||||||
|
|
||||||
|
* [Home](help)
|
||||||
|
|
||||||
|
## Endpoints
|
||||||
|
|
||||||
|
Currently, there are two endpoints for statistics available
|
||||||
|
|
||||||
|
- `/stats` Returns some basic statistics of the current node
|
||||||
|
- `/stats/caching` Returns statistics of cache or lock instances, which are used for the currend node
|
||||||
|
|
||||||
|
### `/stats`
|
||||||
|
|
||||||
|
The statistics contain data about the worker performance, the last cron call, number of reports, inbound and outbound packets, posts and comments.
|
||||||
|
|
||||||
|
### `/stats/caching`
|
||||||
|
|
||||||
|
The statistics contain data about the opcache, the used caching (like memory usage, hits/misses, entries, ...) and the used lock (including the cache data)
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Please define 'stats_key' in your local.config.php in the 'system' section to be able to access the statistics page at /stats?key=your-defined-stats_key
|
||||||
|
|
||||||
|
## 3rd Party monitoring tools
|
||||||
|
|
||||||
|
### Zabbix
|
||||||
|
|
||||||
|
To monitor the health status of your Friendica installation, you can use for example a tool like Zabbix.
|
||||||
|
|
||||||
|
### Prometheus
|
||||||
|
|
||||||
|
To use [prometheus](https://prometheus.io) for gathering metrics, use the [Friendica exporter](https://git.friendi.ca/friendica/friendica-exporter).
|
||||||
|
|
||||||
|
You can find the installation instructions here: https://git.friendi.ca/friendica/friendica-exporter#installation
|
||||||
12
doc/tools.md
12
doc/tools.md
|
|
@ -78,15 +78,3 @@ The following will compress */var/log/friendica* (assuming this is the location
|
||||||
daily
|
daily
|
||||||
rotate 2
|
rotate 2
|
||||||
}
|
}
|
||||||
|
|
||||||
### Zabbix
|
|
||||||
|
|
||||||
To monitor the health status of your Friendica installation, you can use for example a tool like Zabbix. Please define 'stats_key' in your local.config.php in the 'system' section to be able to access the statistics page at /stats?key=your-defined-stats_key
|
|
||||||
|
|
||||||
The statistics contain data about the worker performance, the last cron call, number of reports, inbound and outbound packets, posts and comments.
|
|
||||||
|
|
||||||
### Prometheus
|
|
||||||
|
|
||||||
To use [prometheus](https://prometheus.io) for gathering metrics, use the [Friendica exporter](https://git.friendi.ca/friendica/friendica-exporter).
|
|
||||||
|
|
||||||
You can find the installation instructions here: https://git.friendi.ca/friendica/friendica-exporter#installation
|
|
||||||
|
|
|
||||||
|
|
@ -17,8 +17,7 @@ use Psr\Http\Message\UriInterface;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A class which checks and contains the basic
|
* A class which checks and contains the basic environment for the BaseURL (url)
|
||||||
* environment for the BaseURL (url, urlpath, ssl_policy, hostname, scheme)
|
|
||||||
*/
|
*/
|
||||||
class BaseURL extends Uri implements UriInterface
|
class BaseURL extends Uri implements UriInterface
|
||||||
{
|
{
|
||||||
|
|
@ -43,8 +42,7 @@ class BaseURL extends Uri implements UriInterface
|
||||||
/* Relative script path to the web server root
|
/* Relative script path to the web server root
|
||||||
* Not all of those $_SERVER properties can be present, so we do by inverse priority order
|
* Not all of those $_SERVER properties can be present, so we do by inverse priority order
|
||||||
*/
|
*/
|
||||||
$relativeScriptPath =
|
$relativeScriptPath = ($server['REDIRECT_URL'] ?? '') ?:
|
||||||
($server['REDIRECT_URL'] ?? '') ?:
|
|
||||||
($server['REDIRECT_URI'] ?? '') ?:
|
($server['REDIRECT_URI'] ?? '') ?:
|
||||||
($server['REDIRECT_SCRIPT_URL'] ?? '') ?:
|
($server['REDIRECT_SCRIPT_URL'] ?? '') ?:
|
||||||
($server['SCRIPT_URL'] ?? '') ?:
|
($server['SCRIPT_URL'] ?? '') ?:
|
||||||
|
|
|
||||||
|
|
@ -198,7 +198,7 @@ class Page implements ArrayAccess
|
||||||
) {
|
) {
|
||||||
// Default title: current module called
|
// Default title: current module called
|
||||||
if (empty($this->page['title']) && $args->getModuleName()) {
|
if (empty($this->page['title']) && $args->getModuleName()) {
|
||||||
$this->page['title'] = ucfirst($args->getModuleName());
|
$this->page['title'] = $l10n->t(ucfirst($args->getModuleName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prepend the sitename to the page title
|
// Prepend the sitename to the page title
|
||||||
|
|
|
||||||
|
|
@ -35,10 +35,12 @@ class TrendingTags
|
||||||
}
|
}
|
||||||
|
|
||||||
$tpl = Renderer::getMarkupTemplate('widget/trending_tags.tpl');
|
$tpl = Renderer::getMarkupTemplate('widget/trending_tags.tpl');
|
||||||
$o = Renderer::replaceMacros($tpl, [
|
$o = Renderer::replaceMacros($tpl, [
|
||||||
'$title' => DI::l10n()->tt('Trending Tags (last %d hour)', 'Trending Tags (last %d hours)', $period),
|
'$title' => DI::l10n()->tt('Trending Tags (last %d hour)', 'Trending Tags (last %d hours)', $period),
|
||||||
'$more' => DI::l10n()->t('More Trending Tags'),
|
'$more' => DI::l10n()->t('More Trending Tags'),
|
||||||
'$tags' => $tags,
|
'$showmore' => DI::l10n()->t('Show More'),
|
||||||
|
'$showless' => DI::l10n()->t('Show Less'),
|
||||||
|
'$tags' => $tags,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return $o;
|
return $o;
|
||||||
|
|
|
||||||
|
|
@ -53,4 +53,11 @@ interface ICanCacheInMemory extends ICanCache
|
||||||
* @throws CachePersistenceException In case the underlying cache driver has errors during persistence
|
* @throws CachePersistenceException In case the underlying cache driver has errors during persistence
|
||||||
*/
|
*/
|
||||||
public function compareDelete(string $key, $value): bool;
|
public function compareDelete(string $key, $value): bool;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns some basic statistics of the used Cache instance
|
||||||
|
*
|
||||||
|
* @return array Returns an associative array of statistics
|
||||||
|
*/
|
||||||
|
public function getStats(): array;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,10 +16,9 @@ use Friendica\Core\Cache\Exception\InvalidCacheDriverException;
|
||||||
*/
|
*/
|
||||||
class APCuCache extends AbstractCache implements ICanCacheInMemory
|
class APCuCache extends AbstractCache implements ICanCacheInMemory
|
||||||
{
|
{
|
||||||
const NAME = 'apcu';
|
|
||||||
|
|
||||||
use CompareSetTrait;
|
use CompareSetTrait;
|
||||||
use CompareDeleteTrait;
|
use CompareDeleteTrait;
|
||||||
|
const NAME = 'apcu';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws InvalidCacheDriverException
|
* @throws InvalidCacheDriverException
|
||||||
|
|
@ -147,4 +146,19 @@ class APCuCache extends AbstractCache implements ICanCacheInMemory
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
public function getStats(): array
|
||||||
|
{
|
||||||
|
$apcu = apcu_cache_info();
|
||||||
|
$sma = apcu_sma_info();
|
||||||
|
|
||||||
|
return [
|
||||||
|
'entries' => $apcu['num_entries'] ?? null,
|
||||||
|
'used_memory' => $apcu['mem_size'] ?? null,
|
||||||
|
'hits' => $apcu['num_hits'] ?? null,
|
||||||
|
'misses' => $apcu['num_misses'] ?? null,
|
||||||
|
'avail_mem' => $sma['avail_mem'] ?? null,
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,9 +15,8 @@ use Friendica\Core\Cache\Enum;
|
||||||
*/
|
*/
|
||||||
class ArrayCache extends AbstractCache implements ICanCacheInMemory
|
class ArrayCache extends AbstractCache implements ICanCacheInMemory
|
||||||
{
|
{
|
||||||
const NAME = 'array';
|
|
||||||
|
|
||||||
use CompareDeleteTrait;
|
use CompareDeleteTrait;
|
||||||
|
const NAME = 'array';
|
||||||
|
|
||||||
/** @var array Array with the cached data */
|
/** @var array Array with the cached data */
|
||||||
protected $cachedData = [];
|
protected $cachedData = [];
|
||||||
|
|
@ -96,4 +95,10 @@ class ArrayCache extends AbstractCache implements ICanCacheInMemory
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
public function getStats(): array
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,11 +19,10 @@ use Memcache;
|
||||||
*/
|
*/
|
||||||
class MemcacheCache extends AbstractCache implements ICanCacheInMemory
|
class MemcacheCache extends AbstractCache implements ICanCacheInMemory
|
||||||
{
|
{
|
||||||
const NAME = 'memcache';
|
|
||||||
|
|
||||||
use CompareSetTrait;
|
use CompareSetTrait;
|
||||||
use CompareDeleteTrait;
|
use CompareDeleteTrait;
|
||||||
use MemcacheCommandTrait;
|
use MemcacheCommandTrait;
|
||||||
|
const NAME = 'memcache';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Memcache
|
* @var Memcache
|
||||||
|
|
@ -156,4 +155,21 @@ class MemcacheCache extends AbstractCache implements ICanCacheInMemory
|
||||||
$cacheKey = $this->getCacheKey($key);
|
$cacheKey = $this->getCacheKey($key);
|
||||||
return $this->memcache->add($cacheKey, serialize($value), MEMCACHE_COMPRESSED, $ttl);
|
return $this->memcache->add($cacheKey, serialize($value), MEMCACHE_COMPRESSED, $ttl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
public function getStats(): array
|
||||||
|
{
|
||||||
|
$stats = $this->memcache->getStats();
|
||||||
|
|
||||||
|
return [
|
||||||
|
'version' => $stats['version'] ?? null,
|
||||||
|
'entries' => $stats['curr_items'] ?? null,
|
||||||
|
'used_memory' => $stats['bytes'] ?? null,
|
||||||
|
'uptime' => $stats['uptime'] ?? null,
|
||||||
|
'connected_clients' => $stats['curr_connections'] ?? null,
|
||||||
|
'hits' => $stats['get_hits'] ?? null,
|
||||||
|
'misses' => $stats['get_misses'] ?? null,
|
||||||
|
'evictions' => $stats['evictions'] ?? null,
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,11 +20,10 @@ use Psr\Log\LoggerInterface;
|
||||||
*/
|
*/
|
||||||
class MemcachedCache extends AbstractCache implements ICanCacheInMemory
|
class MemcachedCache extends AbstractCache implements ICanCacheInMemory
|
||||||
{
|
{
|
||||||
const NAME = 'memcached';
|
|
||||||
|
|
||||||
use CompareSetTrait;
|
use CompareSetTrait;
|
||||||
use CompareDeleteTrait;
|
use CompareDeleteTrait;
|
||||||
use MemcacheCommandTrait;
|
use MemcacheCommandTrait;
|
||||||
|
const NAME = 'memcached';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var \Memcached
|
* @var \Memcached
|
||||||
|
|
@ -172,4 +171,27 @@ class MemcachedCache extends AbstractCache implements ICanCacheInMemory
|
||||||
$cacheKey = $this->getCacheKey($key);
|
$cacheKey = $this->getCacheKey($key);
|
||||||
return $this->memcached->add($cacheKey, $value, $ttl);
|
return $this->memcached->add($cacheKey, $value, $ttl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
public function getStats(): array
|
||||||
|
{
|
||||||
|
$stats = $this->memcached->getStats();
|
||||||
|
|
||||||
|
// get statistics of the first instance
|
||||||
|
foreach ($stats as $value) {
|
||||||
|
$stats = $value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'version' => $stats['version'] ?? null,
|
||||||
|
'entries' => $stats['curr_items'] ?? null,
|
||||||
|
'used_memory' => $stats['bytes'] ?? null,
|
||||||
|
'uptime' => $stats['uptime'] ?? null,
|
||||||
|
'connected_clients' => $stats['curr_connections'] ?? null,
|
||||||
|
'hits' => $stats['get_hits'] ?? null,
|
||||||
|
'misses' => $stats['get_misses'] ?? null,
|
||||||
|
'evictions' => $stats['evictions'] ?? null,
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -166,4 +166,14 @@ class ProfilerCacheDecorator implements ICanCache, ICanCacheInMemory
|
||||||
{
|
{
|
||||||
return $this->cache->getName() . ' (with profiler)';
|
return $this->cache->getName() . ' (with profiler)';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
public function getStats(): array
|
||||||
|
{
|
||||||
|
if ($this->cache instanceof ICanCacheInMemory) {
|
||||||
|
return $this->cache->getStats();
|
||||||
|
} else {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -207,4 +207,21 @@ class RedisCache extends AbstractCache implements ICanCacheInMemory
|
||||||
$this->redis->unwatch();
|
$this->redis->unwatch();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
public function getStats(): array
|
||||||
|
{
|
||||||
|
$info = $this->redis->info();
|
||||||
|
|
||||||
|
return [
|
||||||
|
'version' => $info['redis_version'] ?? null,
|
||||||
|
'entries' => $this->redis->dbSize() ?? null,
|
||||||
|
'used_memory' => $info['used_memory'] ?? null,
|
||||||
|
'connected_clients' => $info['connected_clients'] ?? null,
|
||||||
|
'uptime' => $info['uptime_in_seconds'] ?? null,
|
||||||
|
'hits' => $info['keyspace_hits'] ?? null,
|
||||||
|
'misses' => $info['keyspace_misses'] ?? null,
|
||||||
|
'evictions' => $info['evicted_keys'] ?? null,
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@
|
||||||
|
|
||||||
namespace Friendica\Core\Lock\Type;
|
namespace Friendica\Core\Lock\Type;
|
||||||
|
|
||||||
use Friendica\Core\Cache\Capability\ICanCache;
|
|
||||||
use Friendica\Core\Cache\Capability\ICanCacheInMemory;
|
use Friendica\Core\Cache\Capability\ICanCacheInMemory;
|
||||||
use Friendica\Core\Cache\Enum\Duration;
|
use Friendica\Core\Cache\Enum\Duration;
|
||||||
use Friendica\Core\Cache\Exception\CachePersistenceException;
|
use Friendica\Core\Cache\Exception\CachePersistenceException;
|
||||||
|
|
@ -156,6 +155,16 @@ class CacheLock extends AbstractLock
|
||||||
return $success;
|
return $success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns stats about the cache provider
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getCacheStats(): array
|
||||||
|
{
|
||||||
|
return $this->cache->getStats();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $key The original key
|
* @param string $key The original key
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -397,7 +397,7 @@ class Event
|
||||||
{
|
{
|
||||||
// First day of the week (0 = Sunday).
|
// First day of the week (0 = Sunday).
|
||||||
$firstDay = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'calendar', 'first_day_of_week') ?? 0;
|
$firstDay = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'calendar', 'first_day_of_week') ?? 0;
|
||||||
$defaultView = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'calendar', 'defaultView') ?? 'month';
|
$defaultView = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'calendar', 'default_view') ?? 'month';
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'firstDay' => $firstDay,
|
'firstDay' => $firstDay,
|
||||||
|
|
|
||||||
|
|
@ -7,11 +7,9 @@
|
||||||
|
|
||||||
namespace Friendica\Model;
|
namespace Friendica\Model;
|
||||||
|
|
||||||
use Friendica\Core\Addon;
|
|
||||||
use Friendica\Core\Config\Capability\IManageConfigValues;
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
use Friendica\Model\Item;
|
|
||||||
use stdClass;
|
use stdClass;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -26,13 +24,14 @@ class Nodeinfo
|
||||||
*/
|
*/
|
||||||
public static function update()
|
public static function update()
|
||||||
{
|
{
|
||||||
$config = DI::config();
|
$config = DI::config();
|
||||||
$logger = DI::logger();
|
$logger = DI::logger();
|
||||||
|
$addonHelper = DI::addonHelper();
|
||||||
|
|
||||||
// If the addon 'statistics_json' is enabled then disable it and activate nodeinfo.
|
// If the addon 'statistics_json' is enabled then disable it and activate nodeinfo.
|
||||||
if (Addon::isEnabled('statistics_json')) {
|
if ($addonHelper->isAddonEnabled('statistics_json')) {
|
||||||
$config->set('system', 'nodeinfo', true);
|
$config->set('system', 'nodeinfo', true);
|
||||||
Addon::uninstall('statistics_json');
|
$addonHelper->uninstallAddon('statistics_json');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($config->get('system', 'nodeinfo'))) {
|
if (empty($config->get('system', 'nodeinfo'))) {
|
||||||
|
|
@ -50,12 +49,12 @@ class Nodeinfo
|
||||||
|
|
||||||
$logger->info('user statistics - done', $userStats);
|
$logger->info('user statistics - done', $userStats);
|
||||||
|
|
||||||
$posts = DBA::count('post-thread', ["`uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE NOT `deleted` AND `origin`)"]);
|
$posts = DBA::count('post-thread', ["`uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE NOT `deleted` AND `origin`)"]);
|
||||||
$comments = DBA::count('post', ["NOT `deleted` AND `gravity` = ? AND `uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `origin`)", Item::GRAVITY_COMMENT]);
|
$comments = DBA::count('post', ["NOT `deleted` AND `gravity` = ? AND `uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `origin`)", Item::GRAVITY_COMMENT]);
|
||||||
DI::keyValue()->set('nodeinfo_local_posts', $posts);
|
DI::keyValue()->set('nodeinfo_local_posts', $posts);
|
||||||
DI::keyValue()->set('nodeinfo_local_comments', $comments);
|
DI::keyValue()->set('nodeinfo_local_comments', $comments);
|
||||||
|
|
||||||
$posts = DBA::count('post', ['deleted' => false, 'gravity' => Item::GRAVITY_COMMENT]);
|
$posts = DBA::count('post', ['deleted' => false, 'gravity' => Item::GRAVITY_COMMENT]);
|
||||||
$comments = DBA::count('post', ['deleted' => false, 'gravity' => Item::GRAVITY_COMMENT]);
|
$comments = DBA::count('post', ['deleted' => false, 'gravity' => Item::GRAVITY_COMMENT]);
|
||||||
DI::keyValue()->set('nodeinfo_total_posts', $posts);
|
DI::keyValue()->set('nodeinfo_total_posts', $posts);
|
||||||
DI::keyValue()->set('nodeinfo_total_comments', $comments);
|
DI::keyValue()->set('nodeinfo_total_comments', $comments);
|
||||||
|
|
@ -66,21 +65,21 @@ class Nodeinfo
|
||||||
/**
|
/**
|
||||||
* Return the supported services
|
* Return the supported services
|
||||||
*
|
*
|
||||||
* @return Object with supported services
|
* @return stdClass with supported services
|
||||||
*/
|
*/
|
||||||
public static function getUsage(bool $version2 = false)
|
public static function getUsage(bool $version2 = false): stdClass
|
||||||
{
|
{
|
||||||
$config = DI::config();
|
$config = DI::config();
|
||||||
|
|
||||||
$usage = new stdClass();
|
$usage = new stdClass();
|
||||||
$usage->users = new \stdClass;
|
$usage->users = new stdClass();
|
||||||
|
|
||||||
if (!empty($config->get('system', 'nodeinfo'))) {
|
if (!empty($config->get('system', 'nodeinfo'))) {
|
||||||
$usage->users->total = intval(DI::keyValue()->get('nodeinfo_total_users'));
|
$usage->users->total = intval(DI::keyValue()->get('nodeinfo_total_users'));
|
||||||
$usage->users->activeHalfyear = intval(DI::keyValue()->get('nodeinfo_active_users_halfyear'));
|
$usage->users->activeHalfyear = intval(DI::keyValue()->get('nodeinfo_active_users_halfyear'));
|
||||||
$usage->users->activeMonth = intval(DI::keyValue()->get('nodeinfo_active_users_monthly'));
|
$usage->users->activeMonth = intval(DI::keyValue()->get('nodeinfo_active_users_monthly'));
|
||||||
$usage->localPosts = intval(DI::keyValue()->get('nodeinfo_local_posts'));
|
$usage->localPosts = intval(DI::keyValue()->get('nodeinfo_local_posts'));
|
||||||
$usage->localComments = intval(DI::keyValue()->get('nodeinfo_local_comments'));
|
$usage->localComments = intval(DI::keyValue()->get('nodeinfo_local_comments'));
|
||||||
|
|
||||||
if ($version2) {
|
if ($version2) {
|
||||||
$usage->users->activeWeek = intval(DI::keyValue()->get('nodeinfo_active_users_weekly'));
|
$usage->users->activeWeek = intval(DI::keyValue()->get('nodeinfo_active_users_weekly'));
|
||||||
|
|
@ -97,45 +96,47 @@ class Nodeinfo
|
||||||
*/
|
*/
|
||||||
public static function getServices(): array
|
public static function getServices(): array
|
||||||
{
|
{
|
||||||
|
$addonHelper = DI::addonHelper();
|
||||||
|
|
||||||
$services = [
|
$services = [
|
||||||
'inbound' => [],
|
'inbound' => [],
|
||||||
'outbound' => [],
|
'outbound' => [],
|
||||||
];
|
];
|
||||||
|
|
||||||
if (Addon::isEnabled('bluesky')) {
|
if ($addonHelper->isAddonEnabled('bluesky')) {
|
||||||
$services['inbound'][] = 'bluesky';
|
$services['inbound'][] = 'bluesky';
|
||||||
$services['outbound'][] = 'bluesky';
|
$services['outbound'][] = 'bluesky';
|
||||||
}
|
}
|
||||||
if (Addon::isEnabled('dwpost')) {
|
if ($addonHelper->isAddonEnabled('dwpost')) {
|
||||||
$services['outbound'][] = 'dreamwidth';
|
$services['outbound'][] = 'dreamwidth';
|
||||||
}
|
}
|
||||||
if (Addon::isEnabled('statusnet')) {
|
if ($addonHelper->isAddonEnabled('statusnet')) {
|
||||||
$services['inbound'][] = 'gnusocial';
|
$services['inbound'][] = 'gnusocial';
|
||||||
$services['outbound'][] = 'gnusocial';
|
$services['outbound'][] = 'gnusocial';
|
||||||
}
|
}
|
||||||
if (Addon::isEnabled('ijpost')) {
|
if ($addonHelper->isAddonEnabled('ijpost')) {
|
||||||
$services['outbound'][] = 'insanejournal';
|
$services['outbound'][] = 'insanejournal';
|
||||||
}
|
}
|
||||||
if (Addon::isEnabled('libertree')) {
|
if ($addonHelper->isAddonEnabled('libertree')) {
|
||||||
$services['outbound'][] = 'libertree';
|
$services['outbound'][] = 'libertree';
|
||||||
}
|
}
|
||||||
if (Addon::isEnabled('ljpost')) {
|
if ($addonHelper->isAddonEnabled('ljpost')) {
|
||||||
$services['outbound'][] = 'livejournal';
|
$services['outbound'][] = 'livejournal';
|
||||||
}
|
}
|
||||||
if (Addon::isEnabled('pumpio')) {
|
if ($addonHelper->isAddonEnabled('pumpio')) {
|
||||||
$services['inbound'][] = 'pumpio';
|
$services['inbound'][] = 'pumpio';
|
||||||
$services['outbound'][] = 'pumpio';
|
$services['outbound'][] = 'pumpio';
|
||||||
}
|
}
|
||||||
|
|
||||||
$services['outbound'][] = 'smtp';
|
$services['outbound'][] = 'smtp';
|
||||||
|
|
||||||
if (Addon::isEnabled('tumblr')) {
|
if ($addonHelper->isAddonEnabled('tumblr')) {
|
||||||
$services['outbound'][] = 'tumblr';
|
$services['outbound'][] = 'tumblr';
|
||||||
}
|
}
|
||||||
if (Addon::isEnabled('twitter')) {
|
if ($addonHelper->isAddonEnabled('twitter')) {
|
||||||
$services['outbound'][] = 'twitter';
|
$services['outbound'][] = 'twitter';
|
||||||
}
|
}
|
||||||
if (Addon::isEnabled('wppost')) {
|
if ($addonHelper->isAddonEnabled('wppost')) {
|
||||||
$services['outbound'][] = 'wordpress';
|
$services['outbound'][] = 'wordpress';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,10 @@
|
||||||
namespace Friendica\Module;
|
namespace Friendica\Module;
|
||||||
|
|
||||||
use Friendica\App;
|
use Friendica\App;
|
||||||
|
use Friendica\App\Arguments;
|
||||||
|
use Friendica\App\BaseURL;
|
||||||
use Friendica\BaseModule;
|
use Friendica\BaseModule;
|
||||||
use Friendica\Core\Addon;
|
use Friendica\Core\Addon\AddonHelper;
|
||||||
use Friendica\Core\Config\Capability\IManageConfigValues;
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
use Friendica\Core\KeyValueStorage\Capability\IManageKeyValuePairs;
|
use Friendica\Core\KeyValueStorage\Capability\IManageKeyValuePairs;
|
||||||
use Friendica\Core\L10n;
|
use Friendica\Core\L10n;
|
||||||
|
|
@ -23,13 +25,27 @@ class Statistics extends BaseModule
|
||||||
protected $config;
|
protected $config;
|
||||||
/** @var IManageKeyValuePairs */
|
/** @var IManageKeyValuePairs */
|
||||||
protected $keyValue;
|
protected $keyValue;
|
||||||
|
private AddonHelper $addonHelper;
|
||||||
|
|
||||||
public function __construct(L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, IManageConfigValues $config, IManageKeyValuePairs $keyValue, Response $response, array $server, array $parameters = [])
|
public function __construct(
|
||||||
{
|
L10n $l10n,
|
||||||
|
BaseURL $baseUrl,
|
||||||
|
Arguments $args,
|
||||||
|
LoggerInterface $logger,
|
||||||
|
Profiler $profiler,
|
||||||
|
IManageConfigValues $config,
|
||||||
|
IManageKeyValuePairs $keyValue,
|
||||||
|
AddonHelper $addonHelper,
|
||||||
|
Response $response,
|
||||||
|
array $server,
|
||||||
|
array $parameters = []
|
||||||
|
) {
|
||||||
parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
|
parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
|
||||||
|
|
||||||
$this->config = $config;
|
$this->config = $config;
|
||||||
$this->keyValue = $keyValue;
|
$this->keyValue = $keyValue;
|
||||||
|
$this->addonHelper = $addonHelper;
|
||||||
|
|
||||||
if (!$this->config->get("system", "nodeinfo")) {
|
if (!$this->config->get("system", "nodeinfo")) {
|
||||||
throw new NotFoundException();
|
throw new NotFoundException();
|
||||||
}
|
}
|
||||||
|
|
@ -37,22 +53,21 @@ class Statistics extends BaseModule
|
||||||
|
|
||||||
protected function rawContent(array $request = [])
|
protected function rawContent(array $request = [])
|
||||||
{
|
{
|
||||||
$registration_open =
|
$registration_open = Register::getPolicy() !== Register::CLOSED
|
||||||
Register::getPolicy() !== Register::CLOSED
|
|
||||||
&& !$this->config->get('config', 'invitation_only');
|
&& !$this->config->get('config', 'invitation_only');
|
||||||
|
|
||||||
/// @todo mark the "service" addons and load them dynamically here
|
/// @todo mark the "service" addons and load them dynamically here
|
||||||
$services = [
|
$services = [
|
||||||
'appnet' => Addon::isEnabled('appnet'),
|
'appnet' => $this->addonHelper->isAddonEnabled('appnet'),
|
||||||
'bluesky' => Addon::isEnabled('bluesky'),
|
'bluesky' => $this->addonHelper->isAddonEnabled('bluesky'),
|
||||||
'dreamwidth' => Addon::isEnabled('dreamwidth'),
|
'dreamwidth' => $this->addonHelper->isAddonEnabled('dreamwidth'),
|
||||||
'gnusocial' => Addon::isEnabled('gnusocial'),
|
'gnusocial' => $this->addonHelper->isAddonEnabled('gnusocial'),
|
||||||
'libertree' => Addon::isEnabled('libertree'),
|
'libertree' => $this->addonHelper->isAddonEnabled('libertree'),
|
||||||
'livejournal' => Addon::isEnabled('livejournal'),
|
'livejournal' => $this->addonHelper->isAddonEnabled('livejournal'),
|
||||||
'pumpio' => Addon::isEnabled('pumpio'),
|
'pumpio' => $this->addonHelper->isAddonEnabled('pumpio'),
|
||||||
'twitter' => Addon::isEnabled('twitter'),
|
'twitter' => $this->addonHelper->isAddonEnabled('twitter'),
|
||||||
'tumblr' => Addon::isEnabled('tumblr'),
|
'tumblr' => $this->addonHelper->isAddonEnabled('tumblr'),
|
||||||
'wordpress' => Addon::isEnabled('wordpress'),
|
'wordpress' => $this->addonHelper->isAddonEnabled('wordpress'),
|
||||||
];
|
];
|
||||||
|
|
||||||
$statistics = array_merge([
|
$statistics = array_merge([
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,10 @@
|
||||||
namespace Friendica\Module;
|
namespace Friendica\Module;
|
||||||
|
|
||||||
use Friendica\App;
|
use Friendica\App;
|
||||||
|
use Friendica\App\Arguments;
|
||||||
|
use Friendica\App\BaseURL;
|
||||||
use Friendica\BaseModule;
|
use Friendica\BaseModule;
|
||||||
use Friendica\Core\Addon;
|
use Friendica\Core\Addon\AddonHelper;
|
||||||
use Friendica\Core\Config\Capability\IManageConfigValues;
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
use Friendica\Core\KeyValueStorage\Capability\IManageKeyValuePairs;
|
use Friendica\Core\KeyValueStorage\Capability\IManageKeyValuePairs;
|
||||||
use Friendica\Core\L10n;
|
use Friendica\Core\L10n;
|
||||||
|
|
@ -40,14 +42,28 @@ class Stats extends BaseModule
|
||||||
protected $logger;
|
protected $logger;
|
||||||
/** @var IManageKeyValuePairs */
|
/** @var IManageKeyValuePairs */
|
||||||
protected $keyValue;
|
protected $keyValue;
|
||||||
|
private AddonHelper $addonHelper;
|
||||||
|
|
||||||
public function __construct(L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, IManageConfigValues $config, IManageKeyValuePairs $keyValue, Database $dba, Response $response, array $server, array $parameters = [])
|
public function __construct(
|
||||||
{
|
L10n $l10n,
|
||||||
|
BaseURL $baseUrl,
|
||||||
|
Arguments $args,
|
||||||
|
LoggerInterface $logger,
|
||||||
|
Profiler $profiler,
|
||||||
|
IManageConfigValues $config,
|
||||||
|
IManageKeyValuePairs $keyValue,
|
||||||
|
Database $dba,
|
||||||
|
AddonHelper $addonHelper,
|
||||||
|
Response $response,
|
||||||
|
array $server,
|
||||||
|
array $parameters = []
|
||||||
|
) {
|
||||||
parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
|
parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
|
||||||
|
|
||||||
$this->config = $config;
|
$this->config = $config;
|
||||||
$this->keyValue = $keyValue;
|
$this->keyValue = $keyValue;
|
||||||
$this->dba = $dba;
|
$this->dba = $dba;
|
||||||
|
$this->addonHelper = $addonHelper;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function content(array $request = []): string
|
protected function content(array $request = []): string
|
||||||
|
|
@ -85,14 +101,14 @@ class Stats extends BaseModule
|
||||||
'datetime' => DateTimeFormat::utc($this->keyValue->get('last_worker_execution'), DateTimeFormat::JSON),
|
'datetime' => DateTimeFormat::utc($this->keyValue->get('last_worker_execution'), DateTimeFormat::JSON),
|
||||||
'timestamp' => strtotime($this->keyValue->get('last_worker_execution')),
|
'timestamp' => strtotime($this->keyValue->get('last_worker_execution')),
|
||||||
],
|
],
|
||||||
'jpm' => [
|
'jpm' => [
|
||||||
1 => $this->dba->count('workerqueue', ["`done` AND `executed` > ?", DateTimeFormat::utc('now - 1 minute')]),
|
1 => $this->dba->count('workerqueue', ["`done` AND `executed` > ?", DateTimeFormat::utc('now - 1 minute')]),
|
||||||
3 => round($this->dba->count('workerqueue', ["`done` AND `executed` > ?", DateTimeFormat::utc('now - 3 minute')]) / 3),
|
3 => round($this->dba->count('workerqueue', ["`done` AND `executed` > ?", DateTimeFormat::utc('now - 3 minute')]) / 3),
|
||||||
5 => round($this->dba->count('workerqueue', ["`done` AND `executed` > ?", DateTimeFormat::utc('now - 5 minute')]) / 5),
|
5 => round($this->dba->count('workerqueue', ["`done` AND `executed` > ?", DateTimeFormat::utc('now - 5 minute')]) / 5),
|
||||||
],
|
],
|
||||||
'active' => [],
|
'active' => [],
|
||||||
'deferred' => [],
|
'deferred' => [],
|
||||||
'total' => [],
|
'total' => [],
|
||||||
],
|
],
|
||||||
'jetstream' => [
|
'jetstream' => [
|
||||||
'drift' => intval($this->keyValue->get('jetstream_drift')),
|
'drift' => intval($this->keyValue->get('jetstream_drift')),
|
||||||
|
|
@ -145,14 +161,14 @@ class Stats extends BaseModule
|
||||||
'closed' => $this->dba->count('report', ['status' => Report::STATUS_CLOSED]),
|
'closed' => $this->dba->count('report', ['status' => Report::STATUS_CLOSED]),
|
||||||
],
|
],
|
||||||
'update' => [
|
'update' => [
|
||||||
'available' => Update::isAvailable(),
|
'available' => Update::isAvailable(),
|
||||||
'available_version' => Update::getAvailableVersion(),
|
'available_version' => Update::getAvailableVersion(),
|
||||||
'status' => Update::getStatus(),
|
'status' => Update::getStatus(),
|
||||||
'db_status' => DBStructure::getUpdateStatus(),
|
'db_status' => DBStructure::getUpdateStatus(),
|
||||||
],
|
],
|
||||||
'server' => [
|
'server' => [
|
||||||
'version' => App::VERSION,
|
'version' => App::VERSION,
|
||||||
'php' => [
|
'php' => [
|
||||||
'version' => phpversion(),
|
'version' => phpversion(),
|
||||||
'upload_max_filesize' => ini_get('upload_max_filesize'),
|
'upload_max_filesize' => ini_get('upload_max_filesize'),
|
||||||
'post_max_size' => ini_get('post_max_size'),
|
'post_max_size' => ini_get('post_max_size'),
|
||||||
|
|
@ -164,12 +180,12 @@ class Stats extends BaseModule
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
if (Addon::isEnabled('bluesky')) {
|
if ($this->addonHelper->isAddonEnabled('bluesky')) {
|
||||||
$statistics['packets']['inbound'][Protocol::BLUESKY] = intval($this->keyValue->get('stats_packets_inbound_' . Protocol::BLUESKY) ?? 0);
|
$statistics['packets']['inbound'][Protocol::BLUESKY] = intval($this->keyValue->get('stats_packets_inbound_' . Protocol::BLUESKY) ?? 0);
|
||||||
$statistics['packets']['outbound'][Protocol::BLUESKY] = intval($this->keyValue->get('stats_packets_outbound_' . Protocol::BLUESKY) ?? 0);
|
$statistics['packets']['outbound'][Protocol::BLUESKY] = intval($this->keyValue->get('stats_packets_outbound_' . Protocol::BLUESKY) ?? 0);
|
||||||
}
|
}
|
||||||
if (Addon::isEnabled('tumblr')) {
|
if ($this->addonHelper->isAddonEnabled('tumblr')) {
|
||||||
$statistics['packets']['inbound'][Protocol::TUMBLR] = intval($this->keyValue->get('stats_packets_inbound_' . Protocol::TUMBLR) ?? 0);
|
$statistics['packets']['inbound'][Protocol::TUMBLR] = intval($this->keyValue->get('stats_packets_inbound_' . Protocol::TUMBLR) ?? 0);
|
||||||
$statistics['packets']['outbound'][Protocol::TUMBLR] = intval($this->keyValue->get('stats_packets_outbound_' . Protocol::TUMBLR) ?? 0);
|
$statistics['packets']['outbound'][Protocol::TUMBLR] = intval($this->keyValue->get('stats_packets_outbound_' . Protocol::TUMBLR) ?? 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -202,7 +218,7 @@ class Stats extends BaseModule
|
||||||
|
|
||||||
$jobs = $this->dba->p("SELECT COUNT(*) AS `entries`, `priority` FROM `workerqueue` WHERE NOT `done` AND `retrial` = ? GROUP BY `priority`", 0);
|
$jobs = $this->dba->p("SELECT COUNT(*) AS `entries`, `priority` FROM `workerqueue` WHERE NOT `done` AND `retrial` = ? GROUP BY `priority`", 0);
|
||||||
while ($entry = $this->dba->fetch($jobs)) {
|
while ($entry = $this->dba->fetch($jobs)) {
|
||||||
$running = $this->dba->count('workerqueue-view', ['priority' => $entry['priority']]);
|
$running = $this->dba->count('workerqueue-view', ['priority' => $entry['priority']]);
|
||||||
$statistics['worker']['active']['total'] += $running;
|
$statistics['worker']['active']['total'] += $running;
|
||||||
$statistics['worker']['active'][$entry['priority']] = $running;
|
$statistics['worker']['active'][$entry['priority']] = $running;
|
||||||
$statistics['worker']['total']['total'] += $entry['entries'];
|
$statistics['worker']['total']['total'] += $entry['entries'];
|
||||||
|
|
|
||||||
108
src/Module/StatsCaching.php
Normal file
108
src/Module/StatsCaching.php
Normal file
|
|
@ -0,0 +1,108 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// Copyright (C) 2010-2024, the Friendica project
|
||||||
|
// SPDX-FileCopyrightText: 2010-2024 the Friendica project
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
|
namespace Friendica\Module;
|
||||||
|
|
||||||
|
use Friendica\App;
|
||||||
|
use Friendica\BaseModule;
|
||||||
|
use Friendica\Core\Cache\Capability\ICanCache;
|
||||||
|
use Friendica\Core\Cache\Capability\ICanCacheInMemory;
|
||||||
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
|
use Friendica\Core\L10n;
|
||||||
|
use Friendica\Core\Lock\Capability\ICanLock;
|
||||||
|
use Friendica\Core\Lock\Type\CacheLock;
|
||||||
|
use Friendica\Network\HTTPException\NotFoundException;
|
||||||
|
use Friendica\Util\Profiler;
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
|
use Friendica\Network\HTTPException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns statistics of Cache / Lock instances
|
||||||
|
*
|
||||||
|
* @todo Currently not possible to get distributed cache statistics in case the distributed cache (for sessions) is different to the normal cache (not possible to get the distributed cache instance yet)
|
||||||
|
*/
|
||||||
|
class StatsCaching extends BaseModule
|
||||||
|
{
|
||||||
|
private IManageConfigValues $config;
|
||||||
|
private ICanCache $cache;
|
||||||
|
private ICanLock $lock;
|
||||||
|
|
||||||
|
public function __construct(L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, IManageConfigValues $config, ICanCache $cache, ICanLock $lock, array $parameters = [])
|
||||||
|
{
|
||||||
|
parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
|
||||||
|
|
||||||
|
$this->config = $config;
|
||||||
|
$this->cache = $cache;
|
||||||
|
$this->lock = $lock;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function isAllowed(array $request): bool
|
||||||
|
{
|
||||||
|
return !empty($request['key']) && $request['key'] == $this->config->get('system', 'stats_key');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws NotFoundException In case the rquest isn't allowed
|
||||||
|
*/
|
||||||
|
protected function content(array $request = []): string
|
||||||
|
{
|
||||||
|
if (!$this->isAllowed($request)) {
|
||||||
|
throw new HTTPException\NotFoundException($this->l10n->t('Page not found.'));
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function rawContent(array $request = [])
|
||||||
|
{
|
||||||
|
if (!$this->isAllowed($request)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = [];
|
||||||
|
|
||||||
|
// OPcache
|
||||||
|
if (function_exists('opcache_get_status')) {
|
||||||
|
$status = opcache_get_status(false);
|
||||||
|
$data['opcache'] = [
|
||||||
|
'enabled' => $status['opcache_enabled'] ?? false,
|
||||||
|
'hit_rate' => $status['opcache_statistics']['opcache_hit_rate'] ?? null,
|
||||||
|
'used_memory' => $status['memory_usage']['used_memory'] ?? null,
|
||||||
|
'free_memory' => $status['memory_usage']['free_memory'] ?? null,
|
||||||
|
'num_cached_scripts' => $status['opcache_statistics']['num_cached_scripts'] ?? null,
|
||||||
|
];
|
||||||
|
} else {
|
||||||
|
$data['opcache'] = [
|
||||||
|
'enabled' => false,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->cache instanceof ICanCacheInMemory) {
|
||||||
|
$data['cache'] = [
|
||||||
|
'type' => $this->cache->getName(),
|
||||||
|
'stats' => $this->cache->getStats(),
|
||||||
|
];
|
||||||
|
} else {
|
||||||
|
$data['cache'] = [
|
||||||
|
'type' => $this->cache->getName(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->lock instanceof CacheLock) {
|
||||||
|
$data['lock'] = [
|
||||||
|
'type' => $this->lock->getName(),
|
||||||
|
'stats' => $this->lock->getCacheStats(),
|
||||||
|
];
|
||||||
|
} else {
|
||||||
|
$data['lock'] = [
|
||||||
|
'type' => $this->lock->getName(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->response->setType('json', 'application/json; charset=utf-8');
|
||||||
|
$this->response->addContent(json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -9,7 +9,6 @@ namespace Friendica\Object;
|
||||||
|
|
||||||
use Friendica\Content\ContactSelector;
|
use Friendica\Content\ContactSelector;
|
||||||
use Friendica\Content\Feature;
|
use Friendica\Content\Feature;
|
||||||
use Friendica\Core\Addon;
|
|
||||||
use Friendica\Core\Protocol;
|
use Friendica\Core\Protocol;
|
||||||
use Friendica\Core\Renderer;
|
use Friendica\Core\Renderer;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
|
|
@ -1118,12 +1117,14 @@ class Post
|
||||||
$conv = $this->getThread();
|
$conv = $this->getThread();
|
||||||
|
|
||||||
if ($conv->isWritable() && $this->isWritable()) {
|
if ($conv->isWritable() && $this->isWritable()) {
|
||||||
|
$addonHelper = DI::addonHelper();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Hmmm, code depending on the presence of a particular addon?
|
* Hmmm, code depending on the presence of a particular addon?
|
||||||
* This should be better if done by a hook
|
* This should be better if done by a hook
|
||||||
*/
|
*/
|
||||||
$qcomment = null;
|
$qcomment = null;
|
||||||
if (Addon::isEnabled('qcomment')) {
|
if ($addonHelper->isAddonEnabled('qcomment')) {
|
||||||
$words = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'qcomment', 'words');
|
$words = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'qcomment', 'words');
|
||||||
$qcomment = $words ? explode("\n", $words) : [];
|
$qcomment = $words ? explode("\n", $words) : [];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -327,7 +327,7 @@ class Processor
|
||||||
|
|
||||||
private function getHeaderFromJetstream(stdClass $data, int $uid, int $protocol = Conversation::PARCEL_JETSTREAM): array
|
private function getHeaderFromJetstream(stdClass $data, int $uid, int $protocol = Conversation::PARCEL_JETSTREAM): array
|
||||||
{
|
{
|
||||||
$contact = $this->actor->getContactByDID($data->did, $uid, 0);
|
$contact = $this->actor->getContactByDID($data->did, $uid, 0, true);
|
||||||
if (empty($contact)) {
|
if (empty($contact)) {
|
||||||
$this->logger->info('Contact not found for user', ['did' => $data->did, 'uid' => $uid]);
|
$this->logger->info('Contact not found for user', ['did' => $data->did, 'uid' => $uid]);
|
||||||
return [];
|
return [];
|
||||||
|
|
@ -392,7 +392,7 @@ class Processor
|
||||||
if (empty($post->author) || empty($post->cid) || empty($parts->rkey)) {
|
if (empty($post->author) || empty($post->cid) || empty($parts->rkey)) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
$contact = $this->actor->getContactByDID($post->author->did, $uid, 0);
|
$contact = $this->actor->getContactByDID($post->author->did, $uid, 0, true);
|
||||||
if (empty($contact)) {
|
if (empty($contact)) {
|
||||||
$this->logger->info('Contact not found for user', ['did' => $post->author->did, 'uid' => $uid]);
|
$this->logger->info('Contact not found for user', ['did' => $post->author->did, 'uid' => $uid]);
|
||||||
return [];
|
return [];
|
||||||
|
|
|
||||||
|
|
@ -126,6 +126,11 @@ return [
|
||||||
// Display "Emoji Only" posts in big.
|
// Display "Emoji Only" posts in big.
|
||||||
'big_emojis' => true,
|
'big_emojis' => true,
|
||||||
|
|
||||||
|
// basepath (String)
|
||||||
|
// Absolute file path to your Friendica install
|
||||||
|
// Examples: /var/www, /home/user/friendica...
|
||||||
|
'basepath' => '',
|
||||||
|
|
||||||
// bulk_delivery (Boolean)
|
// bulk_delivery (Boolean)
|
||||||
// Delivers AP messages in a bulk (experimental)
|
// Delivers AP messages in a bulk (experimental)
|
||||||
'bulk_delivery' => false,
|
'bulk_delivery' => false,
|
||||||
|
|
@ -577,6 +582,12 @@ return [
|
||||||
// Transmit pending events upon accepted contact request for groups
|
// Transmit pending events upon accepted contact request for groups
|
||||||
'transmit_pending_events' => false,
|
'transmit_pending_events' => false,
|
||||||
|
|
||||||
|
// url (String)
|
||||||
|
// The absolute URL used to access your Friendica node. It should include the scheme, the domain name, and the
|
||||||
|
// sub-folder if any. Used by command-line processes to send correct links to your Friendica server.
|
||||||
|
// Example: https://example.com/friendica
|
||||||
|
'url' => '',
|
||||||
|
|
||||||
// username_min_length (Integer)
|
// username_min_length (Integer)
|
||||||
// The minimum character length a username can be.
|
// The minimum character length a username can be.
|
||||||
// This length is checked once the username has been trimmed and multiple spaces have been collapsed into one.
|
// This length is checked once the username has been trimmed and multiple spaces have been collapsed into one.
|
||||||
|
|
|
||||||
|
|
@ -642,7 +642,8 @@ return [
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|
||||||
'/stats' => [Module\Stats::class, [R::GET]],
|
'/stats' => [Module\Stats::class, [R::GET]],
|
||||||
|
'/stats/caching' => [Module\StatsCaching::class, [R::GET]],
|
||||||
|
|
||||||
'/network' => [
|
'/network' => [
|
||||||
'[/{content}]' => [Module\Conversation\Network::class, [R::GET]],
|
'[/{content}]' => [Module\Conversation\Network::class, [R::GET]],
|
||||||
|
|
|
||||||
26
tests/CacheLockTestCase.php
Normal file
26
tests/CacheLockTestCase.php
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// Copyright (C) 2010-2024, the Friendica project
|
||||||
|
// SPDX-FileCopyrightText: 2010-2024 the Friendica project
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
|
namespace Friendica\Test;
|
||||||
|
|
||||||
|
use Friendica\Core\Cache\Capability\ICanCacheInMemory;
|
||||||
|
use Friendica\Core\Lock\Capability\ICanLock;
|
||||||
|
|
||||||
|
abstract class CacheLockTestCase extends LockTestCase
|
||||||
|
{
|
||||||
|
abstract protected function getCache(): ICanCacheInMemory;
|
||||||
|
|
||||||
|
abstract protected function getInstance(): ICanLock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test if the getStats() result is identically to the getCacheStats()
|
||||||
|
*/
|
||||||
|
public function testGetStats()
|
||||||
|
{
|
||||||
|
self::assertSame(array_keys($this->getCache()->getStats()), array_keys($this->instance->getCacheStats()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -8,21 +8,17 @@
|
||||||
namespace Friendica\Test;
|
namespace Friendica\Test;
|
||||||
|
|
||||||
use Friendica\Core\Lock\Capability\ICanLock;
|
use Friendica\Core\Lock\Capability\ICanLock;
|
||||||
use Friendica\Test\MockedTestCase;
|
|
||||||
|
|
||||||
abstract class LockTestCase extends MockedTestCase
|
abstract class LockTestCase extends MockedTestCase
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var int Start time of the mock (used for time operations)
|
* Start time of the mock (used for time operations)
|
||||||
*/
|
*/
|
||||||
protected $startTime = 1417011228;
|
protected int $startTime = 1417011228;
|
||||||
|
protected ICanLock $instance;
|
||||||
|
|
||||||
/**
|
abstract protected function getInstance(): ICanLock;
|
||||||
* @var ICanLock
|
|
||||||
*/
|
|
||||||
protected $instance;
|
|
||||||
|
|
||||||
abstract protected function getInstance();
|
|
||||||
|
|
||||||
protected function setUp(): void
|
protected function setUp(): void
|
||||||
{
|
{
|
||||||
|
|
@ -205,4 +201,6 @@ abstract class LockTestCase extends MockedTestCase
|
||||||
self::assertFalse($this->instance->isLocked('wrongLock'));
|
self::assertFalse($this->instance->isLocked('wrongLock'));
|
||||||
self::assertFalse($this->instance->release('wrongLock'));
|
self::assertFalse($this->instance->release('wrongLock'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,6 @@ return [
|
||||||
'temppath' => '/tmp/friendica.local',
|
'temppath' => '/tmp/friendica.local',
|
||||||
'theme' => 'frio',
|
'theme' => 'frio',
|
||||||
'url' => 'https://friendica.local',
|
'url' => 'https://friendica.local',
|
||||||
'urlpath' => '',
|
|
||||||
'build' => 1508,
|
'build' => 1508,
|
||||||
'maintenance' => false,
|
'maintenance' => false,
|
||||||
'dbupdate' => 1,
|
'dbupdate' => 1,
|
||||||
|
|
|
||||||
|
|
@ -129,7 +129,6 @@ class AutomaticInstallationConsoleTest extends ConsoleTestCase
|
||||||
],
|
],
|
||||||
'system' => [
|
'system' => [
|
||||||
'basepath' => '',
|
'basepath' => '',
|
||||||
'urlpath' => '',
|
|
||||||
'url' => 'http://friendica.local',
|
'url' => 'http://friendica.local',
|
||||||
'ssl_policy' => 0,
|
'ssl_policy' => 0,
|
||||||
'default_timezone' => '',
|
'default_timezone' => '',
|
||||||
|
|
@ -152,7 +151,6 @@ class AutomaticInstallationConsoleTest extends ConsoleTestCase
|
||||||
'admin_email' => 'admin@philipp.info',
|
'admin_email' => 'admin@philipp.info',
|
||||||
],
|
],
|
||||||
'system' => [
|
'system' => [
|
||||||
'urlpath' => 'test/it',
|
|
||||||
'url' => 'http://friendica.local/test/it',
|
'url' => 'http://friendica.local/test/it',
|
||||||
'basepath' => '',
|
'basepath' => '',
|
||||||
'ssl_policy' => '2',
|
'ssl_policy' => '2',
|
||||||
|
|
@ -176,7 +174,6 @@ class AutomaticInstallationConsoleTest extends ConsoleTestCase
|
||||||
'admin_email' => 'admin@philipp.info',
|
'admin_email' => 'admin@philipp.info',
|
||||||
],
|
],
|
||||||
'system' => [
|
'system' => [
|
||||||
'urlpath' => 'test/it',
|
|
||||||
'url' => 'https://friendica.local/test/it',
|
'url' => 'https://friendica.local/test/it',
|
||||||
'basepath' => '',
|
'basepath' => '',
|
||||||
'ssl_policy' => '1',
|
'ssl_policy' => '1',
|
||||||
|
|
@ -352,7 +349,6 @@ FIN;
|
||||||
self::assertConfigEntry('system', 'default_timezone', $assertion, ($default) ? Installer::DEFAULT_TZ : null);
|
self::assertConfigEntry('system', 'default_timezone', $assertion, ($default) ? Installer::DEFAULT_TZ : null);
|
||||||
self::assertConfigEntry('system', 'language', $assertion, ($default) ? Installer::DEFAULT_LANG : null);
|
self::assertConfigEntry('system', 'language', $assertion, ($default) ? Installer::DEFAULT_LANG : null);
|
||||||
self::assertConfigEntry('system', 'url', $assertion);
|
self::assertConfigEntry('system', 'url', $assertion);
|
||||||
self::assertConfigEntry('system', 'urlpath', $assertion);
|
|
||||||
self::assertConfigEntry('system', 'ssl_policy', $assertion, ($default) ? App\BaseURL::DEFAULT_SSL_SCHEME : null);
|
self::assertConfigEntry('system', 'ssl_policy', $assertion, ($default) ? App\BaseURL::DEFAULT_SSL_SCHEME : null);
|
||||||
self::assertConfigEntry('system', 'basepath', ($realBasepath) ? $this->root->url() : $assertion);
|
self::assertConfigEntry('system', 'basepath', ($realBasepath) ? $this->root->url() : $assertion);
|
||||||
}
|
}
|
||||||
|
|
@ -446,7 +442,6 @@ return [
|
||||||
],
|
],
|
||||||
'system' => [
|
'system' => [
|
||||||
'basepath' => '{$conf('system', 'basepath')}',
|
'basepath' => '{$conf('system', 'basepath')}',
|
||||||
'urlpath' => '{$conf('system', 'urlpath')}',
|
|
||||||
'url' => '{$conf('system', 'url')}',
|
'url' => '{$conf('system', 'url')}',
|
||||||
'ssl_policy' => '{$conf('system', 'ssl_policy')}',
|
'ssl_policy' => '{$conf('system', 'ssl_policy')}',
|
||||||
'default_timezone' => '{$conf('system', 'default_timezone')}',
|
'default_timezone' => '{$conf('system', 'default_timezone')}',
|
||||||
|
|
@ -604,7 +599,7 @@ CONF;
|
||||||
self::assertStuckDB($txt);
|
self::assertStuckDB($txt);
|
||||||
self::assertTrue($this->root->hasChild('config' . DIRECTORY_SEPARATOR . 'local.config.php'));
|
self::assertTrue($this->root->hasChild('config' . DIRECTORY_SEPARATOR . 'local.config.php'));
|
||||||
|
|
||||||
self::assertConfig(['config' => ['hostname' => 'friendica.local'], 'system' => ['url' => 'http://friendica.local', 'ssl_policy' => 0, 'urlpath' => '']], false, true, false, true);
|
self::assertConfig(['config' => ['hostname' => 'friendica.local'], 'system' => ['url' => 'http://friendica.local', 'ssl_policy' => 0]], false, true, false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetHelp()
|
public function testGetHelp()
|
||||||
|
|
|
||||||
|
|
@ -35,4 +35,18 @@ class APCuCacheTest extends MemoryCacheTestCase
|
||||||
$this->cache->clear(false);
|
$this->cache->clear(false);
|
||||||
parent::tearDown();
|
parent::tearDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @small
|
||||||
|
*/
|
||||||
|
public function testStats()
|
||||||
|
{
|
||||||
|
$stats = $this->instance->getStats();
|
||||||
|
|
||||||
|
self::assertNotNull($stats['entries']);
|
||||||
|
self::assertNotNull($stats['used_memory']);
|
||||||
|
self::assertNotNull($stats['hits']);
|
||||||
|
self::assertNotNull($stats['misses']);
|
||||||
|
self::assertNotNull($stats['avail_mem']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,4 +33,12 @@ class ArrayCacheTest extends MemoryCacheTestCase
|
||||||
self::markTestSkipped("Array Cache doesn't support TTL");
|
self::markTestSkipped("Array Cache doesn't support TTL");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @small
|
||||||
|
*/
|
||||||
|
public function testGetStats()
|
||||||
|
{
|
||||||
|
self::assertEmpty($this->cache->getStats());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -59,4 +59,21 @@ class MemcacheCacheTest extends MemoryCacheTestCase
|
||||||
{
|
{
|
||||||
static::markTestIncomplete('Race condition because of too fast getAllKeys() which uses a workaround');
|
static::markTestIncomplete('Race condition because of too fast getAllKeys() which uses a workaround');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @small
|
||||||
|
*/
|
||||||
|
public function testStats()
|
||||||
|
{
|
||||||
|
$stats = $this->instance->getStats();
|
||||||
|
|
||||||
|
self::assertNotNull($stats['version']);
|
||||||
|
self::assertIsNumeric($stats['hits']);
|
||||||
|
self::assertIsNumeric($stats['misses']);
|
||||||
|
self::assertIsNumeric($stats['evictions']);
|
||||||
|
self::assertIsNumeric($stats['entries']);
|
||||||
|
self::assertIsNumeric($stats['used_memory']);
|
||||||
|
self::assertGreaterThan(0, $stats['connected_clients']);
|
||||||
|
self::assertGreaterThan(0, $stats['uptime']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -58,4 +58,21 @@ class MemcachedCacheTest extends MemoryCacheTestCase
|
||||||
{
|
{
|
||||||
static::markTestIncomplete('Race condition because of too fast getAllKeys() which uses a workaround');
|
static::markTestIncomplete('Race condition because of too fast getAllKeys() which uses a workaround');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @small
|
||||||
|
*/
|
||||||
|
public function testStats()
|
||||||
|
{
|
||||||
|
$stats = $this->instance->getStats();
|
||||||
|
|
||||||
|
self::assertNotNull($stats['version']);
|
||||||
|
self::assertIsNumeric($stats['hits']);
|
||||||
|
self::assertIsNumeric($stats['misses']);
|
||||||
|
self::assertIsNumeric($stats['evictions']);
|
||||||
|
self::assertIsNumeric($stats['entries']);
|
||||||
|
self::assertIsNumeric($stats['used_memory']);
|
||||||
|
self::assertGreaterThan(0, $stats['connected_clients']);
|
||||||
|
self::assertGreaterThan(0, $stats['uptime']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
56
tests/src/Core/Cache/ProfilerCacheDecoratorTest.php
Normal file
56
tests/src/Core/Cache/ProfilerCacheDecoratorTest.php
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// Copyright (C) 2010-2024, the Friendica project
|
||||||
|
// SPDX-FileCopyrightText: 2010-2024 the Friendica project
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
|
namespace Core\Cache;
|
||||||
|
|
||||||
|
use Friendica\Core\Cache\Type\ArrayCache;
|
||||||
|
use Friendica\Core\Cache\Type\ProfilerCacheDecorator;
|
||||||
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
|
use Friendica\Test\MemoryCacheTestCase;
|
||||||
|
use Friendica\Util\Profiler;
|
||||||
|
|
||||||
|
class ProfilerCacheDecoratorTest extends MemoryCacheTestCase
|
||||||
|
{
|
||||||
|
protected function getInstance()
|
||||||
|
{
|
||||||
|
$config = \Mockery::mock(IManageConfigValues::class);
|
||||||
|
$config->shouldReceive('get')->with('system', 'profiler')->once()->andReturn(false);
|
||||||
|
$config->shouldReceive('get')->with('rendertime', 'callstack')->once()->andReturn(false);
|
||||||
|
|
||||||
|
$this->cache = new ProfilerCacheDecorator(new ArrayCache('localhost'), new Profiler($config));
|
||||||
|
return $this->cache;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function tearDown(): void
|
||||||
|
{
|
||||||
|
$this->cache->clear(false);
|
||||||
|
parent::tearDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @doesNotPerformAssertions
|
||||||
|
*/
|
||||||
|
public function testTTL()
|
||||||
|
{
|
||||||
|
// Array Cache doesn't support TTL
|
||||||
|
self::markTestSkipped("Array Cache doesn't support TTL");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @small
|
||||||
|
*/
|
||||||
|
public function testGetStats()
|
||||||
|
{
|
||||||
|
self::assertEmpty($this->cache->getStats());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetName()
|
||||||
|
{
|
||||||
|
self::assertStringEndsWith(' (with profiler)', $this->instance->getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -57,4 +57,21 @@ class RedisCacheTest extends MemoryCacheTestCase
|
||||||
$this->cache->clear(false);
|
$this->cache->clear(false);
|
||||||
parent::tearDown();
|
parent::tearDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @small
|
||||||
|
*/
|
||||||
|
public function testStats()
|
||||||
|
{
|
||||||
|
$stats = $this->instance->getStats();
|
||||||
|
|
||||||
|
self::assertNotNull($stats['version']);
|
||||||
|
self::assertIsNumeric($stats['hits']);
|
||||||
|
self::assertIsNumeric($stats['misses']);
|
||||||
|
self::assertIsNumeric($stats['evictions']);
|
||||||
|
self::assertIsNumeric($stats['entries']);
|
||||||
|
self::assertIsNumeric($stats['used_memory']);
|
||||||
|
self::assertGreaterThan(0, $stats['connected_clients']);
|
||||||
|
self::assertGreaterThan(0, $stats['uptime']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,26 +7,39 @@
|
||||||
|
|
||||||
namespace Friendica\Test\src\Core\Lock;
|
namespace Friendica\Test\src\Core\Lock;
|
||||||
|
|
||||||
|
use Friendica\Core\Cache\Capability\ICanCacheInMemory;
|
||||||
use Friendica\Core\Cache\Type\APCuCache;
|
use Friendica\Core\Cache\Type\APCuCache;
|
||||||
|
use Friendica\Core\Lock\Capability\ICanLock;
|
||||||
use Friendica\Core\Lock\Type\CacheLock;
|
use Friendica\Core\Lock\Type\CacheLock;
|
||||||
use Friendica\Test\LockTestCase;
|
use Friendica\Test\CacheLockTestCase;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @group APCU
|
* @group APCU
|
||||||
*/
|
*/
|
||||||
class APCuCacheLockTest extends LockTestCase
|
class APCuCacheLockTest extends CacheLockTestCase
|
||||||
{
|
{
|
||||||
|
private APCuCache $cache;
|
||||||
|
private ICanLock $lock;
|
||||||
|
|
||||||
protected function setUp(): void
|
protected function setUp(): void
|
||||||
{
|
{
|
||||||
if (!APCuCache::isAvailable()) {
|
if (!APCuCache::isAvailable()) {
|
||||||
static::markTestSkipped('APCu is not available');
|
static::markTestSkipped('APCu is not available');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->cache = new APCuCache('localhost');
|
||||||
|
$this->lock = new CacheLock($this->cache);
|
||||||
|
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getInstance()
|
protected function getInstance(): CacheLock
|
||||||
{
|
{
|
||||||
return new CacheLock(new APCuCache('localhost'));
|
return $this->lock;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getCache(): ICanCacheInMemory
|
||||||
|
{
|
||||||
|
return $this->cache;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,15 +7,32 @@
|
||||||
|
|
||||||
namespace Friendica\Test\src\Core\Lock;
|
namespace Friendica\Test\src\Core\Lock;
|
||||||
|
|
||||||
|
use Friendica\Core\Cache\Capability\ICanCacheInMemory;
|
||||||
use Friendica\Core\Cache\Type\ArrayCache;
|
use Friendica\Core\Cache\Type\ArrayCache;
|
||||||
use Friendica\Core\Lock\Type\CacheLock;
|
use Friendica\Core\Lock\Type\CacheLock;
|
||||||
use Friendica\Test\LockTestCase;
|
use Friendica\Test\CacheLockTestCase;
|
||||||
|
|
||||||
class ArrayCacheLockTest extends LockTestCase
|
class ArrayCacheLockTest extends CacheLockTestCase
|
||||||
{
|
{
|
||||||
protected function getInstance()
|
private CacheLock $lock;
|
||||||
|
private ArrayCache $cache;
|
||||||
|
|
||||||
|
protected function setUp(): void
|
||||||
{
|
{
|
||||||
return new CacheLock(new ArrayCache('localhost'));
|
$this->cache = new ArrayCache('localhost');
|
||||||
|
$this->lock = new CacheLock($this->cache);
|
||||||
|
|
||||||
|
parent::setUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getInstance(): CacheLock
|
||||||
|
{
|
||||||
|
return $this->lock;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getCache(): ICanCacheInMemory
|
||||||
|
{
|
||||||
|
return $this->cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
namespace Friendica\Test\src\Core\Lock;
|
namespace Friendica\Test\src\Core\Lock;
|
||||||
|
|
||||||
|
use Friendica\Core\Lock\Capability\ICanLock;
|
||||||
use Friendica\Core\Lock\Type\DatabaseLock;
|
use Friendica\Core\Lock\Type\DatabaseLock;
|
||||||
use Friendica\Test\LockTestCase;
|
use Friendica\Test\LockTestCase;
|
||||||
use Friendica\Test\Util\CreateDatabaseTrait;
|
use Friendica\Test\Util\CreateDatabaseTrait;
|
||||||
|
|
@ -26,7 +27,7 @@ class DatabaseLockDriverTest extends LockTestCase
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getInstance()
|
protected function getInstance(): ICanLock
|
||||||
{
|
{
|
||||||
return new DatabaseLock($this->getDbInstance(), $this->pid);
|
return new DatabaseLock($this->getDbInstance(), $this->pid);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,19 +8,23 @@
|
||||||
namespace Friendica\Test\src\Core\Lock;
|
namespace Friendica\Test\src\Core\Lock;
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
|
use Friendica\Core\Cache\Capability\ICanCacheInMemory;
|
||||||
use Friendica\Core\Cache\Type\MemcacheCache;
|
use Friendica\Core\Cache\Type\MemcacheCache;
|
||||||
use Friendica\Core\Config\Capability\IManageConfigValues;
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
use Friendica\Core\Lock\Type\CacheLock;
|
use Friendica\Core\Lock\Type\CacheLock;
|
||||||
use Friendica\Test\LockTestCase;
|
use Friendica\Test\CacheLockTestCase;
|
||||||
use Mockery;
|
use Mockery;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @requires extension Memcache
|
* @requires extension Memcache
|
||||||
* @group MEMCACHE
|
* @group MEMCACHE
|
||||||
*/
|
*/
|
||||||
class MemcacheCacheLockTest extends LockTestCase
|
class MemcacheCacheLockTest extends CacheLockTestCase
|
||||||
{
|
{
|
||||||
protected function getInstance()
|
private CacheLock $lock;
|
||||||
|
private MemcacheCache $cache;
|
||||||
|
|
||||||
|
protected function setUp(): void
|
||||||
{
|
{
|
||||||
$configMock = Mockery::mock(IManageConfigValues::class);
|
$configMock = Mockery::mock(IManageConfigValues::class);
|
||||||
|
|
||||||
|
|
@ -36,16 +40,24 @@ class MemcacheCacheLockTest extends LockTestCase
|
||||||
->with('system', 'memcache_port')
|
->with('system', 'memcache_port')
|
||||||
->andReturn($port);
|
->andReturn($port);
|
||||||
|
|
||||||
$lock = null;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$cache = new MemcacheCache($host, $configMock);
|
$this->cache = new MemcacheCache($host, $configMock);
|
||||||
$lock = new CacheLock($cache);
|
$this->lock = new CacheLock($this->cache);
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
static::markTestSkipped('Memcache is not available');
|
static::markTestSkipped('Memcache is not available');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $lock;
|
parent::setUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getInstance(): CacheLock
|
||||||
|
{
|
||||||
|
return $this->lock;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getCache(): ICanCacheInMemory
|
||||||
|
{
|
||||||
|
return $this->cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,11 @@
|
||||||
namespace Friendica\Test\src\Core\Lock;
|
namespace Friendica\Test\src\Core\Lock;
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
|
use Friendica\Core\Cache\Capability\ICanCacheInMemory;
|
||||||
use Friendica\Core\Cache\Type\MemcachedCache;
|
use Friendica\Core\Cache\Type\MemcachedCache;
|
||||||
use Friendica\Core\Config\Capability\IManageConfigValues;
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
use Friendica\Core\Lock\Type\CacheLock;
|
use Friendica\Core\Lock\Type\CacheLock;
|
||||||
use Friendica\Test\LockTestCase;
|
use Friendica\Test\CacheLockTestCase;
|
||||||
use Mockery;
|
use Mockery;
|
||||||
use Psr\Log\NullLogger;
|
use Psr\Log\NullLogger;
|
||||||
|
|
||||||
|
|
@ -19,9 +20,12 @@ use Psr\Log\NullLogger;
|
||||||
* @requires extension memcached
|
* @requires extension memcached
|
||||||
* @group MEMCACHED
|
* @group MEMCACHED
|
||||||
*/
|
*/
|
||||||
class MemcachedCacheLockTest extends LockTestCase
|
class MemcachedCacheLockTest extends CacheLockTestCase
|
||||||
{
|
{
|
||||||
protected function getInstance()
|
private MemcachedCache $cache;
|
||||||
|
private CacheLock $lock;
|
||||||
|
|
||||||
|
protected function setUp(): void
|
||||||
{
|
{
|
||||||
$configMock = Mockery::mock(IManageConfigValues::class);
|
$configMock = Mockery::mock(IManageConfigValues::class);
|
||||||
|
|
||||||
|
|
@ -35,16 +39,24 @@ class MemcachedCacheLockTest extends LockTestCase
|
||||||
|
|
||||||
$logger = new NullLogger();
|
$logger = new NullLogger();
|
||||||
|
|
||||||
$lock = null;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$cache = new MemcachedCache($host, $configMock, $logger);
|
$this->cache = new MemcachedCache($host, $configMock, $logger);
|
||||||
$lock = new CacheLock($cache);
|
$this->lock = new CacheLock($this->cache);
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
static::markTestSkipped('Memcached is not available');
|
static::markTestSkipped('Memcached is not available');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $lock;
|
parent::setUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getInstance(): CacheLock
|
||||||
|
{
|
||||||
|
return $this->lock;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getCache(): ICanCacheInMemory
|
||||||
|
{
|
||||||
|
return $this->cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -8,19 +8,20 @@
|
||||||
namespace Friendica\Test\src\Core\Lock;
|
namespace Friendica\Test\src\Core\Lock;
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
|
use Friendica\Core\Cache\Capability\ICanCacheInMemory;
|
||||||
use Friendica\Core\Cache\Type\RedisCache;
|
use Friendica\Core\Cache\Type\RedisCache;
|
||||||
use Friendica\Core\Config\Capability\IManageConfigValues;
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
use Friendica\Core\Lock\Type\CacheLock;
|
use Friendica\Core\Lock\Type\CacheLock;
|
||||||
use Friendica\Test\LockTestCase;
|
use Friendica\Test\CacheLockTestCase;
|
||||||
use Mockery;
|
use Mockery;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @requires extension redis
|
* @requires extension redis
|
||||||
* @group REDIS
|
* @group REDIS
|
||||||
*/
|
*/
|
||||||
class RedisCacheLockTest extends LockTestCase
|
class RedisCacheLockTest extends CacheLockTestCase
|
||||||
{
|
{
|
||||||
protected function getInstance()
|
protected function setUp(): void
|
||||||
{
|
{
|
||||||
$configMock = Mockery::mock(IManageConfigValues::class);
|
$configMock = Mockery::mock(IManageConfigValues::class);
|
||||||
|
|
||||||
|
|
@ -45,15 +46,23 @@ class RedisCacheLockTest extends LockTestCase
|
||||||
->with('system', 'redis_password')
|
->with('system', 'redis_password')
|
||||||
->andReturn(null);
|
->andReturn(null);
|
||||||
|
|
||||||
$lock = null;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$cache = new RedisCache($host, $configMock);
|
$this->cache = new RedisCache($host, $configMock);
|
||||||
$lock = new CacheLock($cache);
|
$this->lock = new CacheLock($this->cache);
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
static::markTestSkipped('Redis is not available. Error: ' . $e->getMessage());
|
static::markTestSkipped('Redis is not available. Error: ' . $e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
return $lock;
|
parent::setUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getInstance(): CAcheLock
|
||||||
|
{
|
||||||
|
return $this->lock;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getCache(): ICanCacheInMemory
|
||||||
|
{
|
||||||
|
return $this->cache;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ use Friendica\App;
|
||||||
use Friendica\Core\Config\Capability\IManageConfigValues;
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
use Friendica\Core\Config\Model\ReadOnlyFileConfig;
|
use Friendica\Core\Config\Model\ReadOnlyFileConfig;
|
||||||
use Friendica\Core\Config\ValueObject\Cache;
|
use Friendica\Core\Config\ValueObject\Cache;
|
||||||
|
use Friendica\Core\Lock\Capability\ICanLock;
|
||||||
use Friendica\Core\Lock\Type\SemaphoreLock;
|
use Friendica\Core\Lock\Type\SemaphoreLock;
|
||||||
use Friendica\Core\System;
|
use Friendica\Core\System;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
|
|
@ -31,7 +32,7 @@ class SemaphoreLockTest extends LockTestCase
|
||||||
$dice->shouldReceive('create')->with(App::class)->andReturn($app);
|
$dice->shouldReceive('create')->with(App::class)->andReturn($app);
|
||||||
|
|
||||||
$configCache = new Cache(['system' => ['temppath' => '/tmp']]);
|
$configCache = new Cache(['system' => ['temppath' => '/tmp']]);
|
||||||
$configMock = new ReadOnlyFileConfig($configCache);
|
$configMock = new ReadOnlyFileConfig($configCache);
|
||||||
$dice->shouldReceive('create')->with(IManageConfigValues::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
|
// @todo Because "get_temppath()" is using static methods, we have to initialize the BaseObject
|
||||||
|
|
@ -40,7 +41,7 @@ class SemaphoreLockTest extends LockTestCase
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getInstance()
|
protected function getInstance(): ICanLock
|
||||||
{
|
{
|
||||||
return new SemaphoreLock();
|
return new SemaphoreLock();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
203
tests/src/Module/StatsCachingTest.php
Normal file
203
tests/src/Module/StatsCachingTest.php
Normal file
|
|
@ -0,0 +1,203 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// Copyright (C) 2010-2024, the Friendica project
|
||||||
|
// SPDX-FileCopyrightText: 2010-2024 the Friendica project
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
|
namespace Friendica\Test\src\Module;
|
||||||
|
|
||||||
|
use Friendica\Capabilities\ICanCreateResponses;
|
||||||
|
use Friendica\Core\Cache\Capability\ICanCache;
|
||||||
|
use Friendica\Core\Cache\Type\ArrayCache;
|
||||||
|
use Friendica\Core\Cache\Type\DatabaseCache;
|
||||||
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
|
use Friendica\Core\Lock\Capability\ICanLock;
|
||||||
|
use Friendica\Core\Lock\Type\CacheLock;
|
||||||
|
use Friendica\Core\Lock\Type\DatabaseLock;
|
||||||
|
use Friendica\DI;
|
||||||
|
use Friendica\Module\Special\HTTPException;
|
||||||
|
use Friendica\Module\StatsCaching;
|
||||||
|
use Friendica\Test\FixtureTestCase;
|
||||||
|
use Mockery\MockInterface;
|
||||||
|
use phpmock\mockery\PHPMockery;
|
||||||
|
|
||||||
|
class StatsCachingTest extends FixtureTestCase
|
||||||
|
{
|
||||||
|
/** @var MockInterface|HTTPException */
|
||||||
|
protected $httpExceptionMock;
|
||||||
|
|
||||||
|
protected ICanCache $cache;
|
||||||
|
protected ICanLock $lock;
|
||||||
|
|
||||||
|
/** @var MockInterface|IManageConfigValues */
|
||||||
|
protected $config;
|
||||||
|
|
||||||
|
protected function setUp(): void
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
$this->httpExceptionMock = \Mockery::mock(HTTPException::class);
|
||||||
|
$this->config = \Mockery::mock(IManageConfigValues::class);
|
||||||
|
$this->cache = new ArrayCache('localhost');
|
||||||
|
$this->lock = new CacheLock($this->cache);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testStatsCachingNotAllowed()
|
||||||
|
{
|
||||||
|
$this->httpExceptionMock->shouldReceive('content')->andReturn('failed')->once();
|
||||||
|
|
||||||
|
$response = (new StatsCaching(DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), [], $this->config, $this->cache, $this->lock, []))
|
||||||
|
->run($this->httpExceptionMock);
|
||||||
|
|
||||||
|
self::assertEquals('404', $response->getStatusCode());
|
||||||
|
self::assertEquals('Page not found', $response->getReasonPhrase());
|
||||||
|
self::assertEquals('failed', $response->getBody());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testStatsCachingWitMinimumCache()
|
||||||
|
{
|
||||||
|
$request = [
|
||||||
|
'key' => '12345',
|
||||||
|
];
|
||||||
|
$this->config->shouldReceive('get')->with('system', 'stats_key')->twice()->andReturn('12345');
|
||||||
|
PHPMockery::mock("Friendica\\Module", "function_exists")->with('opcache_get_status')->once()->andReturn(false);
|
||||||
|
|
||||||
|
$response = (new StatsCaching(DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), [], $this->config, $this->cache, $this->lock, []))
|
||||||
|
->run($this->httpExceptionMock, $request);
|
||||||
|
|
||||||
|
self::assertJson($response->getBody());
|
||||||
|
self::assertEquals(['Content-type' => ['application/json; charset=utf-8'], ICanCreateResponses::X_HEADER => ['json']], $response->getHeaders());
|
||||||
|
|
||||||
|
$json = json_decode($response->getBody(), true);
|
||||||
|
|
||||||
|
self::assertEquals([
|
||||||
|
'type' => 'array',
|
||||||
|
'stats' => [],
|
||||||
|
], $json['cache']);
|
||||||
|
self::assertEquals([
|
||||||
|
'type' => 'array',
|
||||||
|
'stats' => [],
|
||||||
|
], $json['lock']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testStatsCachingWithDatabase()
|
||||||
|
{
|
||||||
|
$request = [
|
||||||
|
'key' => '12345',
|
||||||
|
];
|
||||||
|
$this->config->shouldReceive('get')->with('system', 'stats_key')->twice()->andReturn('12345');
|
||||||
|
|
||||||
|
$this->cache = new DatabaseCache('localhost', DI::dba());
|
||||||
|
$this->lock = new DatabaseLock(DI::dba());
|
||||||
|
PHPMockery::mock("Friendica\\Module", "function_exists")->with('opcache_get_status')->once()->andReturn(false);
|
||||||
|
|
||||||
|
$response = (new StatsCaching(DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), [], $this->config, $this->cache, $this->lock, []))
|
||||||
|
->run($this->httpExceptionMock, $request);
|
||||||
|
|
||||||
|
self::assertJson($response->getBody());
|
||||||
|
self::assertEquals(['Content-type' => ['application/json; charset=utf-8'], ICanCreateResponses::X_HEADER => ['json']], $response->getHeaders());
|
||||||
|
|
||||||
|
$json = json_decode($response->getBody(), true);
|
||||||
|
|
||||||
|
self::assertEquals(['enabled' => false], $json['opcache']);
|
||||||
|
self::assertEquals(['type' => 'database'], $json['cache']);
|
||||||
|
self::assertEquals(['type' => 'database'], $json['lock']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testStatsCachingWithCache()
|
||||||
|
{
|
||||||
|
$request = [
|
||||||
|
'key' => '12345',
|
||||||
|
];
|
||||||
|
$this->config->shouldReceive('get')->with('system', 'stats_key')->twice()->andReturn('12345');
|
||||||
|
|
||||||
|
$this->cache = new DatabaseCache('localhost', DI::dba());
|
||||||
|
$this->lock = new DatabaseLock(DI::dba());
|
||||||
|
PHPMockery::mock("Friendica\\Module", "function_exists")->with('opcache_get_status')->once()->andReturn(false);
|
||||||
|
|
||||||
|
$response = (new StatsCaching(DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), [], $this->config, $this->cache, $this->lock, []))
|
||||||
|
->run($this->httpExceptionMock, $request);
|
||||||
|
|
||||||
|
self::assertJson($response->getBody());
|
||||||
|
self::assertEquals(['Content-type' => ['application/json; charset=utf-8'], ICanCreateResponses::X_HEADER => ['json']], $response->getHeaders());
|
||||||
|
|
||||||
|
$json = json_decode($response->getBody(), true);
|
||||||
|
|
||||||
|
self::assertEquals(['enabled' => false], $json['opcache']);
|
||||||
|
self::assertEquals(['type' => 'database'], $json['cache']);
|
||||||
|
self::assertEquals(['type' => 'database'], $json['lock']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testStatsCachingWithOpcacheAndNull()
|
||||||
|
{
|
||||||
|
$request = [
|
||||||
|
'key' => '12345',
|
||||||
|
];
|
||||||
|
$this->config->shouldReceive('get')->with('system', 'stats_key')->twice()->andReturn('12345');
|
||||||
|
|
||||||
|
$this->cache = new DatabaseCache('localhost', DI::dba());
|
||||||
|
$this->lock = new DatabaseLock(DI::dba());
|
||||||
|
PHPMockery::mock("Friendica\\Module", "function_exists")->with('opcache_get_status')->once()->andReturn(true);
|
||||||
|
PHPMockery::mock("Friendica\\Module", "opcache_get_status")->with(false)->once()->andReturn(false);
|
||||||
|
|
||||||
|
$response = (new StatsCaching(DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), [], $this->config, $this->cache, $this->lock, []))
|
||||||
|
->run($this->httpExceptionMock, $request);
|
||||||
|
|
||||||
|
self::assertJson($response->getBody());
|
||||||
|
self::assertEquals(['Content-type' => ['application/json; charset=utf-8'], ICanCreateResponses::X_HEADER => ['json']], $response->getHeaders());
|
||||||
|
|
||||||
|
$json = json_decode($response->getBody(), true);
|
||||||
|
|
||||||
|
self::assertEquals([
|
||||||
|
'enabled' => false,
|
||||||
|
'hit_rate' => null,
|
||||||
|
'used_memory' => null,
|
||||||
|
'free_memory' => null,
|
||||||
|
'num_cached_scripts' => null,
|
||||||
|
], $json['opcache']);
|
||||||
|
self::assertEquals(['type' => 'database'], $json['cache']);
|
||||||
|
self::assertEquals(['type' => 'database'], $json['lock']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testStatsCachingWithOpcacheAndValues()
|
||||||
|
{
|
||||||
|
$request = [
|
||||||
|
'key' => '12345',
|
||||||
|
];
|
||||||
|
$this->config->shouldReceive('get')->with('system', 'stats_key')->twice()->andReturn('12345');
|
||||||
|
|
||||||
|
$this->cache = new DatabaseCache('localhost', DI::dba());
|
||||||
|
$this->lock = new DatabaseLock(DI::dba());
|
||||||
|
PHPMockery::mock("Friendica\\Module", "function_exists")->with('opcache_get_status')->once()->andReturn(true);
|
||||||
|
PHPMockery::mock("Friendica\\Module", "opcache_get_status")->with(false)->once()->andReturn([
|
||||||
|
'opcache_enabled' => true,
|
||||||
|
'opcache_statistics' => [
|
||||||
|
'opcache_hit_rate' => 1,
|
||||||
|
'num_cached_scripts' => 2,
|
||||||
|
],
|
||||||
|
'memory_usage' => [
|
||||||
|
'used_memory' => 3,
|
||||||
|
'free_memory' => 4,
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response = (new StatsCaching(DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), [], $this->config, $this->cache, $this->lock, []))
|
||||||
|
->run($this->httpExceptionMock, $request);
|
||||||
|
|
||||||
|
self::assertJson($response->getBody());
|
||||||
|
self::assertEquals(['Content-type' => ['application/json; charset=utf-8'], ICanCreateResponses::X_HEADER => ['json']], $response->getHeaders());
|
||||||
|
|
||||||
|
$json = json_decode($response->getBody(), true);
|
||||||
|
|
||||||
|
self::assertEquals([
|
||||||
|
'enabled' => true,
|
||||||
|
'hit_rate' => 1,
|
||||||
|
'used_memory' => 3,
|
||||||
|
'free_memory' => 4,
|
||||||
|
'num_cached_scripts' => 2,
|
||||||
|
], $json['opcache']);
|
||||||
|
self::assertEquals(['type' => 'database'], $json['cache']);
|
||||||
|
self::assertEquals(['type' => 'database'], $json['lock']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: 2025.02-dev\n"
|
"Project-Id-Version: 2025.02-dev\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-02-11 07:41+0000\n"
|
"POT-Creation-Date: 2025-04-28 19:34+0200\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
|
@ -18,33 +18,33 @@ msgstr ""
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
|
||||||
#: mod/item.php:87 mod/item.php:90 mod/item.php:157 mod/item.php:160
|
#: mod/item.php:91 mod/item.php:94 mod/item.php:161 mod/item.php:164
|
||||||
msgid "Unable to locate original post."
|
msgid "Unable to locate original post."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/item.php:125
|
#: mod/item.php:129
|
||||||
msgid "Post updated."
|
msgid "Post updated."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/item.php:190 mod/item.php:194
|
#: mod/item.php:194 mod/item.php:198
|
||||||
msgid "Item wasn't stored."
|
msgid "Item wasn't stored."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/item.php:204
|
#: mod/item.php:208
|
||||||
msgid "Item couldn't be fetched."
|
msgid "Item couldn't be fetched."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/item.php:248 mod/item.php:252
|
#: mod/item.php:252 mod/item.php:256
|
||||||
msgid "Empty post discarded."
|
msgid "Empty post discarded."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/item.php:423 src/Module/Admin/Themes/Details.php:31
|
#: mod/item.php:431 src/Module/Admin/Themes/Details.php:31
|
||||||
#: src/Module/Admin/Themes/Index.php:51 src/Module/Debug/ItemBody.php:34
|
#: src/Module/Admin/Themes/Index.php:51 src/Module/Debug/ItemBody.php:34
|
||||||
#: src/Module/Debug/ItemBody.php:42 src/Module/Item/Feed.php:66
|
#: src/Module/Debug/ItemBody.php:42 src/Module/Item/Feed.php:66
|
||||||
msgid "Item not found."
|
msgid "Item not found."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/item.php:447 mod/message.php:54 mod/message.php:100 mod/notes.php:34
|
#: mod/item.php:455 mod/message.php:54 mod/message.php:100 mod/notes.php:34
|
||||||
#: mod/photos.php:131 mod/photos.php:623 src/Model/Event.php:506
|
#: mod/photos.php:131 mod/photos.php:623 src/Model/Event.php:506
|
||||||
#: src/Module/Attach.php:40 src/Module/BaseApi.php:90
|
#: src/Module/Attach.php:40 src/Module/BaseApi.php:90
|
||||||
#: src/Module/BaseNotifications.php:83 src/Module/BaseSettings.php:38
|
#: src/Module/BaseNotifications.php:83 src/Module/BaseSettings.php:38
|
||||||
|
|
@ -59,7 +59,7 @@ msgstr ""
|
||||||
#: src/Module/Invite.php:28 src/Module/Invite.php:116
|
#: src/Module/Invite.php:28 src/Module/Invite.php:116
|
||||||
#: src/Module/Notifications/Notification.php:62
|
#: src/Module/Notifications/Notification.php:62
|
||||||
#: src/Module/Notifications/Notification.php:93
|
#: src/Module/Notifications/Notification.php:93
|
||||||
#: src/Module/OStatus/Subscribe.php:54 src/Module/Post/Edit.php:67
|
#: src/Module/OStatus/Subscribe.php:54 src/Module/Post/Edit.php:72
|
||||||
#: src/Module/Profile/Common.php:63 src/Module/Profile/Contacts.php:66
|
#: src/Module/Profile/Common.php:63 src/Module/Profile/Contacts.php:66
|
||||||
#: src/Module/Profile/Photos.php:81 src/Module/Profile/Schedule.php:25
|
#: src/Module/Profile/Photos.php:81 src/Module/Profile/Schedule.php:25
|
||||||
#: src/Module/Profile/Schedule.php:42 src/Module/Register.php:70
|
#: src/Module/Profile/Schedule.php:42 src/Module/Register.php:70
|
||||||
|
|
@ -77,7 +77,7 @@ msgstr ""
|
||||||
#: src/Module/Settings/UserExport.php:100
|
#: src/Module/Settings/UserExport.php:100
|
||||||
#: src/Module/Settings/UserExport.php:199
|
#: src/Module/Settings/UserExport.php:199
|
||||||
#: src/Module/Settings/UserExport.php:219
|
#: src/Module/Settings/UserExport.php:219
|
||||||
#: src/Module/Settings/UserExport.php:284 src/Module/User/Delegation.php:142
|
#: src/Module/Settings/UserExport.php:284 src/Module/User/Delegation.php:146
|
||||||
#: src/Module/User/Import.php:71 src/Module/User/Import.php:78
|
#: src/Module/User/Import.php:71 src/Module/User/Import.php:78
|
||||||
msgid "Permission denied."
|
msgid "Permission denied."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
@ -273,25 +273,25 @@ msgstr ""
|
||||||
msgid "Your message:"
|
msgid "Your message:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/message.php:186 mod/message.php:341 src/Content/Conversation.php:358
|
#: mod/message.php:186 mod/message.php:341 src/Content/Conversation.php:359
|
||||||
#: src/Module/Post/Edit.php:122
|
#: src/Module/Post/Edit.php:127
|
||||||
msgid "Upload photo"
|
msgid "Upload photo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/message.php:187 mod/message.php:342 src/Module/Post/Edit.php:126
|
#: mod/message.php:187 mod/message.php:342 src/Module/Post/Edit.php:131
|
||||||
msgid "Insert web link"
|
msgid "Insert web link"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/message.php:188 mod/message.php:344 mod/photos.php:1252
|
#: mod/message.php:188 mod/message.php:344 mod/photos.php:1256
|
||||||
#: src/Content/Conversation.php:389 src/Content/Conversation.php:1565
|
#: src/Content/Conversation.php:390 src/Content/Conversation.php:1569
|
||||||
#: src/Module/Item/Compose.php:202 src/Module/Post/Edit.php:136
|
#: src/Module/Item/Compose.php:205 src/Module/Post/Edit.php:141
|
||||||
#: src/Object/Post.php:608
|
#: src/Object/Post.php:614
|
||||||
msgid "Please wait"
|
msgid "Please wait"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/message.php:189 mod/message.php:343 mod/photos.php:654
|
#: mod/message.php:189 mod/message.php:343 mod/photos.php:658
|
||||||
#: mod/photos.php:774 mod/photos.php:1051 mod/photos.php:1093
|
#: mod/photos.php:778 mod/photos.php:1055 mod/photos.php:1097
|
||||||
#: mod/photos.php:1149 mod/photos.php:1229
|
#: mod/photos.php:1153 mod/photos.php:1233
|
||||||
#: src/Module/Calendar/Event/Form.php:236 src/Module/Contact/Advanced.php:118
|
#: src/Module/Calendar/Event/Form.php:236 src/Module/Contact/Advanced.php:118
|
||||||
#: src/Module/Contact/Profile.php:376
|
#: src/Module/Contact/Profile.php:376
|
||||||
#: src/Module/Debug/ActivityPubConversion.php:128
|
#: src/Module/Debug/ActivityPubConversion.php:128
|
||||||
|
|
@ -299,15 +299,15 @@ msgstr ""
|
||||||
#: src/Module/Debug/Probe.php:40 src/Module/Debug/WebFinger.php:37
|
#: src/Module/Debug/Probe.php:40 src/Module/Debug/WebFinger.php:37
|
||||||
#: src/Module/FriendSuggest.php:132 src/Module/Install.php:219
|
#: src/Module/FriendSuggest.php:132 src/Module/Install.php:219
|
||||||
#: src/Module/Install.php:259 src/Module/Install.php:296
|
#: src/Module/Install.php:259 src/Module/Install.php:296
|
||||||
#: src/Module/Invite.php:162 src/Module/Item/Compose.php:185
|
#: src/Module/Invite.php:162 src/Module/Item/Compose.php:188
|
||||||
#: src/Module/Moderation/Item/Source.php:74
|
#: src/Module/Moderation/Item/Source.php:74
|
||||||
#: src/Module/Moderation/Report/Create.php:154
|
#: src/Module/Moderation/Report/Create.php:154
|
||||||
#: src/Module/Moderation/Report/Create.php:169
|
#: src/Module/Moderation/Report/Create.php:169
|
||||||
#: src/Module/Moderation/Report/Create.php:197
|
#: src/Module/Moderation/Report/Create.php:197
|
||||||
#: src/Module/Moderation/Report/Create.php:249
|
#: src/Module/Moderation/Report/Create.php:249
|
||||||
#: src/Module/Profile/Profile.php:265 src/Module/Settings/Profile/Index.php:248
|
#: src/Module/Profile/Profile.php:265 src/Module/Settings/Profile/Index.php:248
|
||||||
#: src/Module/Settings/Server/Action.php:65 src/Module/User/Delegation.php:177
|
#: src/Module/Settings/Server/Action.php:65 src/Module/User/Delegation.php:181
|
||||||
#: src/Object/Post.php:1149 view/theme/duepuntozero/config.php:73
|
#: src/Object/Post.php:1158 view/theme/duepuntozero/config.php:73
|
||||||
#: view/theme/frio/config.php:155 view/theme/quattro/config.php:75
|
#: view/theme/frio/config.php:155 view/theme/quattro/config.php:75
|
||||||
#: view/theme/vier/config.php:123
|
#: view/theme/vier/config.php:123
|
||||||
msgid "Submit"
|
msgid "Submit"
|
||||||
|
|
@ -371,9 +371,9 @@ msgstr ""
|
||||||
msgid "Personal notes are visible only by yourself."
|
msgid "Personal notes are visible only by yourself."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/notes.php:46 src/Content/Text/HTML.php:847
|
#: mod/notes.php:46 src/Content/Text/HTML.php:855
|
||||||
#: src/Module/Admin/Storage.php:128 src/Module/Filer/SaveTag.php:60
|
#: src/Module/Admin/Storage.php:128 src/Module/Filer/SaveTag.php:60
|
||||||
#: src/Module/Post/Edit.php:120 src/Module/Settings/Channels.php:215
|
#: src/Module/Post/Edit.php:125 src/Module/Settings/Channels.php:215
|
||||||
msgid "Save"
|
msgid "Save"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -399,7 +399,7 @@ msgstr ""
|
||||||
msgid "Recent Photos"
|
msgid "Recent Photos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:90 mod/photos.php:822 src/Module/Profile/Photos.php:375
|
#: mod/photos.php:90 mod/photos.php:826 src/Module/Profile/Photos.php:375
|
||||||
#: src/Module/Profile/Photos.php:395
|
#: src/Module/Profile/Photos.php:395
|
||||||
msgid "Upload New Photos"
|
msgid "Upload New Photos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
@ -448,176 +448,176 @@ msgstr ""
|
||||||
msgid "No photos selected"
|
msgid "No photos selected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:670
|
#: mod/photos.php:674
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "The maximum accepted image size is %s"
|
msgid "The maximum accepted image size is %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:677
|
#: mod/photos.php:681
|
||||||
msgid "Upload Photos"
|
msgid "Upload Photos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:681 mod/photos.php:770
|
#: mod/photos.php:685 mod/photos.php:774
|
||||||
msgid "New album name: "
|
msgid "New album name: "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:682
|
#: mod/photos.php:686
|
||||||
msgid "or select existing album:"
|
msgid "or select existing album:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:683
|
#: mod/photos.php:687
|
||||||
msgid "Do not show a status post for this upload"
|
msgid "Do not show a status post for this upload"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:686 mod/photos.php:1047 src/Content/Conversation.php:391
|
#: mod/photos.php:690 mod/photos.php:1051 src/Content/Conversation.php:392
|
||||||
#: src/Module/Calendar/Event/Form.php:239 src/Module/Post/Edit.php:174
|
#: src/Module/Calendar/Event/Form.php:239 src/Module/Post/Edit.php:179
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:751
|
#: mod/photos.php:755
|
||||||
msgid "Do you really want to delete this photo album and all its photos?"
|
msgid "Do you really want to delete this photo album and all its photos?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:752 mod/photos.php:775
|
#: mod/photos.php:756 mod/photos.php:779
|
||||||
msgid "Delete Album"
|
msgid "Delete Album"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:753 mod/photos.php:853 src/Content/Conversation.php:406
|
#: mod/photos.php:757 mod/photos.php:857 src/Content/Conversation.php:407
|
||||||
#: src/Module/Contact/Follow.php:158 src/Module/Contact/Revoke.php:92
|
#: src/Module/Contact/Follow.php:158 src/Module/Contact/Revoke.php:92
|
||||||
#: src/Module/Contact/Unfollow.php:112
|
#: src/Module/Contact/Unfollow.php:112
|
||||||
#: src/Module/Media/Attachment/Browser.php:64
|
#: src/Module/Media/Attachment/Browser.php:64
|
||||||
#: src/Module/Media/Photo/Browser.php:76 src/Module/Post/Edit.php:158
|
#: src/Module/Media/Photo/Browser.php:76 src/Module/Post/Edit.php:163
|
||||||
#: src/Module/Post/Tag/Remove.php:96 src/Module/Profile/RemoteFollow.php:120
|
#: src/Module/Post/Tag/Remove.php:96 src/Module/Profile/RemoteFollow.php:120
|
||||||
#: src/Module/Security/TwoFactor/SignOut.php:111
|
#: src/Module/Security/TwoFactor/SignOut.php:111
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:779
|
#: mod/photos.php:783
|
||||||
msgid "Edit Album"
|
msgid "Edit Album"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:780
|
#: mod/photos.php:784
|
||||||
msgid "Drop Album"
|
msgid "Drop Album"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:784
|
#: mod/photos.php:788
|
||||||
msgid "Show Newest First"
|
msgid "Show Newest First"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:786
|
#: mod/photos.php:790
|
||||||
msgid "Show Oldest First"
|
msgid "Show Oldest First"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:807 src/Module/Profile/Photos.php:343
|
#: mod/photos.php:811 src/Module/Profile/Photos.php:343
|
||||||
msgid "View Photo"
|
msgid "View Photo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:839
|
#: mod/photos.php:843
|
||||||
msgid "Permission denied. Access to this item may be restricted."
|
msgid "Permission denied. Access to this item may be restricted."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:841
|
#: mod/photos.php:845
|
||||||
msgid "Photo not available"
|
msgid "Photo not available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:851
|
#: mod/photos.php:855
|
||||||
msgid "Do you really want to delete this photo?"
|
msgid "Do you really want to delete this photo?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:852 mod/photos.php:1052
|
#: mod/photos.php:856 mod/photos.php:1056
|
||||||
msgid "Delete Photo"
|
msgid "Delete Photo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:950
|
#: mod/photos.php:954
|
||||||
msgid "View photo"
|
msgid "View photo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:952
|
#: mod/photos.php:956
|
||||||
msgid "Edit photo"
|
msgid "Edit photo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:953
|
#: mod/photos.php:957
|
||||||
msgid "Delete photo"
|
msgid "Delete photo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:954
|
#: mod/photos.php:958
|
||||||
msgid "Use as profile photo"
|
msgid "Use as profile photo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:961
|
#: mod/photos.php:965
|
||||||
msgid "Private Photo"
|
msgid "Private Photo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:967
|
#: mod/photos.php:971
|
||||||
msgid "View Full Size"
|
msgid "View Full Size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:1020
|
#: mod/photos.php:1024
|
||||||
msgid "Tags: "
|
msgid "Tags: "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:1023
|
#: mod/photos.php:1027
|
||||||
msgid "[Select tags to remove]"
|
msgid "[Select tags to remove]"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:1038
|
#: mod/photos.php:1042
|
||||||
msgid "New album name"
|
msgid "New album name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:1039
|
#: mod/photos.php:1043
|
||||||
msgid "Caption"
|
msgid "Caption"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:1040
|
#: mod/photos.php:1044
|
||||||
msgid "Add a Tag"
|
msgid "Add a Tag"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:1040
|
#: mod/photos.php:1044
|
||||||
msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
|
msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:1041
|
#: mod/photos.php:1045
|
||||||
msgid "Do not rotate"
|
msgid "Do not rotate"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:1042
|
#: mod/photos.php:1046
|
||||||
msgid "Rotate CW (right)"
|
msgid "Rotate CW (right)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:1043
|
#: mod/photos.php:1047
|
||||||
msgid "Rotate CCW (left)"
|
msgid "Rotate CCW (left)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:1090 mod/photos.php:1146 mod/photos.php:1226
|
#: mod/photos.php:1094 mod/photos.php:1150 mod/photos.php:1230
|
||||||
#: src/Module/Contact.php:599 src/Module/Item/Compose.php:184
|
#: src/Module/Contact.php:599 src/Module/Item/Compose.php:187
|
||||||
#: src/Object/Post.php:1146
|
#: src/Object/Post.php:1155
|
||||||
msgid "This is you"
|
msgid "This is you"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:1092 mod/photos.php:1148 mod/photos.php:1228
|
#: mod/photos.php:1096 mod/photos.php:1152 mod/photos.php:1232
|
||||||
#: src/Module/Moderation/Reports.php:105 src/Object/Post.php:602
|
#: src/Module/Moderation/Reports.php:105 src/Object/Post.php:608
|
||||||
#: src/Object/Post.php:1148
|
#: src/Object/Post.php:1157
|
||||||
msgid "Comment"
|
msgid "Comment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:1094 mod/photos.php:1150 mod/photos.php:1230
|
#: mod/photos.php:1098 mod/photos.php:1154 mod/photos.php:1234
|
||||||
#: src/Content/Conversation.php:403 src/Module/Calendar/Event/Form.php:234
|
#: src/Content/Conversation.php:404 src/Module/Calendar/Event/Form.php:234
|
||||||
#: src/Module/Item/Compose.php:197 src/Module/Post/Edit.php:156
|
#: src/Module/Item/Compose.php:200 src/Module/Post/Edit.php:161
|
||||||
#: src/Object/Post.php:1162
|
#: src/Object/Post.php:1171
|
||||||
msgid "Preview"
|
msgid "Preview"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:1095 src/Content/Conversation.php:357
|
#: mod/photos.php:1099 src/Content/Conversation.php:358
|
||||||
#: src/Module/Post/Edit.php:121 src/Object/Post.php:1150
|
#: src/Module/Post/Edit.php:126 src/Object/Post.php:1159
|
||||||
msgid "Loading..."
|
msgid "Loading..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:1187 src/Content/Conversation.php:1487
|
#: mod/photos.php:1191 src/Content/Conversation.php:1491
|
||||||
#: src/Object/Post.php:260
|
#: src/Object/Post.php:260
|
||||||
msgid "Select"
|
msgid "Select"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:1188 src/Content/Conversation.php:1488
|
#: mod/photos.php:1192 src/Content/Conversation.php:1492
|
||||||
#: src/Module/Moderation/Users/Active.php:92
|
#: src/Module/Moderation/Users/Active.php:92
|
||||||
#: src/Module/Moderation/Users/Blocked.php:92
|
#: src/Module/Moderation/Users/Blocked.php:92
|
||||||
#: src/Module/Moderation/Users/Index.php:100
|
#: src/Module/Moderation/Users/Index.php:100
|
||||||
|
|
@ -626,23 +626,23 @@ msgstr ""
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:1249 src/Object/Post.php:426
|
#: mod/photos.php:1253 src/Object/Post.php:432
|
||||||
msgid "Like"
|
msgid "Like"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:1250 src/Object/Post.php:426
|
#: mod/photos.php:1254 src/Object/Post.php:432
|
||||||
msgid "I like this (toggle)"
|
msgid "I like this (toggle)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:1251 src/Object/Post.php:427
|
#: mod/photos.php:1255 src/Object/Post.php:433
|
||||||
msgid "Dislike"
|
msgid "Dislike"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:1253 src/Object/Post.php:427
|
#: mod/photos.php:1257 src/Object/Post.php:433
|
||||||
msgid "I don't like this (toggle)"
|
msgid "I don't like this (toggle)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/photos.php:1275
|
#: mod/photos.php:1279
|
||||||
msgid "Map"
|
msgid "Map"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -752,17 +752,17 @@ msgstr ""
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/App/Router.php:287
|
#: src/App/Router.php:294
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Method not allowed for this module. Allowed method(s): %s"
|
msgid "Method not allowed for this module. Allowed method(s): %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/App/Router.php:289 src/Module/HTTPException/PageNotFound.php:35
|
#: src/App/Router.php:296 src/Module/HTTPException/PageNotFound.php:35
|
||||||
#: src/Module/Stats.php:56
|
#: src/Module/Stats.php:56
|
||||||
msgid "Page not found."
|
msgid "Page not found."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/App/Router.php:301
|
#: src/App/Router.php:308
|
||||||
msgid "You must be logged in to use addons. "
|
msgid "You must be logged in to use addons. "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -779,7 +779,7 @@ msgid "All contacts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/BaseModule.php:440 src/Content/Conversation/Factory/Channel.php:32
|
#: src/BaseModule.php:440 src/Content/Conversation/Factory/Channel.php:32
|
||||||
#: src/Content/Widget.php:257 src/Core/ACL.php:182 src/Module/Contact.php:394
|
#: src/Content/Widget.php:257 src/Core/ACL.php:185 src/Module/Contact.php:394
|
||||||
#: src/Module/Privacy/PermissionTooltip.php:150
|
#: src/Module/Privacy/PermissionTooltip.php:150
|
||||||
#: src/Module/Privacy/PermissionTooltip.php:172
|
#: src/Module/Privacy/PermissionTooltip.php:172
|
||||||
#: src/Module/Settings/Channels.php:146
|
#: src/Module/Settings/Channels.php:146
|
||||||
|
|
@ -1049,19 +1049,19 @@ msgstr ""
|
||||||
msgid "Monthly"
|
msgid "Monthly"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/ContactSelector.php:117
|
#: src/Content/ContactSelector.php:119
|
||||||
msgid "DFRN"
|
msgid "DFRN"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/ContactSelector.php:118
|
#: src/Content/ContactSelector.php:120
|
||||||
msgid "OStatus"
|
msgid "OStatus"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/ContactSelector.php:119
|
#: src/Content/ContactSelector.php:121
|
||||||
msgid "RSS/Atom"
|
msgid "RSS/Atom"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/ContactSelector.php:120
|
#: src/Content/ContactSelector.php:122
|
||||||
#: src/Module/Moderation/Users/Active.php:82
|
#: src/Module/Moderation/Users/Active.php:82
|
||||||
#: src/Module/Moderation/Users/Blocked.php:82
|
#: src/Module/Moderation/Users/Blocked.php:82
|
||||||
#: src/Module/Moderation/Users/Create.php:58
|
#: src/Module/Moderation/Users/Create.php:58
|
||||||
|
|
@ -1072,67 +1072,67 @@ msgstr ""
|
||||||
msgid "Email"
|
msgid "Email"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/ContactSelector.php:121 src/Module/Debug/Babel.php:273
|
#: src/Content/ContactSelector.php:123 src/Module/Debug/Babel.php:273
|
||||||
msgid "Diaspora"
|
msgid "Diaspora"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/ContactSelector.php:122
|
#: src/Content/ContactSelector.php:124
|
||||||
msgid "Zot!"
|
msgid "Zot!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/ContactSelector.php:123
|
#: src/Content/ContactSelector.php:125
|
||||||
msgid "LinkedIn"
|
msgid "LinkedIn"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/ContactSelector.php:124
|
#: src/Content/ContactSelector.php:126
|
||||||
msgid "XMPP/IM"
|
msgid "XMPP/IM"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/ContactSelector.php:125
|
#: src/Content/ContactSelector.php:127
|
||||||
msgid "MySpace"
|
msgid "MySpace"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/ContactSelector.php:126
|
#: src/Content/ContactSelector.php:128
|
||||||
msgid "Google+"
|
msgid "Google+"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/ContactSelector.php:127
|
#: src/Content/ContactSelector.php:129
|
||||||
msgid "pump.io"
|
msgid "pump.io"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/ContactSelector.php:128
|
#: src/Content/ContactSelector.php:130
|
||||||
msgid "Twitter"
|
msgid "Twitter"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/ContactSelector.php:129
|
#: src/Content/ContactSelector.php:131
|
||||||
msgid "Discourse"
|
msgid "Discourse"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/ContactSelector.php:130
|
#: src/Content/ContactSelector.php:132
|
||||||
msgid "Diaspora Connector"
|
msgid "Diaspora Connector"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/ContactSelector.php:131
|
#: src/Content/ContactSelector.php:133
|
||||||
msgid "GNU Social Connector"
|
msgid "GNU Social Connector"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/ContactSelector.php:132
|
#: src/Content/ContactSelector.php:134
|
||||||
msgid "ActivityPub"
|
msgid "ActivityPub"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/ContactSelector.php:133
|
#: src/Content/ContactSelector.php:135
|
||||||
msgid "pnut"
|
msgid "pnut"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/ContactSelector.php:134
|
#: src/Content/ContactSelector.php:136
|
||||||
msgid "Tumblr"
|
msgid "Tumblr"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/ContactSelector.php:135
|
#: src/Content/ContactSelector.php:137
|
||||||
msgid "Bluesky"
|
msgid "Bluesky"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/ContactSelector.php:161
|
#: src/Content/ContactSelector.php:165
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%s (via %s)"
|
msgid "%s (via %s)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
@ -1234,8 +1234,8 @@ msgstr[1] ""
|
||||||
msgid "Visible to <strong>everybody</strong>"
|
msgid "Visible to <strong>everybody</strong>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:327 src/Module/Item/Compose.php:196
|
#: src/Content/Conversation.php:327 src/Module/Item/Compose.php:199
|
||||||
#: src/Object/Post.php:1161
|
#: src/Object/Post.php:1170
|
||||||
msgid "Please enter a image/video/audio/webpage URL:"
|
msgid "Please enter a image/video/audio/webpage URL:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -1255,143 +1255,143 @@ msgstr ""
|
||||||
msgid "Delete item(s)?"
|
msgid "Delete item(s)?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:343 src/Module/Item/Compose.php:171
|
#: src/Content/Conversation.php:344 src/Module/Item/Compose.php:174
|
||||||
msgid "Created at"
|
msgid "Created at"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:353
|
#: src/Content/Conversation.php:354
|
||||||
msgid "New Post"
|
msgid "New Post"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:356
|
#: src/Content/Conversation.php:357
|
||||||
msgid "Share"
|
msgid "Share"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:359 src/Module/Post/Edit.php:123
|
#: src/Content/Conversation.php:360 src/Module/Post/Edit.php:128
|
||||||
msgid "upload photo"
|
msgid "upload photo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:360 src/Module/Post/Edit.php:124
|
#: src/Content/Conversation.php:361 src/Module/Post/Edit.php:129
|
||||||
msgid "Attach file"
|
msgid "Attach file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:361 src/Module/Post/Edit.php:125
|
#: src/Content/Conversation.php:362 src/Module/Post/Edit.php:130
|
||||||
msgid "attach file"
|
msgid "attach file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:362 src/Module/Item/Compose.php:186
|
#: src/Content/Conversation.php:363 src/Module/Item/Compose.php:189
|
||||||
#: src/Module/Post/Edit.php:162 src/Object/Post.php:1151
|
#: src/Module/Post/Edit.php:167 src/Object/Post.php:1160
|
||||||
msgid "Bold"
|
msgid "Bold"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:363 src/Module/Item/Compose.php:187
|
#: src/Content/Conversation.php:364 src/Module/Item/Compose.php:190
|
||||||
#: src/Module/Post/Edit.php:163 src/Object/Post.php:1152
|
#: src/Module/Post/Edit.php:168 src/Object/Post.php:1161
|
||||||
msgid "Italic"
|
msgid "Italic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:364 src/Module/Item/Compose.php:188
|
#: src/Content/Conversation.php:365 src/Module/Item/Compose.php:191
|
||||||
#: src/Module/Post/Edit.php:164 src/Object/Post.php:1153
|
#: src/Module/Post/Edit.php:169 src/Object/Post.php:1162
|
||||||
msgid "Underline"
|
msgid "Underline"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:365 src/Module/Item/Compose.php:189
|
#: src/Content/Conversation.php:366 src/Module/Item/Compose.php:192
|
||||||
#: src/Module/Post/Edit.php:165 src/Object/Post.php:1155
|
#: src/Module/Post/Edit.php:170 src/Object/Post.php:1164
|
||||||
msgid "Quote"
|
msgid "Quote"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:366 src/Module/Item/Compose.php:190
|
#: src/Content/Conversation.php:367 src/Module/Item/Compose.php:193
|
||||||
#: src/Module/Post/Edit.php:166 src/Object/Post.php:1156
|
#: src/Module/Post/Edit.php:171 src/Object/Post.php:1165
|
||||||
msgid "Add emojis"
|
msgid "Add emojis"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:367 src/Module/Item/Compose.php:191
|
#: src/Content/Conversation.php:368 src/Module/Item/Compose.php:194
|
||||||
#: src/Object/Post.php:1154
|
#: src/Object/Post.php:1163
|
||||||
msgid "Content Warning"
|
msgid "Content Warning"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:368 src/Module/Item/Compose.php:192
|
#: src/Content/Conversation.php:369 src/Module/Item/Compose.php:195
|
||||||
#: src/Module/Post/Edit.php:167 src/Object/Post.php:1157
|
#: src/Module/Post/Edit.php:172 src/Object/Post.php:1166
|
||||||
msgid "Code"
|
msgid "Code"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:369 src/Module/Item/Compose.php:193
|
#: src/Content/Conversation.php:370 src/Module/Item/Compose.php:196
|
||||||
#: src/Object/Post.php:1158
|
#: src/Object/Post.php:1167
|
||||||
msgid "Image"
|
msgid "Image"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:370 src/Module/Item/Compose.php:194
|
#: src/Content/Conversation.php:371 src/Module/Item/Compose.php:197
|
||||||
#: src/Module/Post/Edit.php:168 src/Object/Post.php:1159
|
#: src/Module/Post/Edit.php:173 src/Object/Post.php:1168
|
||||||
msgid "Link"
|
msgid "Link"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:371 src/Module/Item/Compose.php:195
|
#: src/Content/Conversation.php:372 src/Module/Item/Compose.php:198
|
||||||
#: src/Module/Post/Edit.php:169 src/Object/Post.php:1160
|
#: src/Module/Post/Edit.php:174 src/Object/Post.php:1169
|
||||||
msgid "Link or Media"
|
msgid "Link or Media"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:372
|
#: src/Content/Conversation.php:373
|
||||||
msgid "Video"
|
msgid "Video"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:373 src/Module/Item/Compose.php:198
|
#: src/Content/Conversation.php:374 src/Module/Item/Compose.php:201
|
||||||
#: src/Module/Post/Edit.php:132
|
#: src/Module/Post/Edit.php:137
|
||||||
msgid "Set your location"
|
msgid "Set your location"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:374 src/Module/Post/Edit.php:133
|
#: src/Content/Conversation.php:375 src/Module/Post/Edit.php:138
|
||||||
msgid "set location"
|
msgid "set location"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:375 src/Module/Post/Edit.php:134
|
#: src/Content/Conversation.php:376 src/Module/Post/Edit.php:139
|
||||||
msgid "Clear browser location"
|
msgid "Clear browser location"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:376 src/Module/Post/Edit.php:135
|
#: src/Content/Conversation.php:377 src/Module/Post/Edit.php:140
|
||||||
msgid "clear location"
|
msgid "clear location"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:378 src/Module/Item/Compose.php:203
|
#: src/Content/Conversation.php:379 src/Module/Item/Compose.php:206
|
||||||
#: src/Module/Post/Edit.php:148
|
#: src/Module/Post/Edit.php:153
|
||||||
msgid "Set title"
|
msgid "Set title"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:380 src/Module/Item/Compose.php:204
|
#: src/Content/Conversation.php:381 src/Module/Item/Compose.php:207
|
||||||
#: src/Module/Post/Edit.php:150
|
#: src/Module/Post/Edit.php:155
|
||||||
msgid "Categories (comma-separated list)"
|
msgid "Categories (comma-separated list)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:385 src/Module/Item/Compose.php:220
|
#: src/Content/Conversation.php:386 src/Module/Item/Compose.php:227
|
||||||
msgid "Scheduled at"
|
msgid "Scheduled at"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:390 src/Module/Post/Edit.php:137
|
#: src/Content/Conversation.php:391 src/Module/Post/Edit.php:142
|
||||||
msgid "Permission settings"
|
msgid "Permission settings"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:399 src/Module/Post/Edit.php:146
|
#: src/Content/Conversation.php:400 src/Module/Post/Edit.php:151
|
||||||
msgid "Public post"
|
msgid "Public post"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:413 src/Content/Widget/VCard.php:120
|
#: src/Content/Conversation.php:414 src/Content/Widget/VCard.php:120
|
||||||
#: src/Model/Profile.php:458 src/Module/Admin/Logs/View.php:80
|
#: src/Model/Profile.php:458 src/Module/Admin/Logs/View.php:80
|
||||||
#: src/Module/Post/Edit.php:172
|
#: src/Module/Post/Edit.php:177
|
||||||
msgid "Message"
|
msgid "Message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:414 src/Module/Post/Edit.php:173
|
#: src/Content/Conversation.php:415 src/Module/Post/Edit.php:178
|
||||||
#: src/Module/Settings/TwoFactor/Trusted.php:129
|
#: src/Module/Settings/TwoFactor/Trusted.php:129
|
||||||
msgid "Browser"
|
msgid "Browser"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:416 src/Module/Post/Edit.php:176
|
#: src/Content/Conversation.php:417 src/Module/Post/Edit.php:181
|
||||||
msgid "Open Compose page"
|
msgid "Open Compose page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:583
|
#: src/Content/Conversation.php:587
|
||||||
msgid "remove"
|
msgid "remove"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:587
|
#: src/Content/Conversation.php:591
|
||||||
msgid "Delete Selected Items"
|
msgid "Delete Selected Items"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -1481,30 +1481,30 @@ msgstr ""
|
||||||
msgid "Pushed to us"
|
msgid "Pushed to us"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:1507 src/Object/Post.php:247
|
#: src/Content/Conversation.php:1511 src/Object/Post.php:247
|
||||||
msgid "Pinned item"
|
msgid "Pinned item"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:1524 src/Object/Post.php:543
|
#: src/Content/Conversation.php:1528 src/Object/Post.php:549
|
||||||
#: src/Object/Post.php:544
|
#: src/Object/Post.php:550
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "View %s's profile @ %s"
|
msgid "View %s's profile @ %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:1538 src/Object/Post.php:531
|
#: src/Content/Conversation.php:1542 src/Object/Post.php:537
|
||||||
msgid "Categories:"
|
msgid "Categories:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:1539 src/Object/Post.php:532
|
#: src/Content/Conversation.php:1543 src/Object/Post.php:538
|
||||||
msgid "Filed under:"
|
msgid "Filed under:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:1547 src/Object/Post.php:559
|
#: src/Content/Conversation.php:1551 src/Object/Post.php:565
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%s from %s"
|
msgid "%s from %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:1563
|
#: src/Content/Conversation.php:1567
|
||||||
msgid "View in context"
|
msgid "View in context"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -1637,7 +1637,7 @@ msgstr ""
|
||||||
msgid "Posts that mention or involve you"
|
msgid "Posts that mention or involve you"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation/Factory/Network.php:28 src/Object/Post.php:397
|
#: src/Content/Conversation/Factory/Network.php:28 src/Object/Post.php:403
|
||||||
msgid "Starred"
|
msgid "Starred"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -1712,7 +1712,7 @@ msgid "Display posts that have been created by accounts of the selected circle."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Feature.php:127 src/Content/GroupManager.php:128
|
#: src/Content/Feature.php:127 src/Content/GroupManager.php:128
|
||||||
#: src/Content/Nav.php:274 src/Content/Text/HTML.php:868
|
#: src/Content/Nav.php:274 src/Content/Text/HTML.php:876
|
||||||
#: src/Content/Widget.php:558 src/Model/User.php:1393
|
#: src/Content/Widget.php:558 src/Model/User.php:1393
|
||||||
msgid "Groups"
|
msgid "Groups"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
@ -1837,57 +1837,57 @@ msgstr ""
|
||||||
msgid "Create new group"
|
msgid "Create new group"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Item.php:321 src/Model/Item.php:2980
|
#: src/Content/Item.php:324 src/Model/Item.php:2984
|
||||||
msgid "event"
|
msgid "event"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Item.php:324 src/Content/Item.php:334
|
#: src/Content/Item.php:327 src/Content/Item.php:337
|
||||||
msgid "status"
|
msgid "status"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Item.php:330 src/Model/Item.php:2982
|
#: src/Content/Item.php:333 src/Model/Item.php:2986
|
||||||
#: src/Module/Post/Tag/Add.php:109
|
#: src/Module/Post/Tag/Add.php:112
|
||||||
msgid "photo"
|
msgid "photo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Item.php:344 src/Module/Post/Tag/Add.php:127
|
#: src/Content/Item.php:347 src/Module/Post/Tag/Add.php:130
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%1$s tagged %2$s's %3$s with %4$s"
|
msgid "%1$s tagged %2$s's %3$s with %4$s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Item.php:418 view/theme/frio/theme.php:251
|
#: src/Content/Item.php:421 view/theme/frio/theme.php:251
|
||||||
msgid "Follow Thread"
|
msgid "Follow Thread"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Item.php:419 src/Model/Contact.php:1253
|
#: src/Content/Item.php:422 src/Model/Contact.php:1293
|
||||||
msgid "View Status"
|
msgid "View Status"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Item.php:420 src/Content/Item.php:443 src/Model/Contact.php:1188
|
#: src/Content/Item.php:423 src/Content/Item.php:446 src/Model/Contact.php:1228
|
||||||
#: src/Model/Contact.php:1244 src/Model/Contact.php:1254
|
#: src/Model/Contact.php:1284 src/Model/Contact.php:1294
|
||||||
#: src/Module/Directory.php:143 src/Module/Settings/Profile/Index.php:250
|
#: src/Module/Directory.php:143 src/Module/Settings/Profile/Index.php:250
|
||||||
msgid "View Profile"
|
msgid "View Profile"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Item.php:421 src/Model/Contact.php:1255
|
#: src/Content/Item.php:424 src/Model/Contact.php:1295
|
||||||
msgid "View Photos"
|
msgid "View Photos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Item.php:422 src/Model/Contact.php:1222
|
#: src/Content/Item.php:425 src/Model/Contact.php:1262
|
||||||
#: src/Model/Profile.php:443
|
#: src/Model/Profile.php:443
|
||||||
msgid "Network Posts"
|
msgid "Network Posts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Item.php:423 src/Model/Contact.php:1246
|
#: src/Content/Item.php:426 src/Model/Contact.php:1286
|
||||||
#: src/Model/Contact.php:1257
|
#: src/Model/Contact.php:1297
|
||||||
msgid "View Contact"
|
msgid "View Contact"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Item.php:424 src/Model/Contact.php:1258
|
#: src/Content/Item.php:427 src/Model/Contact.php:1298
|
||||||
msgid "Send PM"
|
msgid "Send PM"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Item.php:425 src/Module/Contact.php:448
|
#: src/Content/Item.php:428 src/Module/Contact.php:448
|
||||||
#: src/Module/Contact/Profile.php:524
|
#: src/Module/Contact/Profile.php:524
|
||||||
#: src/Module/Moderation/Blocklist/Contact.php:104
|
#: src/Module/Moderation/Blocklist/Contact.php:104
|
||||||
#: src/Module/Moderation/Users/Active.php:93
|
#: src/Module/Moderation/Users/Active.php:93
|
||||||
|
|
@ -1895,7 +1895,7 @@ msgstr ""
|
||||||
msgid "Block"
|
msgid "Block"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Item.php:426 src/Module/Contact.php:449
|
#: src/Content/Item.php:429 src/Module/Contact.php:449
|
||||||
#: src/Module/Contact/Profile.php:532
|
#: src/Module/Contact/Profile.php:532
|
||||||
#: src/Module/Notifications/Introductions.php:126
|
#: src/Module/Notifications/Introductions.php:126
|
||||||
#: src/Module/Notifications/Introductions.php:199
|
#: src/Module/Notifications/Introductions.php:199
|
||||||
|
|
@ -1903,32 +1903,32 @@ msgstr ""
|
||||||
msgid "Ignore"
|
msgid "Ignore"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Item.php:427 src/Module/Contact.php:450
|
#: src/Content/Item.php:430 src/Module/Contact.php:450
|
||||||
#: src/Module/Contact/Profile.php:540
|
#: src/Module/Contact/Profile.php:540
|
||||||
msgid "Collapse"
|
msgid "Collapse"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Item.php:428 src/Object/Post.php:288
|
#: src/Content/Item.php:431 src/Object/Post.php:288
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Ignore %s server"
|
msgid "Ignore %s server"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Item.php:432 src/Module/Settings/Channels.php:188
|
#: src/Content/Item.php:435 src/Module/Settings/Channels.php:188
|
||||||
#: src/Module/Settings/Channels.php:209 src/Object/Post.php:503
|
#: src/Module/Settings/Channels.php:209 src/Object/Post.php:509
|
||||||
msgid "Languages"
|
msgid "Languages"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Item.php:435 src/Object/Post.php:586
|
#: src/Content/Item.php:438 src/Object/Post.php:592
|
||||||
msgid "Search Text"
|
msgid "Search Text"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Item.php:440 src/Content/Widget.php:65
|
#: src/Content/Item.php:443 src/Content/Widget.php:65
|
||||||
#: src/Model/Contact.php:1247 src/Model/Contact.php:1259
|
#: src/Model/Contact.php:1287 src/Model/Contact.php:1299
|
||||||
#: src/Module/Contact/Follow.php:152 view/theme/vier/theme.php:183
|
#: src/Module/Contact/Follow.php:152 view/theme/vier/theme.php:183
|
||||||
msgid "Connect/Follow"
|
msgid "Connect/Follow"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Item.php:869
|
#: src/Content/Item.php:874
|
||||||
msgid "Unable to fetch user."
|
msgid "Unable to fetch user."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -1948,7 +1948,7 @@ msgstr ""
|
||||||
msgid "Clear notifications"
|
msgid "Clear notifications"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Nav.php:119 src/Content/Text/HTML.php:855
|
#: src/Content/Nav.php:119 src/Content/Text/HTML.php:863
|
||||||
msgid "@name, !group, #tags, content"
|
msgid "@name, !group, #tags, content"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -2061,7 +2061,7 @@ msgstr ""
|
||||||
msgid "Addon applications, utilities, games"
|
msgid "Addon applications, utilities, games"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Nav.php:265 src/Content/Text/HTML.php:853
|
#: src/Content/Nav.php:265 src/Content/Text/HTML.php:861
|
||||||
#: src/Module/Admin/Logs/View.php:74 src/Module/Search/Index.php:99
|
#: src/Module/Admin/Logs/View.php:74 src/Module/Search/Index.php:99
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
@ -2070,17 +2070,17 @@ msgstr ""
|
||||||
msgid "Search site content"
|
msgid "Search site content"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Nav.php:268 src/Content/Text/HTML.php:862
|
#: src/Content/Nav.php:268 src/Content/Text/HTML.php:870
|
||||||
msgid "Full Text"
|
msgid "Full Text"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Nav.php:269 src/Content/Text/HTML.php:863
|
#: src/Content/Nav.php:269 src/Content/Text/HTML.php:871
|
||||||
#: src/Content/Widget/TagCloud.php:54
|
#: src/Content/Widget/TagCloud.php:54
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Nav.php:270 src/Content/Nav.php:325
|
#: src/Content/Nav.php:270 src/Content/Nav.php:325
|
||||||
#: src/Content/Text/HTML.php:864 src/Module/BaseProfile.php:112
|
#: src/Content/Text/HTML.php:872 src/Module/BaseProfile.php:112
|
||||||
#: src/Module/BaseProfile.php:115 src/Module/Contact.php:406
|
#: src/Module/BaseProfile.php:115 src/Module/Contact.php:406
|
||||||
#: src/Module/Contact.php:516 view/theme/frio/theme.php:232
|
#: src/Module/Contact.php:516 view/theme/frio/theme.php:232
|
||||||
msgid "Contacts"
|
msgid "Contacts"
|
||||||
|
|
@ -2247,40 +2247,40 @@ msgstr ""
|
||||||
msgid "<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a> %3$s"
|
msgid "<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a> %3$s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Text/BBCode.php:926 src/Model/Item.php:3787
|
#: src/Content/Text/BBCode.php:926 src/Model/Item.php:3791
|
||||||
#: src/Model/Item.php:3793 src/Model/Item.php:3794
|
#: src/Model/Item.php:3797 src/Model/Item.php:3798
|
||||||
msgid "Link to source"
|
msgid "Link to source"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Text/BBCode.php:1740 src/Content/Text/HTML.php:892
|
#: src/Content/Text/BBCode.php:1748 src/Content/Text/HTML.php:900
|
||||||
msgid "Click to open/close"
|
msgid "Click to open/close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Text/BBCode.php:1795
|
#: src/Content/Text/BBCode.php:1803
|
||||||
msgid "$1 wrote:"
|
msgid "$1 wrote:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Text/BBCode.php:1869 src/Content/Text/BBCode.php:1870
|
#: src/Content/Text/BBCode.php:1877 src/Content/Text/BBCode.php:1878
|
||||||
msgid "Encrypted content"
|
msgid "Encrypted content"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Text/BBCode.php:2203
|
#: src/Content/Text/BBCode.php:2211
|
||||||
msgid "Invalid source protocol"
|
msgid "Invalid source protocol"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Text/BBCode.php:2222
|
#: src/Content/Text/BBCode.php:2230
|
||||||
msgid "Invalid link protocol"
|
msgid "Invalid link protocol"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Text/HTML.php:770
|
#: src/Content/Text/HTML.php:778
|
||||||
msgid "Loading more entries..."
|
msgid "Loading more entries..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Text/HTML.php:771
|
#: src/Content/Text/HTML.php:779
|
||||||
msgid "The end"
|
msgid "The end"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Text/HTML.php:847 src/Content/Widget/VCard.php:116
|
#: src/Content/Text/HTML.php:855 src/Content/Widget/VCard.php:116
|
||||||
#: src/Model/Profile.php:452 src/Module/Contact/Profile.php:484
|
#: src/Model/Profile.php:452 src/Module/Contact/Profile.php:484
|
||||||
msgid "Follow"
|
msgid "Follow"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
@ -2399,7 +2399,7 @@ msgstr ""
|
||||||
msgid "Organisations"
|
msgid "Organisations"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Widget.php:557 src/Model/Contact.php:1757
|
#: src/Content/Widget.php:557 src/Model/Contact.php:1797
|
||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -2423,18 +2423,18 @@ msgstr ""
|
||||||
msgid "Export calendar as csv"
|
msgid "Export calendar as csv"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Widget/ContactBlock.php:64
|
#: src/Content/Widget/ContactBlock.php:63
|
||||||
msgid "No contacts"
|
msgid "No contacts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Widget/ContactBlock.php:95
|
#: src/Content/Widget/ContactBlock.php:94
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%d Contact"
|
msgid "%d Contact"
|
||||||
msgid_plural "%d Contacts"
|
msgid_plural "%d Contacts"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: src/Content/Widget/ContactBlock.php:112
|
#: src/Content/Widget/ContactBlock.php:111
|
||||||
msgid "View Contacts"
|
msgid "View Contacts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -2453,12 +2453,20 @@ msgstr[1] ""
|
||||||
msgid "More Trending Tags"
|
msgid "More Trending Tags"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Widget/VCard.php:94 src/Model/Contact.php:1216
|
#: src/Content/Widget/TrendingTags.php:41
|
||||||
|
msgid "Show More"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Content/Widget/TrendingTags.php:42
|
||||||
|
msgid "Show Less"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Content/Widget/VCard.php:94 src/Model/Contact.php:1256
|
||||||
#: src/Model/Profile.php:437
|
#: src/Model/Profile.php:437
|
||||||
msgid "Post to group"
|
msgid "Post to group"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Widget/VCard.php:99 src/Model/Contact.php:1220
|
#: src/Content/Widget/VCard.php:99 src/Model/Contact.php:1260
|
||||||
#: src/Model/Profile.php:441 src/Module/Moderation/Item/Source.php:80
|
#: src/Model/Profile.php:441 src/Module/Moderation/Item/Source.php:80
|
||||||
msgid "Mention"
|
msgid "Mention"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
@ -2486,68 +2494,68 @@ msgstr ""
|
||||||
msgid "Network:"
|
msgid "Network:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Widget/VCard.php:118 src/Model/Contact.php:1248
|
#: src/Content/Widget/VCard.php:118 src/Model/Contact.php:1288
|
||||||
#: src/Model/Contact.php:1260 src/Model/Profile.php:454
|
#: src/Model/Contact.php:1300 src/Model/Profile.php:454
|
||||||
#: src/Module/Contact/Profile.php:476
|
#: src/Module/Contact/Profile.php:476
|
||||||
msgid "Unfollow"
|
msgid "Unfollow"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Widget/VCard.php:124 src/Model/Contact.php:1218
|
#: src/Content/Widget/VCard.php:124 src/Model/Contact.php:1258
|
||||||
#: src/Model/Profile.php:439
|
#: src/Model/Profile.php:439
|
||||||
msgid "View group"
|
msgid "View group"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/ACL.php:153 src/Module/Profile/Profile.php:260
|
#: src/Core/ACL.php:154 src/Module/Profile/Profile.php:260
|
||||||
msgid "Yourself"
|
msgid "Yourself"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/ACL.php:189 src/Module/Privacy/PermissionTooltip.php:156
|
#: src/Core/ACL.php:192 src/Module/Privacy/PermissionTooltip.php:156
|
||||||
#: src/Module/Privacy/PermissionTooltip.php:178
|
#: src/Module/Privacy/PermissionTooltip.php:178
|
||||||
msgid "Mutuals"
|
msgid "Mutuals"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/ACL.php:281
|
#: src/Core/ACL.php:284
|
||||||
msgid "Post to Email"
|
msgid "Post to Email"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/ACL.php:308 src/Module/Privacy/PermissionTooltip.php:103
|
#: src/Core/ACL.php:316 src/Module/Privacy/PermissionTooltip.php:103
|
||||||
#: src/Module/Privacy/PermissionTooltip.php:217
|
#: src/Module/Privacy/PermissionTooltip.php:217
|
||||||
msgid "Public"
|
msgid "Public"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/ACL.php:309
|
#: src/Core/ACL.php:317
|
||||||
msgid "This content will be shown to all your followers and can be seen in the community pages and by anyone with its link."
|
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 ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/ACL.php:310 src/Module/Privacy/PermissionTooltip.php:105
|
#: src/Core/ACL.php:318 src/Module/Privacy/PermissionTooltip.php:105
|
||||||
msgid "Limited/Private"
|
msgid "Limited/Private"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/ACL.php:311
|
#: src/Core/ACL.php:319
|
||||||
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."
|
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 ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/ACL.php:311
|
#: src/Core/ACL.php:319
|
||||||
msgid "Start typing the name of a contact or a circle to show a filtered list. You can also mention the special circles \"Followers\" and \"Mutuals\"."
|
msgid "Start typing the name of a contact or a circle to show a filtered list. You can also mention the special circles \"Followers\" and \"Mutuals\"."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/ACL.php:312
|
#: src/Core/ACL.php:320
|
||||||
msgid "Show to:"
|
msgid "Show to:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/ACL.php:313
|
#: src/Core/ACL.php:321
|
||||||
msgid "Except to:"
|
msgid "Except to:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/ACL.php:314 src/Module/Post/Edit.php:145
|
#: src/Core/ACL.php:322 src/Module/Post/Edit.php:150
|
||||||
msgid "CC: email addresses"
|
msgid "CC: email addresses"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/ACL.php:315 src/Module/Post/Edit.php:151
|
#: src/Core/ACL.php:323 src/Module/Post/Edit.php:156
|
||||||
msgid "Example: bob@example.com, mary@example.com"
|
msgid "Example: bob@example.com, mary@example.com"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/ACL.php:316
|
#: src/Core/ACL.php:324
|
||||||
msgid "Connectors"
|
msgid "Connectors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -2836,167 +2844,167 @@ msgstr ""
|
||||||
msgid "Could not connect to database."
|
msgid "Could not connect to database."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:426 src/Model/Item.php:2023
|
#: src/Core/L10n.php:453 src/Model/Item.php:2030
|
||||||
msgid "Undetermined"
|
msgid "Undetermined"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:433
|
#: src/Core/L10n.php:460
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%s (%s)"
|
msgid "%s (%s)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:481 src/Model/Event.php:416
|
#: src/Core/L10n.php:509 src/Model/Event.php:416
|
||||||
#: src/Module/Settings/Display.php:282
|
#: src/Module/Settings/Display.php:282
|
||||||
msgid "Monday"
|
msgid "Monday"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:481 src/Model/Event.php:417
|
#: src/Core/L10n.php:509 src/Model/Event.php:417
|
||||||
#: src/Module/Settings/Display.php:283
|
#: src/Module/Settings/Display.php:283
|
||||||
msgid "Tuesday"
|
msgid "Tuesday"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:481 src/Model/Event.php:418
|
#: src/Core/L10n.php:509 src/Model/Event.php:418
|
||||||
#: src/Module/Settings/Display.php:284
|
#: src/Module/Settings/Display.php:284
|
||||||
msgid "Wednesday"
|
msgid "Wednesday"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:481 src/Model/Event.php:419
|
#: src/Core/L10n.php:509 src/Model/Event.php:419
|
||||||
#: src/Module/Settings/Display.php:285
|
#: src/Module/Settings/Display.php:285
|
||||||
msgid "Thursday"
|
msgid "Thursday"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:481 src/Model/Event.php:420
|
#: src/Core/L10n.php:509 src/Model/Event.php:420
|
||||||
#: src/Module/Settings/Display.php:286
|
#: src/Module/Settings/Display.php:286
|
||||||
msgid "Friday"
|
msgid "Friday"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:481 src/Model/Event.php:421
|
#: src/Core/L10n.php:509 src/Model/Event.php:421
|
||||||
#: src/Module/Settings/Display.php:287
|
#: src/Module/Settings/Display.php:287
|
||||||
msgid "Saturday"
|
msgid "Saturday"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:481 src/Model/Event.php:415
|
#: src/Core/L10n.php:509 src/Model/Event.php:415
|
||||||
#: src/Module/Settings/Display.php:281
|
#: src/Module/Settings/Display.php:281
|
||||||
msgid "Sunday"
|
msgid "Sunday"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:485 src/Model/Event.php:436
|
#: src/Core/L10n.php:515 src/Model/Event.php:436
|
||||||
msgid "January"
|
msgid "January"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:485 src/Model/Event.php:437
|
#: src/Core/L10n.php:515 src/Model/Event.php:437
|
||||||
msgid "February"
|
msgid "February"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:485 src/Model/Event.php:438
|
#: src/Core/L10n.php:515 src/Model/Event.php:438
|
||||||
msgid "March"
|
msgid "March"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:485 src/Model/Event.php:439
|
#: src/Core/L10n.php:515 src/Model/Event.php:439
|
||||||
msgid "April"
|
msgid "April"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:485 src/Core/L10n.php:504 src/Model/Event.php:427
|
#: src/Core/L10n.php:515 src/Core/L10n.php:538 src/Model/Event.php:427
|
||||||
msgid "May"
|
msgid "May"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:485 src/Model/Event.php:440
|
#: src/Core/L10n.php:515 src/Model/Event.php:440
|
||||||
msgid "June"
|
msgid "June"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:485 src/Model/Event.php:441
|
#: src/Core/L10n.php:515 src/Model/Event.php:441
|
||||||
msgid "July"
|
msgid "July"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:485 src/Model/Event.php:442
|
#: src/Core/L10n.php:515 src/Model/Event.php:442
|
||||||
msgid "August"
|
msgid "August"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:485 src/Model/Event.php:443
|
#: src/Core/L10n.php:515 src/Model/Event.php:443
|
||||||
msgid "September"
|
msgid "September"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:485 src/Model/Event.php:444
|
#: src/Core/L10n.php:515 src/Model/Event.php:444
|
||||||
msgid "October"
|
msgid "October"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:485 src/Model/Event.php:445
|
#: src/Core/L10n.php:515 src/Model/Event.php:445
|
||||||
msgid "November"
|
msgid "November"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:485 src/Model/Event.php:446
|
#: src/Core/L10n.php:515 src/Model/Event.php:446
|
||||||
msgid "December"
|
msgid "December"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:500 src/Model/Event.php:408
|
#: src/Core/L10n.php:532 src/Model/Event.php:408
|
||||||
msgid "Mon"
|
msgid "Mon"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:500 src/Model/Event.php:409
|
#: src/Core/L10n.php:532 src/Model/Event.php:409
|
||||||
msgid "Tue"
|
msgid "Tue"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:500 src/Model/Event.php:410
|
#: src/Core/L10n.php:532 src/Model/Event.php:410
|
||||||
msgid "Wed"
|
msgid "Wed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:500 src/Model/Event.php:411
|
#: src/Core/L10n.php:532 src/Model/Event.php:411
|
||||||
msgid "Thu"
|
msgid "Thu"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:500 src/Model/Event.php:412
|
#: src/Core/L10n.php:532 src/Model/Event.php:412
|
||||||
msgid "Fri"
|
msgid "Fri"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:500 src/Model/Event.php:413
|
#: src/Core/L10n.php:532 src/Model/Event.php:413
|
||||||
msgid "Sat"
|
msgid "Sat"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:500 src/Model/Event.php:407
|
#: src/Core/L10n.php:532 src/Model/Event.php:407
|
||||||
msgid "Sun"
|
msgid "Sun"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:504 src/Model/Event.php:423
|
#: src/Core/L10n.php:538 src/Model/Event.php:423
|
||||||
msgid "Jan"
|
msgid "Jan"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:504 src/Model/Event.php:424
|
#: src/Core/L10n.php:538 src/Model/Event.php:424
|
||||||
msgid "Feb"
|
msgid "Feb"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:504 src/Model/Event.php:425
|
#: src/Core/L10n.php:538 src/Model/Event.php:425
|
||||||
msgid "Mar"
|
msgid "Mar"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:504 src/Model/Event.php:426
|
#: src/Core/L10n.php:538 src/Model/Event.php:426
|
||||||
msgid "Apr"
|
msgid "Apr"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:504 src/Model/Event.php:428
|
#: src/Core/L10n.php:538 src/Model/Event.php:428
|
||||||
msgid "Jun"
|
msgid "Jun"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:504 src/Model/Event.php:429
|
#: src/Core/L10n.php:538 src/Model/Event.php:429
|
||||||
msgid "Jul"
|
msgid "Jul"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:504 src/Model/Event.php:430
|
#: src/Core/L10n.php:538 src/Model/Event.php:430
|
||||||
msgid "Aug"
|
msgid "Aug"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:504
|
#: src/Core/L10n.php:538
|
||||||
msgid "Sep"
|
msgid "Sep"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:504 src/Model/Event.php:432
|
#: src/Core/L10n.php:538 src/Model/Event.php:432
|
||||||
msgid "Oct"
|
msgid "Oct"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:504 src/Model/Event.php:433
|
#: src/Core/L10n.php:538 src/Model/Event.php:433
|
||||||
msgid "Nov"
|
msgid "Nov"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:504 src/Model/Event.php:434
|
#: src/Core/L10n.php:538 src/Model/Event.php:434
|
||||||
msgid "Dec"
|
msgid "Dec"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -3196,84 +3204,84 @@ msgstr ""
|
||||||
msgid "Edit circles"
|
msgid "Edit circles"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Contact.php:1267 src/Module/Moderation/Users/Pending.php:88
|
#: src/Model/Contact.php:1307 src/Module/Moderation/Users/Pending.php:88
|
||||||
#: src/Module/Notifications/Introductions.php:124
|
#: src/Module/Notifications/Introductions.php:124
|
||||||
#: src/Module/Notifications/Introductions.php:197
|
#: src/Module/Notifications/Introductions.php:197
|
||||||
msgid "Approve"
|
msgid "Approve"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Contact.php:1601 src/Model/Contact.php:1673
|
#: src/Model/Contact.php:1641 src/Model/Contact.php:1713
|
||||||
#: src/Module/Contact/Profile.php:360
|
#: src/Module/Contact/Profile.php:360
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%s has blocked you"
|
msgid "%s has blocked you"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Contact.php:1753
|
#: src/Model/Contact.php:1793
|
||||||
msgid "Organisation"
|
msgid "Organisation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Contact.php:1761
|
#: src/Model/Contact.php:1801
|
||||||
msgid "Group"
|
msgid "Group"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Contact.php:1765 src/Module/Moderation/BaseUsers.php:122
|
#: src/Model/Contact.php:1805 src/Module/Moderation/BaseUsers.php:122
|
||||||
msgid "Relay"
|
msgid "Relay"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Contact.php:3091
|
#: src/Model/Contact.php:3131
|
||||||
msgid "Disallowed profile URL."
|
msgid "Disallowed profile URL."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Contact.php:3096 src/Module/Friendica.php:90
|
#: src/Model/Contact.php:3136 src/Module/Friendica.php:90
|
||||||
msgid "Blocked domain"
|
msgid "Blocked domain"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Contact.php:3101
|
#: src/Model/Contact.php:3141
|
||||||
msgid "Connect URL missing."
|
msgid "Connect URL missing."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Contact.php:3110
|
#: src/Model/Contact.php:3150
|
||||||
msgid "The contact could not be added. Please check the relevant network credentials in your Settings -> Social Networks page."
|
msgid "The contact could not be added. Please check the relevant network credentials in your Settings -> Social Networks page."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Contact.php:3128
|
#: src/Model/Contact.php:3168
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Expected network %s does not match actual network %s"
|
msgid "Expected network %s does not match actual network %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Contact.php:3145
|
#: src/Model/Contact.php:3185
|
||||||
msgid "This seems to be a relay account. They can't be followed by users."
|
msgid "This seems to be a relay account. They can't be followed by users."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Contact.php:3152
|
#: src/Model/Contact.php:3192
|
||||||
msgid "The profile address specified does not provide adequate information."
|
msgid "The profile address specified does not provide adequate information."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Contact.php:3154
|
#: src/Model/Contact.php:3194
|
||||||
msgid "No compatible communication protocols or feeds were discovered."
|
msgid "No compatible communication protocols or feeds were discovered."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Contact.php:3157
|
#: src/Model/Contact.php:3197
|
||||||
msgid "An author or name was not found."
|
msgid "An author or name was not found."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Contact.php:3160
|
#: src/Model/Contact.php:3200
|
||||||
msgid "No browser URL could be matched to this address."
|
msgid "No browser URL could be matched to this address."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Contact.php:3163
|
#: src/Model/Contact.php:3203
|
||||||
msgid "Unable to match @-style Identity Address with a known protocol or email contact."
|
msgid "Unable to match @-style Identity Address with a known protocol or email contact."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Contact.php:3164
|
#: src/Model/Contact.php:3204
|
||||||
msgid "Use mailto: in front of address to force email check."
|
msgid "Use mailto: in front of address to force email check."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Contact.php:3170
|
#: src/Model/Contact.php:3210
|
||||||
msgid "Limited profile. This person will be unable to receive direct/personal notifications from you."
|
msgid "Limited profile. This person will be unable to receive direct/personal notifications from you."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Contact.php:3229
|
#: src/Model/Contact.php:3269
|
||||||
msgid "Unable to retrieve contact information."
|
msgid "Unable to retrieve contact information."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -3378,92 +3386,92 @@ msgstr ""
|
||||||
msgid "Happy Birthday %s"
|
msgid "Happy Birthday %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:2030
|
#: src/Model/Item.php:2037
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%s (%s - %s): %s"
|
msgid "%s (%s - %s): %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:2032
|
#: src/Model/Item.php:2039
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%s (%s): %s"
|
msgid "%s (%s): %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:2035
|
#: src/Model/Item.php:2042
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Detected languages in this post:\n"
|
"Detected languages in this post:\n"
|
||||||
"%s"
|
"%s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:2984
|
#: src/Model/Item.php:2988
|
||||||
msgid "activity"
|
msgid "activity"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:2986
|
#: src/Model/Item.php:2990
|
||||||
msgid "comment"
|
msgid "comment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:2989 src/Module/Post/Tag/Add.php:109
|
#: src/Model/Item.php:2993 src/Module/Post/Tag/Add.php:112
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3162
|
|
||||||
#, php-format
|
|
||||||
msgid "%s is blocked"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Model/Item.php:3164
|
|
||||||
#, php-format
|
|
||||||
msgid "%s is ignored"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Model/Item.php:3166
|
#: src/Model/Item.php:3166
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Content from %s is collapsed"
|
msgid "%s is blocked"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Model/Item.php:3168
|
||||||
|
#, php-format
|
||||||
|
msgid "%s is ignored"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3170
|
#: src/Model/Item.php:3170
|
||||||
|
#, php-format
|
||||||
|
msgid "Content from %s is collapsed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Model/Item.php:3174
|
||||||
msgid "Sensitive content"
|
msgid "Sensitive content"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3687
|
#: src/Model/Item.php:3691
|
||||||
msgid "bytes"
|
msgid "bytes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3718
|
#: src/Model/Item.php:3722
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%2$s (%3$d%%, %1$d vote)"
|
msgid "%2$s (%3$d%%, %1$d vote)"
|
||||||
msgid_plural "%2$s (%3$d%%, %1$d votes)"
|
msgid_plural "%2$s (%3$d%%, %1$d votes)"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3720
|
#: src/Model/Item.php:3724
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%2$s (%1$d vote)"
|
msgid "%2$s (%1$d vote)"
|
||||||
msgid_plural "%2$s (%1$d votes)"
|
msgid_plural "%2$s (%1$d votes)"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3725
|
#: src/Model/Item.php:3729
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%d voter. Poll end: %s"
|
msgid "%d voter. Poll end: %s"
|
||||||
msgid_plural "%d voters. Poll end: %s"
|
msgid_plural "%d voters. Poll end: %s"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3727
|
#: src/Model/Item.php:3731
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%d voter."
|
msgid "%d voter."
|
||||||
msgid_plural "%d voters."
|
msgid_plural "%d voters."
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3729
|
#: src/Model/Item.php:3733
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Poll end: %s"
|
msgid "Poll end: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3770 src/Model/Item.php:3771
|
#: src/Model/Item.php:3774 src/Model/Item.php:3775
|
||||||
msgid "View on separate page"
|
msgid "View on separate page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -5745,7 +5753,7 @@ msgstr ""
|
||||||
#: src/Module/Contact.php:537 src/Module/Conversation/Channel.php:98
|
#: src/Module/Contact.php:537 src/Module/Conversation/Channel.php:98
|
||||||
#: src/Module/Conversation/Community.php:91
|
#: src/Module/Conversation/Community.php:91
|
||||||
#: src/Module/Conversation/Network.php:295
|
#: src/Module/Conversation/Network.php:295
|
||||||
#: src/Module/Moderation/BaseUsers.php:102 src/Object/Post.php:606
|
#: src/Module/Moderation/BaseUsers.php:102 src/Object/Post.php:612
|
||||||
msgid "More"
|
msgid "More"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -6063,7 +6071,7 @@ msgid "Only show blocked contacts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Contact.php:348 src/Module/Contact.php:420
|
#: src/Module/Contact.php:348 src/Module/Contact.php:420
|
||||||
#: src/Module/Settings/Server/Index.php:93 src/Object/Post.php:385
|
#: src/Module/Settings/Server/Index.php:93 src/Object/Post.php:391
|
||||||
msgid "Ignored"
|
msgid "Ignored"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -7110,7 +7118,7 @@ msgstr ""
|
||||||
msgid "Help:"
|
msgid "Help:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Home.php:52
|
#: src/Module/Home.php:53
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Welcome to %s"
|
msgid "Welcome to %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
@ -7330,39 +7338,39 @@ msgstr ""
|
||||||
msgid "For more information about the Friendica project and why we feel it is important, please visit http://friendi.ca"
|
msgid "For more information about the Friendica project and why we feel it is important, please visit http://friendi.ca"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Item/Compose.php:83
|
#: src/Module/Item/Compose.php:86
|
||||||
msgid "Please enter a post body."
|
msgid "Please enter a post body."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Item/Compose.php:94
|
#: src/Module/Item/Compose.php:97
|
||||||
msgid "This feature is only available with the frio theme."
|
msgid "This feature is only available with the frio theme."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Item/Compose.php:118
|
#: src/Module/Item/Compose.php:121
|
||||||
msgid "Compose new personal note"
|
msgid "Compose new personal note"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Item/Compose.php:127
|
#: src/Module/Item/Compose.php:130
|
||||||
msgid "Compose new post"
|
msgid "Compose new post"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Item/Compose.php:183
|
#: src/Module/Item/Compose.php:186
|
||||||
msgid "Visibility"
|
msgid "Visibility"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Item/Compose.php:199
|
#: src/Module/Item/Compose.php:202
|
||||||
msgid "Clear the location"
|
msgid "Clear the location"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Item/Compose.php:200
|
#: src/Module/Item/Compose.php:203
|
||||||
msgid "Location services are unavailable on your device"
|
msgid "Location services are unavailable on your device"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Item/Compose.php:201
|
#: src/Module/Item/Compose.php:204
|
||||||
msgid "Location services are disabled. Please check the website's permissions on your device"
|
msgid "Location services are disabled. Please check the website's permissions on your device"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Item/Compose.php:207
|
#: src/Module/Item/Compose.php:214
|
||||||
msgid "You can make this page always open when you use the New Post button in the <a href=\"/settings/display\">Theme Customization settings</a>."
|
msgid "You can make this page always open when you use the New Post button in the <a href=\"/settings/display\">Theme Customization settings</a>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -8458,46 +8466,46 @@ msgstr ""
|
||||||
msgid "The Photo is not available."
|
msgid "The Photo is not available."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Photo.php:133
|
#: src/Module/Photo.php:134
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "The Photo with id %s is not available."
|
msgid "The Photo with id %s is not available."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Photo.php:178
|
#: src/Module/Photo.php:181
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Invalid external resource with url %s."
|
msgid "Invalid external resource with url %s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Photo.php:180
|
#: src/Module/Photo.php:183
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Invalid photo with id %s."
|
msgid "Invalid photo with id %s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Post/Edit.php:73 src/Module/Post/Edit.php:87
|
#: src/Module/Post/Edit.php:78 src/Module/Post/Edit.php:92
|
||||||
msgid "Post not found."
|
msgid "Post not found."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Post/Edit.php:93
|
#: src/Module/Post/Edit.php:98
|
||||||
msgid "Edit post"
|
msgid "Edit post"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Post/Edit.php:127
|
#: src/Module/Post/Edit.php:132
|
||||||
msgid "web link"
|
msgid "web link"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Post/Edit.php:128
|
#: src/Module/Post/Edit.php:133
|
||||||
msgid "Insert video link"
|
msgid "Insert video link"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Post/Edit.php:129
|
#: src/Module/Post/Edit.php:134
|
||||||
msgid "video link"
|
msgid "video link"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Post/Edit.php:130
|
#: src/Module/Post/Edit.php:135
|
||||||
msgid "Insert audio link"
|
msgid "Insert audio link"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Post/Edit.php:131
|
#: src/Module/Post/Edit.php:136
|
||||||
msgid "audio link"
|
msgid "audio link"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -8571,19 +8579,19 @@ msgid "No contacts."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Profile/Conversations.php:96 src/Module/Profile/Profile.php:342
|
#: src/Module/Profile/Conversations.php:96 src/Module/Profile/Profile.php:342
|
||||||
#: src/Protocol/Feed.php:1114
|
#: src/Protocol/Feed.php:1124
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%s's posts"
|
msgid "%s's posts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Profile/Conversations.php:97 src/Module/Profile/Profile.php:343
|
#: src/Module/Profile/Conversations.php:97 src/Module/Profile/Profile.php:343
|
||||||
#: src/Protocol/Feed.php:1117
|
#: src/Protocol/Feed.php:1127
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%s's comments"
|
msgid "%s's comments"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Profile/Conversations.php:98 src/Module/Profile/Profile.php:344
|
#: src/Module/Profile/Conversations.php:98 src/Module/Profile/Profile.php:344
|
||||||
#: src/Protocol/Feed.php:1110
|
#: src/Protocol/Feed.php:1120
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%s's timeline"
|
msgid "%s's timeline"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
@ -10806,24 +10814,24 @@ msgstr ""
|
||||||
msgid "The requested item doesn't exist or has been deleted."
|
msgid "The requested item doesn't exist or has been deleted."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/User/Delegation.php:134
|
#: src/Module/User/Delegation.php:138
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "You are now logged in as %s"
|
msgid "You are now logged in as %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/User/Delegation.php:173
|
#: src/Module/User/Delegation.php:177
|
||||||
msgid "Switch between your accounts"
|
msgid "Switch between your accounts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/User/Delegation.php:174
|
#: src/Module/User/Delegation.php:178
|
||||||
msgid "Manage your accounts"
|
msgid "Manage your accounts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/User/Delegation.php:175
|
#: src/Module/User/Delegation.php:179
|
||||||
msgid "Toggle between different identities or community/group pages which share your account details or which you have been granted \"manage\" permissions"
|
msgid "Toggle between different identities or community/group pages which share your account details or which you have been granted \"manage\" permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/User/Delegation.php:176
|
#: src/Module/User/Delegation.php:180
|
||||||
msgid "Select an identity to manage: "
|
msgid "Select an identity to manage: "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -11525,227 +11533,227 @@ msgstr ""
|
||||||
msgid "Save to folder"
|
msgid "Save to folder"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:333
|
#: src/Object/Post.php:339
|
||||||
msgid "I will attend"
|
msgid "I will attend"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:333
|
#: src/Object/Post.php:339
|
||||||
msgid "I will not attend"
|
msgid "I will not attend"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:333
|
#: src/Object/Post.php:339
|
||||||
msgid "I might attend"
|
msgid "I might attend"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:380
|
#: src/Object/Post.php:386
|
||||||
msgid "Ignore thread"
|
msgid "Ignore thread"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:381
|
#: src/Object/Post.php:387
|
||||||
msgid "Unignore thread"
|
msgid "Unignore thread"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:382
|
#: src/Object/Post.php:388
|
||||||
msgid "Toggle ignore status"
|
msgid "Toggle ignore status"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:392
|
#: src/Object/Post.php:398
|
||||||
msgid "Add star"
|
msgid "Add star"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:393
|
#: src/Object/Post.php:399
|
||||||
msgid "Remove star"
|
msgid "Remove star"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:394
|
#: src/Object/Post.php:400
|
||||||
msgid "Toggle star status"
|
msgid "Toggle star status"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:405
|
#: src/Object/Post.php:411
|
||||||
msgid "Pin"
|
msgid "Pin"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:406
|
#: src/Object/Post.php:412
|
||||||
msgid "Unpin"
|
msgid "Unpin"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:407
|
#: src/Object/Post.php:413
|
||||||
msgid "Toggle pin status"
|
msgid "Toggle pin status"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:410
|
#: src/Object/Post.php:416
|
||||||
msgid "Pinned"
|
msgid "Pinned"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:415
|
#: src/Object/Post.php:421
|
||||||
msgid "Add tag"
|
msgid "Add tag"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:430
|
#: src/Object/Post.php:436
|
||||||
msgid "Quote share this"
|
msgid "Quote share this"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:430
|
#: src/Object/Post.php:436
|
||||||
msgid "Quote Share"
|
msgid "Quote Share"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:433
|
#: src/Object/Post.php:439
|
||||||
msgid "Reshare this"
|
msgid "Reshare this"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:433
|
#: src/Object/Post.php:439
|
||||||
msgid "Reshare"
|
msgid "Reshare"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:434
|
#: src/Object/Post.php:440
|
||||||
msgid "Cancel your Reshare"
|
msgid "Cancel your Reshare"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:434
|
#: src/Object/Post.php:440
|
||||||
msgid "Unshare"
|
msgid "Unshare"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:478
|
#: src/Object/Post.php:484
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%s (Received %s)"
|
msgid "%s (Received %s)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:484
|
#: src/Object/Post.php:490
|
||||||
msgid "Comment this item on your system"
|
msgid "Comment this item on your system"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:484
|
#: src/Object/Post.php:490
|
||||||
msgid "Remote comment"
|
msgid "Remote comment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:508
|
#: src/Object/Post.php:514
|
||||||
msgid "Share via ..."
|
msgid "Share via ..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:508
|
#: src/Object/Post.php:514
|
||||||
msgid "Share via external services"
|
msgid "Share via external services"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:515
|
#: src/Object/Post.php:521
|
||||||
msgid "Unknown parent"
|
msgid "Unknown parent"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:519
|
#: src/Object/Post.php:525
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "in reply to %s"
|
msgid "in reply to %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:521
|
#: src/Object/Post.php:527
|
||||||
msgid "Parent is probably private or not federated."
|
msgid "Parent is probably private or not federated."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:545
|
#: src/Object/Post.php:551
|
||||||
msgid "to"
|
msgid "to"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:546
|
#: src/Object/Post.php:552
|
||||||
msgid "via"
|
msgid "via"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:547
|
#: src/Object/Post.php:553
|
||||||
msgid "Wall-to-Wall"
|
msgid "Wall-to-Wall"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:548
|
#: src/Object/Post.php:554
|
||||||
msgid "via Wall-To-Wall:"
|
msgid "via Wall-To-Wall:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:603
|
#: src/Object/Post.php:609
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Reply to %s"
|
msgid "Reply to %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:625
|
#: src/Object/Post.php:631
|
||||||
msgid "Notifier task is pending"
|
msgid "Notifier task is pending"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:626
|
#: src/Object/Post.php:632
|
||||||
msgid "Delivery to remote servers is pending"
|
msgid "Delivery to remote servers is pending"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:627
|
#: src/Object/Post.php:633
|
||||||
msgid "Delivery to remote servers is underway"
|
msgid "Delivery to remote servers is underway"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:628
|
#: src/Object/Post.php:634
|
||||||
msgid "Delivery to remote servers is mostly done"
|
msgid "Delivery to remote servers is mostly done"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:629
|
#: src/Object/Post.php:635
|
||||||
msgid "Delivery to remote servers is done"
|
msgid "Delivery to remote servers is done"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:651
|
#: src/Object/Post.php:660
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%d comment"
|
msgid "%d comment"
|
||||||
msgid_plural "%d comments"
|
msgid_plural "%d comments"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: src/Object/Post.php:652
|
#: src/Object/Post.php:661
|
||||||
msgid "Show more"
|
msgid "Show more"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:653
|
#: src/Object/Post.php:662
|
||||||
msgid "Show fewer"
|
msgid "Show fewer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:690
|
#: src/Object/Post.php:699
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Reshared by: %s"
|
msgid "Reshared by: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:695
|
#: src/Object/Post.php:704
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Viewed by: %s"
|
msgid "Viewed by: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:700
|
#: src/Object/Post.php:709
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Read by: %s"
|
msgid "Read by: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:705
|
#: src/Object/Post.php:714
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Liked by: %s"
|
msgid "Liked by: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:710
|
#: src/Object/Post.php:719
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Disliked by: %s"
|
msgid "Disliked by: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:715
|
#: src/Object/Post.php:724
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Attended by: %s"
|
msgid "Attended by: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:720
|
#: src/Object/Post.php:729
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Maybe attended by: %s"
|
msgid "Maybe attended by: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:725
|
#: src/Object/Post.php:734
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Not attended by: %s"
|
msgid "Not attended by: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:730
|
#: src/Object/Post.php:739
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Commented by: %s"
|
msgid "Commented by: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:735
|
#: src/Object/Post.php:744
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Reacted with %s by: %s"
|
msgid "Reacted with %s by: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/Post.php:758
|
#: src/Object/Post.php:767
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Quote shared by: %s"
|
msgid "Quote shared by: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
<div style="text-align: left; margin-top: 10px;">
|
<div style="text-align: left; margin-top: 10px;">
|
||||||
<a href="#" onclick="toggleTags(event)" role="button" aria-expanded="false" aria-controls="more-tags" style="text-decoration: none; color: inherit; cursor: pointer; display: inline-flex; align-items: center; font-weight: bold;">
|
<a href="#" onclick="toggleTags(event)" role="button" aria-expanded="false" aria-controls="more-tags" style="text-decoration: none; color: inherit; cursor: pointer; display: inline-flex; align-items: center; font-weight: bold;">
|
||||||
<i id="caret-icon" class="fa fa-caret-right" aria-hidden="true" style="margin-right: 5px;"></i>
|
<i id="caret-icon" class="fa fa-caret-right" aria-hidden="true" style="margin-right: 5px;"></i>
|
||||||
<span id="link-text">Show More</span>
|
<span id="link-text">{{$showmore}}</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<ul id="more-tags" style="display:none; list-style-type: none; padding: 0; margin: 0;">
|
<ul id="more-tags" style="display:none; list-style-type: none; padding: 0; margin: 0;">
|
||||||
|
|
@ -53,16 +53,16 @@
|
||||||
|
|
||||||
if (moreTags.style.display === 'none') {
|
if (moreTags.style.display === 'none') {
|
||||||
moreTags.style.display = 'block';
|
moreTags.style.display = 'block';
|
||||||
linkText.textContent = 'Show Less';
|
linkText.textContent = '{{$showless}}';
|
||||||
link.setAttribute('aria-expanded', 'true');
|
link.setAttribute('aria-expanded', 'true');
|
||||||
caretIcon.className = 'fa fa-caret-down';
|
caretIcon.className = 'fa fa-caret-down';
|
||||||
} else {
|
} else {
|
||||||
moreTags.style.display = 'none';
|
moreTags.style.display = 'none';
|
||||||
linkText.textContent = 'Show More';
|
linkText.textContent = '{{$showmore}}';
|
||||||
link.setAttribute('aria-expanded', 'false');
|
link.setAttribute('aria-expanded', 'false');
|
||||||
caretIcon.className = 'fa fa-caret-right';
|
caretIcon.className = 'fa fa-caret-right';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
initWidget('trending-tags-sidebar', 'trending-tags-sidebar-inflated');
|
initWidget('trending-tags-sidebar', 'trending-tags-sidebar-inflated');
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,8 @@
|
||||||
* Description: "Vier" is a very compact and modern theme. It uses the font awesome font library: http://fortawesome.github.com/Font-Awesome/
|
* Description: "Vier" is a very compact and modern theme. It uses the font awesome font library: http://fortawesome.github.com/Font-Awesome/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use Friendica\App;
|
use Friendica\App\Mode;
|
||||||
use Friendica\Content\GroupManager;
|
use Friendica\Content\GroupManager;
|
||||||
use Friendica\Core\Addon;
|
|
||||||
use Friendica\Core\Renderer;
|
use Friendica\Core\Renderer;
|
||||||
use Friendica\Core\Search;
|
use Friendica\Core\Search;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
|
|
@ -35,7 +34,7 @@ function vier_init()
|
||||||
$args = DI::args();
|
$args = DI::args();
|
||||||
|
|
||||||
if (
|
if (
|
||||||
DI::mode()->has(App\Mode::MAINTENANCEDISABLED)
|
DI::mode()->has(Mode::MAINTENANCEDISABLED)
|
||||||
&& (
|
&& (
|
||||||
$args->get(0) === 'profile' && $args->get(1) === (DI::userSession()->getLocalUserNickname() ?? '')
|
$args->get(0) === 'profile' && $args->get(1) === (DI::userSession()->getLocalUserNickname() ?? '')
|
||||||
|| $args->get(0) === 'network' && DI::userSession()->getLocalUserId()
|
|| $args->get(0) === 'network' && DI::userSession()->getLocalUserId()
|
||||||
|
|
@ -93,7 +92,7 @@ EOT;
|
||||||
// Hide the left menu bar
|
// Hide the left menu bar
|
||||||
/// @TODO maybe move this static array out where it should belong?
|
/// @TODO maybe move this static array out where it should belong?
|
||||||
if (empty(DI::page()['aside']) && in_array($args->get(0), ["community", "calendar", "help", "delegation", "notifications",
|
if (empty(DI::page()['aside']) && in_array($args->get(0), ["community", "calendar", "help", "delegation", "notifications",
|
||||||
"probe", "webfinger", "login", "invite", "credits"])) {
|
"probe", "webfinger", "login", "invite", "credits"])) {
|
||||||
DI::page()['htmlhead'] .= "<link rel='stylesheet' href='view/theme/vier/hide.css' />";
|
DI::page()['htmlhead'] .= "<link rel='stylesheet' href='view/theme/vier/hide.css' />";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -117,12 +116,12 @@ function get_vier_config($key, $default = false, $admin = false)
|
||||||
|
|
||||||
function vier_community_info()
|
function vier_community_info()
|
||||||
{
|
{
|
||||||
$show_pages = get_vier_config("show_pages", 1);
|
$show_pages = get_vier_config("show_pages", 1);
|
||||||
$show_profiles = get_vier_config("show_profiles", 1);
|
$show_profiles = get_vier_config("show_profiles", 1);
|
||||||
$show_helpers = get_vier_config("show_helpers", 1);
|
$show_helpers = get_vier_config("show_helpers", 1);
|
||||||
$show_services = get_vier_config("show_services", 1);
|
$show_services = get_vier_config("show_services", 1);
|
||||||
$show_friends = get_vier_config("show_friends", 1);
|
$show_friends = get_vier_config("show_friends", 1);
|
||||||
$show_lastusers = get_vier_config("show_lastusers", 1);
|
$show_lastusers = get_vier_config("show_lastusers", 1);
|
||||||
|
|
||||||
// get_baseurl
|
// get_baseurl
|
||||||
$aside['$url'] = $url = (string)DI::baseUrl();
|
$aside['$url'] = $url = (string)DI::baseUrl();
|
||||||
|
|
@ -138,10 +137,10 @@ function vier_community_info()
|
||||||
|
|
||||||
foreach ($contacts as $contact) {
|
foreach ($contacts as $contact) {
|
||||||
$entry = Renderer::replaceMacros($tpl, [
|
$entry = Renderer::replaceMacros($tpl, [
|
||||||
'$id' => $contact['id'],
|
'$id' => $contact['id'],
|
||||||
'$profile_link' => 'contact/follow?url=' . urlencode($contact['url']),
|
'$profile_link' => 'contact/follow?url=' . urlencode($contact['url']),
|
||||||
'$photo' => Contact::getMicro($contact),
|
'$photo' => Contact::getMicro($contact),
|
||||||
'$alt_text' => $contact['name'],
|
'$alt_text' => $contact['name'],
|
||||||
]);
|
]);
|
||||||
$aside['$community_profiles_items'][] = $entry;
|
$aside['$community_profiles_items'][] = $entry;
|
||||||
}
|
}
|
||||||
|
|
@ -165,11 +164,11 @@ function vier_community_info()
|
||||||
|
|
||||||
foreach ($profiles as $profile) {
|
foreach ($profiles as $profile) {
|
||||||
$profile_link = 'profile/' . ((strlen($profile['nickname'])) ? $profile['nickname'] : $profile['uid']);
|
$profile_link = 'profile/' . ((strlen($profile['nickname'])) ? $profile['nickname'] : $profile['uid']);
|
||||||
$entry = Renderer::replaceMacros($tpl, [
|
$entry = Renderer::replaceMacros($tpl, [
|
||||||
'$id' => $profile['id'],
|
'$id' => $profile['id'],
|
||||||
'$profile_link' => $profile_link,
|
'$profile_link' => $profile_link,
|
||||||
'$photo' => DI::baseUrl()->remove($profile['thumb']),
|
'$photo' => DI::baseUrl()->remove($profile['thumb']),
|
||||||
'$alt_text' => $profile['name']]);
|
'$alt_text' => $profile['name']]);
|
||||||
$aside['$lastusers_items'][] = $entry;
|
$aside['$lastusers_items'][] = $entry;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -177,18 +176,18 @@ function vier_community_info()
|
||||||
|
|
||||||
//right_aside FIND FRIENDS
|
//right_aside FIND FRIENDS
|
||||||
if ($show_friends && DI::userSession()->getLocalUserId()) {
|
if ($show_friends && DI::userSession()->getLocalUserId()) {
|
||||||
$nv = [];
|
$nv = [];
|
||||||
$nv['findpeople'] = DI::l10n()->t('Find People');
|
$nv['findpeople'] = DI::l10n()->t('Find People');
|
||||||
$nv['desc'] = DI::l10n()->t('Enter name or interest');
|
$nv['desc'] = DI::l10n()->t('Enter name or interest');
|
||||||
$nv['label'] = DI::l10n()->t('Connect/Follow');
|
$nv['label'] = DI::l10n()->t('Connect/Follow');
|
||||||
$nv['hint'] = DI::l10n()->t('Examples: Robert Morgenstein, Fishing');
|
$nv['hint'] = DI::l10n()->t('Examples: Robert Morgenstein, Fishing');
|
||||||
$nv['findthem'] = DI::l10n()->t('Find');
|
$nv['findthem'] = DI::l10n()->t('Find');
|
||||||
$nv['suggest'] = DI::l10n()->t('Friend Suggestions');
|
$nv['suggest'] = DI::l10n()->t('Friend Suggestions');
|
||||||
$nv['similar'] = DI::l10n()->t('Similar Interests');
|
$nv['similar'] = DI::l10n()->t('Similar Interests');
|
||||||
$nv['random'] = DI::l10n()->t('Random Profile');
|
$nv['random'] = DI::l10n()->t('Random Profile');
|
||||||
$nv['inv'] = DI::l10n()->t('Invite Friends');
|
$nv['inv'] = DI::l10n()->t('Invite Friends');
|
||||||
$nv['directory'] = DI::l10n()->t('Global Directory');
|
$nv['directory'] = DI::l10n()->t('Global Directory');
|
||||||
$nv['global_dir'] = Search::getGlobalDirectory();
|
$nv['global_dir'] = Search::getGlobalDirectory();
|
||||||
$nv['local_directory'] = DI::l10n()->t('Local Directory');
|
$nv['local_directory'] = DI::l10n()->t('Local Directory');
|
||||||
|
|
||||||
$aside['$nv'] = $nv;
|
$aside['$nv'] = $nv;
|
||||||
|
|
@ -224,14 +223,14 @@ function vier_community_info()
|
||||||
$tpl = Renderer::getMarkupTemplate('ch_helpers.tpl');
|
$tpl = Renderer::getMarkupTemplate('ch_helpers.tpl');
|
||||||
|
|
||||||
if ($r) {
|
if ($r) {
|
||||||
$helpers = [];
|
$helpers = [];
|
||||||
$helpers['title'] = ["", DI::l10n()->t('Help'), "", ""];
|
$helpers['title'] = ["", DI::l10n()->t('Help'), "", ""];
|
||||||
|
|
||||||
$aside['$helpers_items'] = [];
|
$aside['$helpers_items'] = [];
|
||||||
|
|
||||||
foreach ($r as $rr) {
|
foreach ($r as $rr) {
|
||||||
$entry = Renderer::replaceMacros($tpl, [
|
$entry = Renderer::replaceMacros($tpl, [
|
||||||
'$url' => $rr['url'],
|
'$url' => $rr['url'],
|
||||||
'$title' => $rr['name'],
|
'$title' => $rr['name'],
|
||||||
]);
|
]);
|
||||||
$aside['$helpers_items'][] = $entry;
|
$aside['$helpers_items'][] = $entry;
|
||||||
|
|
@ -244,55 +243,57 @@ function vier_community_info()
|
||||||
|
|
||||||
// connectable services
|
// connectable services
|
||||||
if ($show_services) {
|
if ($show_services) {
|
||||||
|
$addonHelper = DI::addonHelper();
|
||||||
|
|
||||||
/// @TODO This whole thing is hard-coded, better rewrite to Intercepting Filter Pattern (future-todo)
|
/// @TODO This whole thing is hard-coded, better rewrite to Intercepting Filter Pattern (future-todo)
|
||||||
$r = [];
|
$r = [];
|
||||||
|
|
||||||
if (Addon::isEnabled("buffer")) {
|
if ($addonHelper->isAddonEnabled("buffer")) {
|
||||||
$r[] = ["photo" => "images/buffer.png", "name" => "Buffer"];
|
$r[] = ["photo" => "images/buffer.png", "name" => "Buffer"];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Addon::isEnabled("blogger")) {
|
if ($addonHelper->isAddonEnabled("blogger")) {
|
||||||
$r[] = ["photo" => "images/blogger.png", "name" => "Blogger"];
|
$r[] = ["photo" => "images/blogger.png", "name" => "Blogger"];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Addon::isEnabled("dwpost")) {
|
if ($addonHelper->isAddonEnabled("dwpost")) {
|
||||||
$r[] = ["photo" => "images/dreamwidth.png", "name" => "Dreamwidth"];
|
$r[] = ["photo" => "images/dreamwidth.png", "name" => "Dreamwidth"];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Addon::isEnabled("ifttt")) {
|
if ($addonHelper->isAddonEnabled("ifttt")) {
|
||||||
$r[] = ["photo" => "addon/ifttt/ifttt.png", "name" => "IFTTT"];
|
$r[] = ["photo" => "addon/ifttt/ifttt.png", "name" => "IFTTT"];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Addon::isEnabled("statusnet")) {
|
if ($addonHelper->isAddonEnabled("statusnet")) {
|
||||||
$r[] = ["photo" => "images/gnusocial.png", "name" => "GNU Social"];
|
$r[] = ["photo" => "images/gnusocial.png", "name" => "GNU Social"];
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @TODO old-lost code (and below)?
|
/// @TODO old-lost code (and below)?
|
||||||
//if (Addon::isEnabled("ijpost")) {
|
//if ($addonHelper->isAddonEnabled("ijpost")) {
|
||||||
// $r[] = array("photo" => "images/", "name" => "");
|
// $r[] = array("photo" => "images/", "name" => "");
|
||||||
//}
|
//}
|
||||||
|
|
||||||
if (Addon::isEnabled("libertree")) {
|
if ($addonHelper->isAddonEnabled("libertree")) {
|
||||||
$r[] = ["photo" => "images/libertree.png", "name" => "Libertree"];
|
$r[] = ["photo" => "images/libertree.png", "name" => "Libertree"];
|
||||||
}
|
}
|
||||||
|
|
||||||
//if (Addon::isEnabled("ljpost")) {
|
//if ($addonHelper->isAddonEnabled("ljpost")) {
|
||||||
// $r[] = array("photo" => "images/", "name" => "");
|
// $r[] = array("photo" => "images/", "name" => "");
|
||||||
//}
|
//}
|
||||||
|
|
||||||
if (Addon::isEnabled("pumpio")) {
|
if ($addonHelper->isAddonEnabled("pumpio")) {
|
||||||
$r[] = ["photo" => "images/pumpio.png", "name" => "pump.io"];
|
$r[] = ["photo" => "images/pumpio.png", "name" => "pump.io"];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Addon::isEnabled("tumblr")) {
|
if ($addonHelper->isAddonEnabled("tumblr")) {
|
||||||
$r[] = ["photo" => "images/tumblr.png", "name" => "Tumblr"];
|
$r[] = ["photo" => "images/tumblr.png", "name" => "Tumblr"];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Addon::isEnabled("twitter")) {
|
if ($addonHelper->isAddonEnabled("twitter")) {
|
||||||
$r[] = ["photo" => "images/twitter.png", "name" => "Twitter"];
|
$r[] = ["photo" => "images/twitter.png", "name" => "Twitter"];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Addon::isEnabled("wppost")) {
|
if ($addonHelper->isAddonEnabled("wppost")) {
|
||||||
$r[] = ["photo" => "images/wordpress.png", "name" => "Wordpress"];
|
$r[] = ["photo" => "images/wordpress.png", "name" => "Wordpress"];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -303,14 +304,14 @@ function vier_community_info()
|
||||||
$tpl = Renderer::getMarkupTemplate('ch_connectors.tpl');
|
$tpl = Renderer::getMarkupTemplate('ch_connectors.tpl');
|
||||||
|
|
||||||
if (DBA::isResult($r)) {
|
if (DBA::isResult($r)) {
|
||||||
$con_services = [];
|
$con_services = [];
|
||||||
$con_services['title'] = ["", DI::l10n()->t('Connect Services'), "", ""];
|
$con_services['title'] = ["", DI::l10n()->t('Connect Services'), "", ""];
|
||||||
$aside['$con_services'] = $con_services;
|
$aside['$con_services'] = $con_services;
|
||||||
|
|
||||||
foreach ($r as $rr) {
|
foreach ($r as $rr) {
|
||||||
$entry = Renderer::replaceMacros($tpl, [
|
$entry = Renderer::replaceMacros($tpl, [
|
||||||
'$url' => $url,
|
'$url' => $url,
|
||||||
'$photo' => $rr['photo'],
|
'$photo' => $rr['photo'],
|
||||||
'$alt_text' => $rr['name'],
|
'$alt_text' => $rr['name'],
|
||||||
]);
|
]);
|
||||||
$aside['$connector_items'][] = $entry;
|
$aside['$connector_items'][] = $entry;
|
||||||
|
|
@ -320,7 +321,7 @@ function vier_community_info()
|
||||||
//end connectable services
|
//end connectable services
|
||||||
|
|
||||||
//print right_aside
|
//print right_aside
|
||||||
$tpl = Renderer::getMarkupTemplate('communityhome.tpl');
|
$tpl = Renderer::getMarkupTemplate('communityhome.tpl');
|
||||||
DI::page()['right_aside'] = Renderer::replaceMacros($tpl, $aside);
|
DI::page()['right_aside'] = Renderer::replaceMacros($tpl, $aside);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue