]> git.mxchange.org Git - friendica.git/blobdiff - mod/item.php
Mode depending control for the behaviour with blocked contacts
[friendica.git] / mod / item.php
index 9a9b5e8db3bf737f563a5b894ca782a62aaf8f74..13ffe756833b6c391e52784a8f7af6b075535cf5 100644 (file)
@@ -29,6 +29,7 @@
  */
 
 use Friendica\App;
+use Friendica\Content\Conversation;
 use Friendica\Content\Text\BBCode;
 use Friendica\Core\Hook;
 use Friendica\Core\Logger;
@@ -49,7 +50,7 @@ use Friendica\Util\DateTimeFormat;
 function item_post(App $a) {
        $uid = DI::userSession()->getLocalUserId();
 
-       if (!DI::userSession()->isAuthenticated() || !$uid) {
+       if (!$uid) {
                throw new HTTPException\ForbiddenException();
        }
 
@@ -68,11 +69,11 @@ function item_post(App $a) {
         * after it's been previewed
         */
        if (!$preview && !empty($_REQUEST['post_id_random'])) {
-               if (!empty($_SESSION['post-random']) && $_SESSION['post-random'] == $_REQUEST['post_id_random']) {
+               if (DI::session()->get('post-random') == $_REQUEST['post_id_random']) {
                        Logger::warning('duplicate post');
                        item_post_return(DI::baseUrl(), $return_path);
                } else {
-                       $_SESSION['post-random'] = $_REQUEST['post_id_random'];
+                       DI::session()->set('post-random', $_REQUEST['post_id_random']);
                }
        }
 
@@ -90,16 +91,15 @@ function item_drop(int $uid, string $dropitems)
                Item::deleteForUser(['id' => $item], $uid);
        }
 
-       $json = ['success' => 1];
-       System::jsonExit($json);
+       System::jsonExit(['success' => 1]);
 }
 
 function item_edit(int $uid, array $request, bool $preview, string $return_path)
 {
        $post = Post::selectFirst(Item::ITEM_FIELDLIST, ['id' => $request['post_id'], 'uid' => $uid]);
        if (!DBA::isResult($post)) {
-               DI::sysmsg()->addNotice(DI::l10n()->t('Unable to locate original post.'));
                if ($return_path) {
+                       DI::sysmsg()->addNotice(DI::l10n()->t('Unable to locate original post.'));
                        DI::baseUrl()->redirect($return_path);
                }
                throw new HTTPException\NotFoundException(DI::l10n()->t('Unable to locate original post.'));
@@ -141,9 +141,6 @@ function item_edit(int $uid, array $request, bool $preview, string $return_path)
 
 function item_insert(int $uid, array $request, bool $preview, string $return_path)
 {
-       $emailcc   = trim($request['emailcc']  ?? '');
-       $parent_id = intval($request['parent'] ?? 0);
-
        $post = ['uid' => $uid];
        $post = DI::contentItem()->initializePost($post);
 
@@ -158,9 +155,9 @@ function item_insert(int $uid, array $request, bool $preview, string $return_pat
        $post['postopts']  = '';
        $post['file']      = '';
 
-       if ($parent_id) {
-               $parent_item = Post::selectFirst(Item::ITEM_FIELDLIST, ['id' => $parent_id]);
-               if (DBA::isResult($parent_item)) {
+       if (!empty($request['parent'])) {
+               $parent_item = Post::selectFirst(Item::ITEM_FIELDLIST, ['id' => $request['parent']]);
+               if ($parent_item) {
                        // if this isn't the top-level parent of the conversation, find it
                        if ($parent_item['gravity'] != Item::GRAVITY_PARENT) {
                                $toplevel_item = Post::selectFirst(Item::ITEM_FIELDLIST, ['id' => $parent_item['parent']]);
@@ -170,8 +167,8 @@ function item_insert(int $uid, array $request, bool $preview, string $return_pat
                }
 
                if (empty($toplevel_item)) {
-                       DI::sysmsg()->addNotice(DI::l10n()->t('Unable to locate original post.'));
                        if ($return_path) {
+                               DI::sysmsg()->addNotice(DI::l10n()->t('Unable to locate original post.'));
                                DI::baseUrl()->redirect($return_path);
                        }
                        throw new HTTPException\NotFoundException(DI::l10n()->t('Unable to locate original post.'));
@@ -184,11 +181,13 @@ function item_insert(int $uid, array $request, bool $preview, string $return_pat
                        Logger::info('Public item stored for user', ['uri-id' => $toplevel_item['uri-id'], 'uid' => $post['uid'], 'stored' => $stored]);
                }
 
+               $post['parent']      = $toplevel_item['id'];
                $post['gravity']     = Item::GRAVITY_COMMENT;
                $post['thr-parent']  = $parent_item['uri'];
                $post['wall']        = $toplevel_item['wall'];
        } else {
                $parent_item         = [];
+               $post['parent']      = 0;
                $post['gravity']     = Item::GRAVITY_PARENT;
                $post['thr-parent']  = $post['uri'];
        }
@@ -201,8 +200,8 @@ function item_insert(int $uid, array $request, bool $preview, string $return_pat
 
        $post_id = Item::insert($post);
        if (!$post_id) {
-               DI::sysmsg()->addNotice(DI::l10n()->t('Item wasn\'t stored.'));
                if ($return_path) {
+                       DI::sysmsg()->addNotice(DI::l10n()->t('Item wasn\'t stored.'));
                        DI::baseUrl()->redirect($return_path);
                }
 
@@ -210,7 +209,7 @@ function item_insert(int $uid, array $request, bool $preview, string $return_pat
        }
 
        $post = Post::selectFirst(Item::ITEM_FIELDLIST, ['id' => $post_id]);
-       if (!DBA::isResult($post)) {
+       if (!$post) {
                Logger::error('Item couldn\'t be fetched.', ['post_id' => $post_id]);
                if ($return_path) {
                        DI::baseUrl()->redirect($return_path);
@@ -219,7 +218,7 @@ function item_insert(int $uid, array $request, bool $preview, string $return_pat
                throw new HTTPException\InternalServerErrorException(DI::l10n()->t('Item couldn\'t be fetched.'));
        }
 
-       $recipients = explode(',', $emailcc);
+       $recipients = explode(',', $request['emailcc'] ?? '');
 
        DI::contentItem()->postProcessPost($post, $recipients);
 
@@ -241,14 +240,6 @@ function item_process(array $post, array $request, bool $preview, string $return
 
        $post = DI::contentItem()->addCategories($post, $request['category'] ?? '');
 
-       if (!$preview) {
-               if (Photo::setPermissionFromBody($post['body'], $post['uid'], $post['contact-id'], $post['allow_cid'], $post['allow_gid'], $post['deny_cid'], $post['deny_gid'])) {
-                       $post['object-type'] = Activity\ObjectType::IMAGE;
-               }
-
-               $post = DI::contentItem()->moveAttachmentsFromBodyToAttach($post);
-       }
-
        // Add the attachment to the body.
        if (!empty($request['has_attachment'])) {
                $post['body'] .= DI::contentItem()->storeAttachmentFromRequest($request);
@@ -261,8 +252,8 @@ function item_process(array $post, array $request, bool $preview, string $return
                        System::jsonExit(['preview' => '']);
                }
 
-               DI::sysmsg()->addNotice(DI::l10n()->t('Empty post discarded.'));
                if ($return_path) {
+                       DI::sysmsg()->addNotice(DI::l10n()->t('Empty post discarded.'));
                        DI::baseUrl()->redirect($return_path);
                }
 
@@ -284,7 +275,7 @@ function item_process(array $post, array $request, bool $preview, string $return
                $post['body']           = BBCode::removeSharedData(Item::setHashtags($post['body']));
                $post['writable']       = true;
 
-               $o = DI::conversation()->create([$post], 'search', false, true);
+               $o = DI::conversation()->create([$post], Conversation::MODE_SEARCH, false, true);
 
                System::jsonExit(['preview' => $o]);
        }
@@ -378,6 +369,22 @@ function item_content(App $a)
 
                        Contact\User::setBlocked($item['author-id'], DI::userSession()->getLocalUserId(), true);
 
+                       if (DI::mode()->isAjax()) {
+                               // ajax return: [<item id>, 0 (no perm) | <owner id>]
+                               System::jsonExit([intval($args->get(2)), DI::userSession()->getLocalUserId()]);
+                       } else {
+                               item_redirect_after_action($item, $args->get(3));
+                       }
+                       break;
+
+               case 'ignore':
+                       $item = Post::selectFirstForUser(DI::userSession()->getLocalUserId(), ['guid', 'author-id', 'parent', 'gravity'], ['id' => $args->get(2)]);
+                       if (empty($item['author-id'])) {
+                               throw new HTTPException\NotFoundException('Item not found');
+                       }
+
+                       Contact\User::setIgnored($item['author-id'], DI::userSession()->getLocalUserId(), true);
+
                        if (DI::mode()->isAjax()) {
                                // ajax return: [<item id>, 0 (no perm) | <owner id>]
                                System::jsonExit([intval($args->get(2)), DI::userSession()->getLocalUserId()]);