]> git.mxchange.org Git - friendica.git/blobdiff - src/Model/Item.php
Support more than 2 images
[friendica.git] / src / Model / Item.php
index cb998c0fdcb4feac35219a8acf10aa78868baa60..152543b91668f3cc49c67d556eb2e5021caeefef 100644 (file)
@@ -2271,6 +2271,11 @@ class Item
                        return;
                }
 
+               $cdata = Contact::getPublicAndUserContactID($item['author-id'], $item['uid']);
+               if (empty($cdata['user']) || ($cdata['user'] != $item['contact-id'])) {
+                       return;
+               }
+
                if (!DBA::exists('contact', ['id' => $item['contact-id'], 'remote_self' => Contact::MIRROR_NATIVE_RESHARE])) {
                        return;
                }
@@ -2286,24 +2291,24 @@ class Item
 
        public static function isRemoteSelf(array $contact, array &$datarray): bool
        {
-               if (!$contact['remote_self']) {
+               if ($contact['remote_self'] != Contact::MIRROR_OWN_POST) {
                        return false;
                }
 
                // Prevent the forwarding of posts that are forwarded
-               if (!empty($datarray["extid"]) && ($datarray["extid"] == Protocol::DFRN)) {
+               if (!empty($datarray['extid']) && ($datarray['extid'] == Protocol::DFRN)) {
                        Logger::info('Already forwarded');
                        return false;
                }
 
                // Prevent to forward already forwarded posts
-               if ($datarray["app"] == DI::baseUrl()->getHostname()) {
+               if ($datarray['app'] == DI::baseUrl()->getHostname()) {
                        Logger::info('Already forwarded (second test)');
                        return false;
                }
 
                // Only forward posts
-               if ($datarray["verb"] != Activity::POST) {
+               if ($datarray['verb'] != Activity::POST) {
                        Logger::info('No post');
                        return false;
                }
@@ -2315,54 +2320,49 @@ class Item
 
                $datarray2 = $datarray;
                Logger::info('remote-self start', ['contact' => $contact['url'], 'remote_self'=> $contact['remote_self'], 'item' => $datarray]);
-               if ($contact['remote_self'] == Contact::MIRROR_OWN_POST) {
-                       $self = DBA::selectFirst('contact', ['id', 'name', 'url', 'thumb'],
-                                       ['uid' => $contact['uid'], 'self' => true]);
-                       if (DBA::isResult($self)) {
-                               $datarray['contact-id'] = $self["id"];
-
-                               $datarray['owner-name'] = $self["name"];
-                               $datarray['owner-link'] = $self["url"];
-                               $datarray['owner-avatar'] = $self["thumb"];
-
-                               $datarray['author-name']   = $datarray['owner-name'];
-                               $datarray['author-link']   = $datarray['owner-link'];
-                               $datarray['author-avatar'] = $datarray['owner-avatar'];
-
-                               unset($datarray['edited']);
-
-                               unset($datarray['network']);
-                               unset($datarray['owner-id']);
-                               unset($datarray['author-id']);
-                       }
-
-                       if ($contact['network'] != Protocol::FEED) {
-                               $old_uri_id = $datarray["uri-id"] ?? 0;
-                               $datarray["guid"] = System::createUUID();
-                               unset($datarray["plink"]);
-                               $datarray["uri"] = self::newURI($datarray["guid"]);
-                               $datarray["uri-id"] = ItemURI::getIdByURI($datarray["uri"]);
-                               $datarray["extid"] = Protocol::DFRN;
-                               $urlpart = parse_url($datarray2['author-link']);
-                               $datarray["app"] = $urlpart["host"];
-                               if (!empty($old_uri_id)) {
-                                       Post\Media::copy($old_uri_id, $datarray["uri-id"]);
-                               }
 
-                               unset($datarray["parent-uri"]);
-                               unset($datarray["thr-parent"]);
-                       } else {
-                               $datarray['private'] = self::PUBLIC;
-                       }
+               $self = DBA::selectFirst('contact', ['id', 'name', 'url', 'thumb'],
+                                       ['uid' => $contact['uid'], 'self' => true]);
+               if (!DBA::isResult($self)) {
+                       Logger::error('Self contact not found', ['uid' => $contact['uid']]);
+                       return false;
                }
 
+               $datarray['contact-id'] = $self['id'];
+
+               $datarray['author-name']   = $datarray['owner-name']   = $self['name'];
+               $datarray['author-link']   = $datarray['owner-link']   = $self['url'];
+               $datarray['author-avatar'] = $datarray['owner-avatar'] = $self['thumb'];
+
+               unset($datarray['edited']);
+
+               unset($datarray['network']);
+               unset($datarray['owner-id']);
+               unset($datarray['author-id']);
+
                if ($contact['network'] != Protocol::FEED) {
+                       $old_uri_id = $datarray['uri-id'] ?? 0;
+                       $datarray['guid'] = System::createUUID();
+                       unset($datarray['plink']);
+                       $datarray['uri'] = self::newURI($datarray['guid']);
+                       $datarray['uri-id'] = ItemURI::getIdByURI($datarray['uri']);
+                       $datarray['extid'] = Protocol::DFRN;
+                       $urlpart = parse_url($datarray2['author-link']);
+                       $datarray['app'] = $urlpart['host'];
+                       if (!empty($old_uri_id)) {
+                               Post\Media::copy($old_uri_id, $datarray['uri-id']);
+                       }
+
+                       unset($datarray['parent-uri']);
+                       unset($datarray['thr-parent']);
+
                        // Store the original post
                        $result = self::insert($datarray2);
                        Logger::info('remote-self post original item', ['contact' => $contact['url'], 'result'=> $result, 'item' => $datarray2]);
                } else {
-                       Logger::info('No valid mirroring option', ['uid' => $contact['uid'], 'id' => $contact['id'], 'network' => $contact['network'], 'remote_self' => $contact['remote_self']]);
-                       return false;
+                       $datarray['private'] = self::PUBLIC;
+                       $datarray['app'] = 'Feed';
+                       $result = true;
                }
 
                return (bool)$result;
@@ -2991,6 +2991,7 @@ class Item
                $a = DI::app();
                Hook::callAll('prepare_body_init', $item);
 
+
                // In order to provide theme developers more possibilities, event items
                // are treated differently.
                if ($item['object-type'] === Activity\ObjectType::EVENT && isset($item['event-id'])) {
@@ -3049,6 +3050,7 @@ class Item
                $item['body'] = self::replaceVisualAttachments($attachments, $item['body'] ?? '');
 
                $item['body'] = preg_replace("/\s*\[attachment .*?\].*?\[\/attachment\]\s*/ism", "\n", $item['body']);
+
                self::putInCache($item);
                $item['body'] = $body;
                $s = $item["rendered-html"];
@@ -3082,7 +3084,10 @@ class Item
                        'filter_reasons' => $filter_reasons
                ];
                Hook::callAll('prepare_body', $hook_data);
-               $s = $hook_data['html'];
+               // Remove old images
+               $hook_data['html'] = preg_replace('|(<a.*><img.*>.*</a>)|', '', $hook_data['html']);
+               $grid = self::make_image_grid($hook_data);
+               $s = $hook_data['html'] . $grid;
                unset($hook_data);
 
                if (!$attach) {
@@ -3126,6 +3131,44 @@ class Item
                return $hook_data['html'];
        }
 
+       private function make_image_grid(array &$data)
+       {
+               $item = $data['item'];
+               if ($item['has-media']) {
+                       $attachments = Post\Media::splitAttachments($item['uri-id'], [], $item['has-media'] ?? false);
+                       if (count($attachments['visual']) > 1) {
+                               $img_tags_fc = array();
+                               $img_tags_sc = array();
+                               $count = 0;
+                               foreach ($attachments['visual'] as $attachment) {
+                                       $src_url = Post\Media::getUrlForId($attachment['id']);
+                                       $preview_url = Post\Media::getPreviewUrlForId($attachment['id'], ($attachment['width'] > $attachment['height']) ? Proxy::SIZE_MEDIUM : Proxy::SIZE_LARGE);
+                                       $img_tag = array(
+                                               '$image' => [
+                                                       'src' => $src_url,
+                                                       'preview' => $preview_url,
+                                                       'attachment' => $attachment,
+                                       ]);
+                                       if ($count % 2 == 0) {
+                                               $img_tags_fc[] = $img_tag;
+                                       } else {
+                                               $img_tags_sc[] = $img_tag;
+                                       }
+                                       ++$count;
+                               }
+
+                               $img_grid = Renderer::replaceMacros(Renderer::getMarkupTemplate('content/image_grid.tpl'), [
+                                       'columns' => [
+                                               'fc' => $img_tags_fc,
+                                               'sc' => $img_tags_sc,
+                                       ],
+                               ]);
+                               return $img_grid;
+                       }
+               }
+
+       }
+
        /**
         * Check if the body contains a link
         *