]> git.mxchange.org Git - friendica.git/blobdiff - src/Model/Item.php
Use rawContent for Special Options to avoid a protected options() method
[friendica.git] / src / Model / Item.php
index 285187e5fbe70c6db44de2c32b8394917f8b2209..f923fe2691d84109e6ec20f0e918fed26a4d2da6 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2010-2021, the Friendica project
+ * @copyright Copyright (C) 2010-2022, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
@@ -366,7 +366,7 @@ class Item
        public static function guid($item, $notify)
        {
                if (!empty($item['guid'])) {
-                       return Strings::escapeTags(trim($item['guid']));
+                       return trim($item['guid']);
                }
 
                if ($notify) {
@@ -448,7 +448,7 @@ class Item
                // We use "microtime" to keep the arrival order and "mt_rand" to avoid duplicates
                $file = 'item-' . round(microtime(true) * 10000) . '-' . mt_rand() . '.msg';
 
-               $spoolpath = get_spoolpath();
+               $spoolpath = System::getSpoolPath();
                if ($spoolpath != "") {
                        $spool = $spoolpath . '/' . $file;
 
@@ -949,7 +949,9 @@ class Item
                        $item['parent'] = $parent_id;
 
                        // Trigger automatic reactions for addons
-                       $item['api_source'] = true;
+                       if (!isset($item['api_source'])) {
+                               $item['api_source'] = true;
+                       }
 
                        // We have to tell the hooks who we are - this really should be improved
                        if (!local_user()) {
@@ -971,7 +973,7 @@ class Item
                }
 
                if (!empty($item['cancel'])) {
-                       Logger::log('post cancelled by addon.');
+                       Logger::notice('post cancelled by addon.');
                        return 0;
                }
 
@@ -1885,7 +1887,7 @@ class Item
                        foreach ($matches as $mtch) {
                                if (Strings::compareLink($link, $mtch[1]) || Strings::compareLink($dlink, $mtch[1])) {
                                        $mention = true;
-                                       Logger::log('mention found: ' . $mtch[2]);
+                                       Logger::notice('mention found', ['mention' => $mtch[2]]);
                                }
                        }
                }
@@ -2258,8 +2260,8 @@ class Item
                        $condition[] = $network;
                }
 
-               $condition[0] .= " AND `received` < UTC_TIMESTAMP() - INTERVAL ? DAY";
-               $condition[] = $days;
+               $condition[0] .= " AND `received` < ?";
+               $condition[] = DateTimeFormat::utc('now - ' . $days . ' day');
 
                $items = Post::select(['resource-id', 'starred', 'id', 'post-type', 'uid', 'uri-id'], $condition);
 
@@ -2305,7 +2307,7 @@ class Item
                        ++$expired;
                }
                DBA::close($items);
-               Logger::log('User ' . $uid . ": expired $expired items; expire items: $expire_items, expire notes: $expire_notes, expire starred: $expire_starred, expire photos: $expire_photos");
+               Logger::notice('User ' . $uid . ": expired $expired items; expire items: $expire_items, expire notes: $expire_notes, expire starred: $expire_starred, expire photos: $expire_photos");
        }
 
        public static function firstPostDate($uid, $wall = false)
@@ -2354,7 +2356,7 @@ class Item
 
                $item = Post::selectFirst(self::ITEM_FIELDLIST, ['id' => $item_id]);
                if (!DBA::isResult($item)) {
-                       Logger::log('like: unknown item ' . $item_id);
+                       Logger::notice('like: unknown item', ['id' => $item_id]);
                        return false;
                }
 
@@ -2990,8 +2992,9 @@ class Item
        private static function addLinkAttachment(int $uriid, array $attachments, string $body, string $content, bool $shared, array $ignore_links)
        {
                DI::profiler()->startRecording('rendering');
-               // @ToDo Check only for audio and video
-               $preview = empty($attachments['visual']);
+               // Don't show a preview when there is a visual attachment (audio or video)
+               $types = array_column($attachments['visual'], 'type');
+               $preview = !in_array(Post\Media::IMAGE, $types) && !in_array(Post\Media::VIDEO, $types);
 
                if (!empty($attachments['link'])) {
                        foreach ($attachments['link'] as $link) {
@@ -3262,6 +3265,18 @@ class Item
                        return $item_id;
                }
 
+               $hookData = [
+                       'uri'     => $uri,
+                       'uid'     => $uid,
+                       'item_id' => null,
+               ];
+
+               Hook::callAll('item_by_link', $hookData);
+
+               if (isset($hookData['item_id'])) {
+                       return is_numeric($hookData['item_id']) ? $hookData['item_id'] : 0;
+               }
+
                if ($fetched_uri = ActivityPub\Processor::fetchMissingActivity($uri)) {
                        $item_id = self::searchByLink($fetched_uri, $uid);
                } else {
@@ -3354,7 +3369,7 @@ class Item
                        $body = $shared_item['body'];
                }
 
-               $item['body'] = preg_replace("/\[share ([^\[\]]*)\].*\[\/share\]/ism", '[share $1]' . $body . '[/share]', $item['body']);
+               $item['body'] = preg_replace("/\[share ([^\[\]]*)\].*\[\/share\]/ism", '[share $1]' . str_replace('$', '\$', $body) . '[/share]', $item['body']);
                unset($shared_item['body']);
 
                return array_merge($item, $shared_item);