]> git.mxchange.org Git - friendica.git/blobdiff - src/Model/Item.php
Improved handling for undeterminded languages
[friendica.git] / src / Model / Item.php
index 3a613d618034398a92d6a7248f7c32470ee365cc..a672f5b174791aa7af0d61f6446bd45eb4188812 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2010-2023, the Friendica project
+ * @copyright Copyright (C) 2010-2024, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
@@ -1440,12 +1440,41 @@ class Item
                        if (in_array($posted_item['gravity'], [self::GRAVITY_ACTIVITY, self::GRAVITY_COMMENT])) {
                                Post\Counts::update($posted_item['thr-parent-id'], $posted_item['parent-uri-id'], $posted_item['vid'], $posted_item['verb'], $posted_item['body']);
                        }
-                       Post\Engagement::storeFromItem($posted_item);
+
+                       $engagement_uri_id = Post\Engagement::storeFromItem($posted_item);
+                       if ($engagement_uri_id) {
+                               self::reshareChannelPost($engagement_uri_id);
+                       }
                }
 
                return $post_user_id;
        }
 
+       private static function reshareChannelPost(int $uri_id)
+       {
+               $item = Post::selectFirst(['id', 'private', 'network', 'language', 'owner-id'], ['uri-id' => $uri_id, 'uid' => 0]);
+               if (empty($item['id'])) {
+                       return;
+               }
+
+               if (($item['private'] != self::PUBLIC) || !in_array($item['network'], [Protocol::ACTIVITYPUB, Protocol::DFRN])) {
+                       return;
+               }
+
+               $engagement = DBA::selectFirst('post-engagement', ['searchtext', 'media-type'], ['uri-id' => $uri_id]);
+               if (empty($engagement['searchtext'])) {
+                       return;
+               }
+
+               $language = !empty($item['language']) ? array_key_first(json_decode($item['language'], true)) : '';
+               $tags     = array_column(Tag::getByURIId($uri_id, [Tag::HASHTAG]), 'name');
+
+               foreach (DI::userDefinedChannel()->getMatchingChannelUsers($engagement['searchtext'], $language, $tags, $engagement['media-type'], $item['owner-id']) as $uid) {
+                       Logger::debug('Reshare post', ['uid' => $uid, 'uri-id' => $uri_id, 'language' => $language, 'tags' => $tags, 'searchtext' => $engagement['searchtext'], 'media_type' => $engagement['media-type']]);
+                       self::performActivity($item['id'], 'announce', $uid);
+               }
+       }
+
        /**
         * Fetch the post reason for a given item array
         *
@@ -2078,7 +2107,7 @@ class Item
                }
 
                if (empty($searchtext)) {
-                       return [];
+                       return ['un' => 1];
                }
 
                $ld = new Language(DI::l10n()->getDetectableLanguages());
@@ -2101,6 +2130,10 @@ class Item
                        }
                }
 
+               if (empty($result)) {
+                       return ['un' => 1];
+               }
+
                $result = self::compactLanguages($result);
 
                arsort($result);
@@ -2211,8 +2244,13 @@ class Item
                foreach (json_decode($item['language'], true) as $language => $reliability) {
                        $code = DI::l10n()->toISO6391($language);
 
-                       $native   = $iso639->nativeByCode1($code);
-                       $language = $iso639->languageByCode1($code);
+                       if ($code == 'un') {
+                               $native = $language = DI::l10n()->t('Undetermined');
+                       } else {
+                               $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 {