]> git.mxchange.org Git - friendica.git/blobdiff - src/Model/Item.php
Fix posting/editing empty text image posts through Mastodon API
[friendica.git] / src / Model / Item.php
index 89390317fe42694f9888421ae65032536a614de6..12184a3a55d69de9ea00861b971af5278754aecf 100644 (file)
@@ -201,6 +201,8 @@ class Item
                $notify_items = [];
 
                while ($item = DBA::fetch($items)) {
+                       Post\Media::deleteByURIId($item['uri-id'], [Post\Media::HTML]);
+
                        if (!empty($fields['body'])) {
                                if (!empty($item['quote-uri-id'])) {
                                        $fields['body'] = BBCode::removeSharedData($fields['body']);
@@ -210,8 +212,6 @@ class Item
                                        }
                                }
 
-                               Post\Media::insertFromAttachmentData($item['uri-id'], $fields['body']);
-
                                $content_fields = ['raw-body' => trim($fields['raw-body'] ?? $fields['body'])];
 
                                // Remove all media attachments from the body and store them in the post-media table
@@ -220,6 +220,10 @@ class Item
                                $content_fields['raw-body'] = self::setHashtags($content_fields['raw-body']);
 
                                Post\Media::insertFromRelevantUrl($item['uri-id'], $content_fields['raw-body'], $fields['body'], $item['author-network']);
+
+                               Post\Media::insertFromAttachmentData($item['uri-id'], $fields['body']);
+                               $content_fields['raw-body'] = BBCode::removeAttachment($content_fields['raw-body']);
+
                                Post\Content::update($item['uri-id'], $content_fields);
                        }
 
@@ -585,7 +589,7 @@ class Item
        public static function isValid(array $item): bool
        {
                // When there is no content then we don't post it
-               if (($item['body'] . $item['title'] == '') && empty($item['quote-uri-id']) && (empty($item['uri-id']) || !Post\Media::existsByURIId($item['uri-id']))) {
+               if (($item['body'] . $item['title'] == '') && empty($item['quote-uri-id']) && empty($item['attachments']) && (empty($item['uri-id']) || !Post\Media::existsByURIId($item['uri-id']))) {
                        Logger::notice('No body, no title.');
                        return false;
                }
@@ -1143,8 +1147,6 @@ class Item
                        $item['body']     = BBCode::removeSharedData($item['body']);
                }
 
-               Post\Media::insertFromAttachmentData($item['uri-id'], $item['body']);
-
                // Remove all media attachments from the body and store them in the post-media table
                $item['raw-body'] = Post\Media::insertFromBody($item['uri-id'], $item['raw-body']);
                $item['raw-body'] = self::setHashtags($item['raw-body']);
@@ -1152,6 +1154,10 @@ class Item
                $author = Contact::getById($item['author-id'], ['network']);
                Post\Media::insertFromRelevantUrl($item['uri-id'], $item['raw-body'], $item['body'], $author['network'] ?? '');
 
+               Post\Media::insertFromAttachmentData($item['uri-id'], $item['body']);
+               $item['body']     = BBCode::removeAttachment($item['body']);
+               $item['raw-body'] = BBCode::removeAttachment($item['raw-body']);
+
                // Check for hashtags in the body and repair or add hashtag links
                $item['body'] = self::setHashtags($item['body']);
 
@@ -1211,8 +1217,8 @@ class Item
                        Post\Thread::insert($item['uri-id'], $item);
                }
 
-               // The content of activities normally doesn't matter - except for likes from Misskey 
-               if (!in_array($item['verb'], self::ACTIVITIES) || in_array($item['verb'], [Activity::LIKE, Activity::DISLIKE]) && !empty($item['body']) && ($item['body'] != $item['verb'])) {
+               // The content of activities normally doesn't matter - except for likes from Misskey
+               if (!in_array($item['verb'], self::ACTIVITIES) || in_array($item['verb'], [Activity::LIKE, Activity::DISLIKE]) && !empty($item['body']) && (mb_strlen($item['body']) == 1)) {
                        Post\Content::insert($item['uri-id'], $item);
                }
 
@@ -1715,7 +1721,7 @@ class Item
                        if (!empty($item['event-id'])) {
                                $event_post = Post::selectFirst(['event-id'], ['uri-id' => $item['uri-id'], 'uid' => $uid]);
                                if (!empty($event_post['event-id'])) {
-                                       $event = DBA::selectFirst('event', ['edited', 'start', 'finish', 'summary', 'desc', 'location', 'nofinish', 'adjust'], ['id' => $item['event-id']]);
+                                       $event = DBA::selectFirst('event', ['edited', 'start', 'finish', 'summary', 'desc', 'location', 'nofinish'], ['id' => $item['event-id']]);
                                        if (!empty($event)) {
                                                // We aren't using "Event::store" here, since we don't want to trigger any further action
                                                $ret = DBA::update('event', $event, ['id' => $event_post['event-id']]);
@@ -3003,8 +3009,9 @@ class Item
 
                $fields = ['uri-id', 'uri', 'body', 'title', 'author-name', 'author-link', 'author-avatar', 'guid', 'created', 'plink', 'network', 'has-media', 'quote-uri-id', 'post-type'];
 
-               $shared_uri_id = 0;
-               $shared_links  = [];
+               $shared_uri_id      = 0;
+               $shared_links       = [];
+               $quote_shared_links = [];
 
                $shared = DI::contentItem()->getSharedPost($item, $fields);
                if (!empty($shared['post'])) {
@@ -3023,7 +3030,14 @@ class Item
                                        $shared_links[] = strtolower($media[0]['url']);
                                }
 
-                               $quote_uri_id = $shared_item['uri-id'] ?? 0;
+                               if (!empty($shared_item['uri-id'])) {
+                                       $data = BBCode::getAttachmentData($shared_item['body']);
+                                       if (!empty($data['url'])) {
+                                               $quote_shared_links[] = $data['url'];
+                                       }
+
+                                       $quote_uri_id = $shared_item['uri-id'];
+                               }
                        }
                }
 
@@ -3098,7 +3112,7 @@ class Item
 
                if (!empty($shared_attachments)) {
                        $s = self::addVisualAttachments($shared_attachments, $shared_item, $s, true);
-                       $s = self::addLinkAttachment($shared_uri_id ?: $item['uri-id'], $shared_attachments, $body, $s, true, []);
+                       $s = self::addLinkAttachment($shared_uri_id ?: $item['uri-id'], $shared_attachments, $body, $s, true, $quote_shared_links);
                        $s = self::addNonVisualAttachments($shared_attachments, $item, $s, true);
                        $body = BBCode::removeSharedData($body);
                }
@@ -3418,7 +3432,7 @@ class Item
                DI::profiler()->stopRecording();
 
                if (isset($data['url']) && !in_array(strtolower($data['url']), $ignore_links)) {
-                       if (!empty($data['description']) || !empty($data['image']) || !empty($data['preview'])) {
+                       if (!empty($data['description']) || !empty($data['image']) || !empty($data['preview']) || (!empty($data['title']) && !Strings::compareLink($data['title'], $data['url']))) {
                                $parts = parse_url($data['url']);
                                if (!empty($parts['scheme']) && !empty($parts['host'])) {
                                        if (empty($data['provider_name'])) {