const DELIVER_FIELDLIST = [
'uid', 'id', 'parent', 'uri-id', 'uri', 'thr-parent', 'parent-uri', 'guid',
'parent-guid', 'conversation', 'received', 'created', 'edited', 'verb', 'object-type', 'object', 'target',
- 'private', 'title', 'body', 'raw-body', 'location', 'coord', 'app',
+ 'private', 'title', 'body', 'raw-body', 'language', 'location', 'coord', 'app',
'inform', 'deleted', 'extid', 'post-type', 'post-reason', 'gravity',
'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid',
'author-id', 'author-addr', 'author-link', 'author-name', 'author-avatar', 'owner-id', 'owner-link', 'contact-uid',
// Reshares have to keep their permissions to allow groups to work
if (!$defined_permissions && (!$item['origin'] || ($item['verb'] != Activity::ANNOUNCE))) {
- $item['allow_cid'] = $toplevel_parent['allow_cid'];
- $item['allow_gid'] = $toplevel_parent['allow_gid'];
- $item['deny_cid'] = $toplevel_parent['deny_cid'];
- $item['deny_gid'] = $toplevel_parent['deny_gid'];
+ // Don't store the permissions on pure AP posts
+ $store_permissions = ($item['network'] != Protocol::ACTIVITYPUB) || $item['origin'] || !empty($item['diaspora_signed_text']);
+ $item['allow_cid'] = $store_permissions ? $toplevel_parent['allow_cid'] : '';
+ $item['allow_gid'] = $store_permissions ? $toplevel_parent['allow_gid'] : '';
+ $item['deny_cid'] = $store_permissions ? $toplevel_parent['deny_cid'] : '';
+ $item['deny_gid'] = $store_permissions ? $toplevel_parent['deny_gid'] : '';
}
$parent_origin = $toplevel_parent['origin'];
*/
private static function setOwnerforResharedItem(array $item)
{
+ if ($item['uid'] == 0) {
+ return;
+ }
+
$parent = Post::selectFirst(
['id', 'causer-id', 'owner-id', 'author-id', 'author-link', 'origin', 'post-reason'],
['uri-id' => $item['thr-parent-id'], 'uid' => $item['uid']]
return [];
}
- $availableLanguages = DI::l10n()->getAvailableLanguages(true);
- $availableLanguages = DI::l10n()->convertForLanguageDetection($availableLanguages);
-
- $ld = new Language(array_keys($availableLanguages));
+ $ld = new Language(DI::l10n()->getDetectableLanguages());
$result = [];
foreach (self::splitByBlocks($searchtext) as $block) {
- $languages = $ld->detect($block)->limit(0, $count)->close() ?: [];
+ $languages = $ld->detect($block)->close() ?: [];
$data = [
'text' => $block,
}
}
+ $result = self::compactLanguages($result);
+
arsort($result);
- $result = array_slice($result, 0, $count);
+ return array_slice($result, 0, $count);
+ }
- return $result;
+ /**
+ * Concert the language code in the detection result to ISO 639-1.
+ * On duplicates the system uses the higher quality value.
+ *
+ * @param array $result
+ * @return array
+ */
+ private static function compactLanguages(array $result): array
+ {
+ $languages = [];
+ foreach ($result as $language => $quality) {
+ if ($quality == 0) {
+ continue;
+ }
+ $code = DI::l10n()->toISO6391($language);
+ if (empty($languages[$code]) || ($languages[$code] < $quality)) {
+ $languages[$code] = $quality;
+ }
+ }
+ return $languages;
}
/**
$used_languages = '';
foreach (json_decode($item['language'], true) as $language => $reliability) {
- $used_languages .= $iso639->nativeByCode1(substr($language, 0, 2)) . ' (' . $iso639->languageByCode1(substr($language, 0, 2)) . ' - ' . $language . "): " . number_format($reliability, 5) . '\n';
+ $code = DI::l10n()->toISO6391($language);
+
+ $native = $iso639->nativeByCode1($code);
+ $language = $iso639->languageByCode1($code);
+ if ($native != $language) {
+ $used_languages .= DI::l10n()->t('%s (%s - %s): %s', $native, $language, $code, number_format($reliability, 5)) . '\n';
+ } else {
+ $used_languages .= DI::l10n()->t('%s (%s): %s', $native, $code, number_format($reliability, 5)) . '\n';
+ }
}
$used_languages = DI::l10n()->t('Detected languages in this post:\n%s', $used_languages);
return $used_languages;