return '';
}
+ $languages = self::getLanguageArray(trim($item['title'] . "\n" . $item['body']));
+ if (empty($languages)) {
+ return '';
+ }
+
+ return json_encode($languages);
+ }
+
+ public static function getLanguageArray(string $body): array
+ {
// Convert attachments to links
- $naked_body = BBCode::removeAttachment($item['body']);
+ $naked_body = BBCode::removeAttachment($body);
if (empty($naked_body)) {
- return '';
+ return [];
}
// Remove links and pictures
$naked_body = BBCode::removeLinks($naked_body);
// Convert the title and the body to plain text
- $naked_body = trim($item['title'] . "\n" . BBCode::toPlaintext($naked_body));
+ $naked_body = BBCode::toPlaintext($naked_body);
// Remove possibly remaining links
$naked_body = preg_replace(Strings::autoLinkRegEx(), '', $naked_body);
if (empty($naked_body)) {
- return '';
+ return [];
}
$naked_body = self::getDominantLanguage($naked_body);
$availableLanguages['fa'] = 'fa';
$ld = new Language(array_keys($availableLanguages));
- $languages = $ld->detect($naked_body)->limit(0, 3)->close();
- if (is_array($languages)) {
- return json_encode($languages);
- }
-
- return '';
+ return $ld->detect($naked_body)->limit(0, 3)->close() ?: [];
}
/**
* @param string $body
* @return string
*/
- protected static function normalizeMentionLinks(string $body): string
+ public static function normalizeMentionLinks(string $body): string
{
return preg_replace('%\[url=([^\[\]]*)]([#@!])(.*?)\[/url]%ism', '$2[url=$1]$3[/url]', $body);
}
use Friendica\Model\APContact;
use Friendica\Model\Contact;
use Friendica\Model\GServer;
+use Friendica\Model\Item;
use Friendica\Model\Post;
use Friendica\Model\Search;
use Friendica\Model\Tag;
return false;
}
+ $body = ActivityPub\Processor::normalizeMentionLinks($body);
+
$systemTags = [];
$userTags = [];
$denyTags = [];
}
}
+ $languages = [];
+ foreach (Item::getLanguageArray($body) as $language => $reliability) {
+ if ($reliability > 0) {
+ $languages[] = $language;
+ }
+ }
+
+ Logger::debug('Got languages', ['languages' => $languages, 'body' => $body]);
+
+ if (!empty($languages)) {
+ if (in_array($languages[0], $config->get('system', 'relay_deny_languages'))) {
+ Logger::info('Unwanted language found - rejected', ['language' => $languages[0], 'network' => $network, 'url' => $url]);
+ return false;
+ }
+ } elseif ($config->get('system', 'relay_deny_undetected_language')) {
+ Logger::info('Undetected language found - rejected', ['body' => $body, 'network' => $network, 'url' => $url]);
+ return false;
+ }
+
if ($scope == self::SCOPE_ALL) {
Logger::info('Server accept all posts - accepted', ['network' => $network, 'url' => $url]);
return true;
* Saves a timestamp for a value - f.e. a call
* Necessary for profiling Friendica
*
- * @param int $timestamp the Timestamp
+ * @param float $timestamp the Timestamp
* @param string $value A value to profile
* @param string $callstack A callstack string, generated if absent
*
* @return void
*/
- public function saveTimestamp(int $timestamp, string $value, string $callstack = '')
+ public function saveTimestamp(float $timestamp, string $value, string $callstack = '')
{
if (!$this->enabled) {
return;
* @throws NotFoundExceptionInterface No entry was found for **this** identifier.
* @throws ContainerExceptionInterface Error while retrieving the entry.
*
- * @return int Entry.
+ * @return float Entry.
*/
- public function get(string $id): int
+ public function get(string $id): float
{
if (!$this->has($id)) {
return 0;
// The authentication password for the redis database
'redis_password' => null,
+ // relay_deny_languages (Array)
+ // Array of languages that are rejected.
+ 'relay_deny_languages' => [],
+
+ // relay_deny_undetected_language (Boolean)
+ // Deny undetected languages
+ 'relay_deny_undetected_language' => false,
+
// session_handler (database|cache|native)
// Whether to use Cache to store session data or to use PHP native session storage.
'session_handler' => 'database',