]> git.mxchange.org Git - friendica.git/blobdiff - mod/item.php
Merge pull request #10300 from annando/issue-10264
[friendica.git] / mod / item.php
index 8d329f475b569ab8825d67582de3eb8ea82bea3a..71793f14dc44a6bdc389b6fd1d052d921811a18a 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2020, Friendica
+ * @copyright Copyright (C) 2010-2021, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
@@ -45,8 +45,8 @@ use Friendica\Model\Contact;
 use Friendica\Model\Conversation;
 use Friendica\Model\FileTag;
 use Friendica\Model\Item;
-use Friendica\Model\Notify;
-use Friendica\Model\Notify\Type;
+use Friendica\Model\ItemURI;
+use Friendica\Model\Notification;
 use Friendica\Model\Photo;
 use Friendica\Model\Post;
 use Friendica\Model\Tag;
@@ -55,8 +55,9 @@ use Friendica\Network\HTTPException;
 use Friendica\Object\EMail\ItemCCEMail;
 use Friendica\Protocol\Activity;
 use Friendica\Protocol\Diaspora;
-use Friendica\Util\DateTimeFormat;
 use Friendica\Security\Security;
+use Friendica\Util\DateTimeFormat;
+use Friendica\Util\ParseUrl;
 use Friendica\Worker\Delivery;
 
 function item_post(App $a) {
@@ -114,9 +115,9 @@ function item_post(App $a) {
 
        if ($parent_item_id || $thr_parent_uri) {
                if ($parent_item_id) {
-                       $parent_item = Post::selectFirst([], ['id' => $parent_item_id]);
+                       $parent_item = Post::selectFirst(Item::ITEM_FIELDLIST, ['id' => $parent_item_id]);
                } elseif ($thr_parent_uri) {
-                       $parent_item = Post::selectFirst([], ['uri' => $thr_parent_uri, 'uid' => $profile_uid]);
+                       $parent_item = Post::selectFirst(Item::ITEM_FIELDLIST, ['uri' => $thr_parent_uri, 'uid' => $profile_uid]);
                }
 
                // if this isn't the top-level parent of the conversation, find it
@@ -126,7 +127,7 @@ function item_post(App $a) {
                        $toplevel_item = $parent_item;
 
                        if ($parent_item['gravity'] != GRAVITY_PARENT) {
-                               $toplevel_item = Post::selectFirst([], ['id' => $toplevel_item['parent']]);
+                               $toplevel_item = Post::selectFirst(Item::ITEM_FIELDLIST, ['id' => $toplevel_item['parent']]);
                        }
                }
 
@@ -144,7 +145,7 @@ function item_post(App $a) {
                        $stored = Item::storeForUserByUriId($toplevel_item['uri-id'], local_user());
                        Logger::info('Public item stored for user', ['uri-id' => $toplevel_item['uri-id'], 'uid' => $uid, 'stored' => $stored]);
                        if ($stored) {
-                               $toplevel_item = Post::selectFirst([], ['id' => $stored]);
+                               $toplevel_item = Post::selectFirst(Item::ITEM_FIELDLIST, ['id' => $stored]);
                        }
                }
 
@@ -218,12 +219,16 @@ function item_post(App $a) {
 
                $attachment_img_width  = $_REQUEST['attachment_img_width'] ??  0;
                $attachment_img_height = $_REQUEST['attachment_img_height'] ?? 0;
-               $attachment = [
-                       'type'   => $attachment_type,
-                       'title'  => $attachment_title,
-                       'text'   => $attachment_text,
-                       'url'    => $attachment_url,
-               ];
+
+               // Fetch the basic attachment data
+               $attachment = ParseUrl::getSiteinfoCached($attachment_url);
+               unset($attachment['keywords']);
+
+               // Overwrite the basic data with possible changes from the frontend
+               $attachment['type'] = $attachment_type;
+               $attachment['title'] = $attachment_title;
+               $attachment['text'] = $attachment_text;
+               $attachment['url'] = $attachment_url;
 
                if (!empty($attachment_img_src)) {
                        $attachment['images'] = [
@@ -233,6 +238,8 @@ function item_post(App $a) {
                                        'height' => $attachment_img_height
                                ]
                        ];
+               } else {
+                       unset($attachment['images']);
                }
 
                $att_bbcode = "\n" . PageInfo::getFooterFromData($attachment);
@@ -463,7 +470,7 @@ function item_post(App $a) {
        /*
         * Next link in any attachment references we find in the post.
         */
-       $match = false;
+       $match = [];
 
        /// @todo these lines should be moved to Model/Attach (Once it exists)
        if (!$preview && preg_match_all("/\[attachment\](.*?)\[\/attachment\]/", $body, $match)) {
@@ -490,6 +497,7 @@ function item_post(App $a) {
        // embedded bookmark or attachment in post? set bookmark flag
 
        $data = BBCode::getAttachmentData($body);
+       $match = [];
        if ((preg_match_all("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism", $body, $match, PREG_SET_ORDER) || isset($data["type"]))
                && ($posttype != Item::PT_PERSONAL_NOTE)) {
                $posttype = Item::PT_PAGE;
@@ -516,7 +524,7 @@ function item_post(App $a) {
        }
 
        $attachments = '';
-       $match = false;
+       $match = [];
 
        if (preg_match_all('/(\[attachment\]([0-9]+)\[\/attachment\])/',$body,$match)) {
                foreach ($match[2] as $mtch) {
@@ -604,9 +612,11 @@ function item_post(App $a) {
 
        $datarray['postopts']      = $postopts;
        $datarray['origin']        = $origin;
-       $datarray['moderated']     = false;
        $datarray['object']        = $object;
 
+       $datarray['uri-id']        = ItemURI::getIdByURI($datarray['uri']);
+       $datarray['attachments']   = $_REQUEST['attachments'] ?? [];
+
        /*
         * These fields are for the convenience of addons...
         * 'self' if true indicates the owner is posting on their own wall
@@ -652,7 +662,6 @@ function item_post(App $a) {
                // doesn't have an ID.
                $datarray["id"] = -1;
                $datarray["uri-id"] = -1;
-               $datarray["item_id"] = -1;
                $datarray["author-network"] = Protocol::DFRN;
 
                $o = conversation($a, [array_merge($contact_record, $datarray)], 'search', false, true);
@@ -743,8 +752,8 @@ function item_post(App $a) {
        if ($contact_record != $author) {
                if ($toplevel_item_id) {
                        notification([
-                               'type'  => Type::COMMENT,
-                               'otype' => Notify\ObjectType::ITEM,
+                               'type'  => Notification\Type::COMMENT,
+                               'otype' => Notification\ObjectType::ITEM,
                                'verb'  => Activity::POST,
                                'uid'   => $profile_uid,
                                'cid'   => $datarray['author-id'],
@@ -753,8 +762,8 @@ function item_post(App $a) {
                        ]);
                } elseif (empty($forum_contact)) {
                        notification([
-                               'type'  => Type::WALL,
-                               'otype' => Notify\ObjectType::ITEM,
+                               'type'  => Notification\Type::WALL,
+                               'otype' => Notification\ObjectType::ITEM,
                                'verb'  => Activity::POST,
                                'uid'   => $profile_uid,
                                'cid'   => $datarray['author-id'],
@@ -783,7 +792,7 @@ function item_post(App $a) {
        // When we are doing some forum posting via ! we have to start the notifier manually.
        // These kind of posts don't initiate the notifier call in the item class.
        if ($only_to_forum) {
-               Worker::add(['priority' => PRIORITY_HIGH, 'dont_fork' => false], "Notifier", Delivery::POST, $post_id);
+               Worker::add(['priority' => PRIORITY_HIGH, 'dont_fork' => false], "Notifier", Delivery::POST, (int)$datarray['uri-id'], (int)$datarray['uid']);
        }
 
        Logger::info('post_complete');
@@ -849,12 +858,7 @@ function item_content(App $a)
                                throw new HTTPException\NotFoundException('Item not found');
                        }
 
-                       $cdata = Contact::getPublicAndUserContacID($item['author-id'], local_user());
-                       if (empty($cdata['user'])) {
-                               throw new HTTPException\NotFoundException('Contact not found');
-                       }
-
-                       Contact::block($cdata['user'], DI::l10n()->t('Blocked on item with guid %s', $item['guid']));
+                       Contact\User::setBlocked($item['author-id'], local_user(), true);
 
                        if (DI::mode()->isAjax()) {
                                // ajax return: [<item id>, 0 (no perm) | <owner id>]