]> git.mxchange.org Git - friendica.git/blobdiff - mod/item.php
Create /profile/{nickname}/photos route
[friendica.git] / mod / item.php
index 56384b22b972c1f2b0112c556734bb8e7d94d230..f1224b1f5729ccb7b66b75b909c3112f0b4308ba 100644 (file)
@@ -34,8 +34,8 @@ use Friendica\Content\Text\BBCode;
 use Friendica\Core\Hook;
 use Friendica\Core\Logger;
 use Friendica\Core\Protocol;
-use Friendica\Core\Session;
 use Friendica\Core\System;
+use Friendica\Core\Worker;
 use Friendica\Database\DBA;
 use Friendica\DI;
 use Friendica\Model\Attach;
@@ -57,11 +57,11 @@ use Friendica\Util\DateTimeFormat;
 use Friendica\Util\ParseUrl;
 
 function item_post(App $a) {
-       if (!Session::isAuthenticated()) {
+       if (!DI::userSession()->isAuthenticated()) {
                throw new HTTPException\ForbiddenException();
        }
 
-       $uid = local_user();
+       $uid = DI::userSession()->getLocalUserId();
 
        if (!empty($_REQUEST['dropitems'])) {
                $arr_drop = explode(',', $_REQUEST['dropitems']);
@@ -106,7 +106,7 @@ function item_post(App $a) {
        $toplevel_user_id = null;
 
        $objecttype = null;
-       $profile_uid = ($_REQUEST['profile_uid'] ?? 0) ?: local_user();
+       $profile_uid = ($_REQUEST['profile_uid'] ?? 0) ?: DI::userSession()->getLocalUserId();
        $posttype = ($_REQUEST['post_type'] ?? '') ?: Item::PT_ARTICLE;
 
        if ($parent_item_id || $thr_parent_uri) {
@@ -128,7 +128,7 @@ function item_post(App $a) {
                }
 
                if (!DBA::isResult($toplevel_item)) {
-                       notice(DI::l10n()->t('Unable to locate original post.'));
+                       DI::sysmsg()->addNotice(DI::l10n()->t('Unable to locate original post.'));
                        if ($return_path) {
                                DI::baseUrl()->redirect($return_path);
                        }
@@ -138,7 +138,7 @@ function item_post(App $a) {
                // When commenting on a public post then store the post for the current user
                // This enables interaction like starring and saving into folders
                if ($toplevel_item['uid'] == 0) {
-                       $stored = Item::storeForUserByUriId($toplevel_item['uri-id'], local_user(), ['post-reason' => Item::PR_ACTIVITY]);
+                       $stored = Item::storeForUserByUriId($toplevel_item['uri-id'], DI::userSession()->getLocalUserId(), ['post-reason' => Item::PR_ACTIVITY]);
                        Logger::info('Public item stored for user', ['uri-id' => $toplevel_item['uri-id'], 'uid' => $uid, 'stored' => $stored]);
                        if ($stored) {
                                $toplevel_item = Post::selectFirst(Item::ITEM_FIELDLIST, ['id' => $stored]);
@@ -168,17 +168,17 @@ function item_post(App $a) {
        }
 
        // Ensure that the user id in a thread always stay the same
-       if (!is_null($toplevel_user_id) && in_array($toplevel_user_id, [local_user(), 0])) {
+       if (!is_null($toplevel_user_id) && in_array($toplevel_user_id, [DI::userSession()->getLocalUserId(), 0])) {
                $profile_uid = $toplevel_user_id;
        }
 
        // Allow commenting if it is an answer to a public post
-       $allow_comment = local_user() && $toplevel_item_id && in_array($toplevel_item['private'], [Item::PUBLIC, Item::UNLISTED]) && in_array($toplevel_item['network'], Protocol::FEDERATED);
+       $allow_comment = DI::userSession()->getLocalUserId() && $toplevel_item_id && in_array($toplevel_item['private'], [Item::PUBLIC, Item::UNLISTED]) && in_array($toplevel_item['network'], Protocol::FEDERATED);
 
        // Now check that valid personal details have been provided
        if (!Security::canWriteToUserWall($profile_uid) && !$allow_comment) {
-               Logger::warning('Permission denied.', ['local' => local_user(), 'profile_uid' => $profile_uid, 'toplevel_item_id' => $toplevel_item_id, 'network' => $toplevel_item['network']]);
-               notice(DI::l10n()->t('Permission denied.'));
+               Logger::warning('Permission denied.', ['local' => DI::userSession()->getLocalUserId(), 'profile_uid' => $profile_uid, 'toplevel_item_id' => $toplevel_item_id, 'network' => $toplevel_item['network']]);
+               DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
                if ($return_path) {
                        DI::baseUrl()->redirect($return_path);
                }
@@ -323,9 +323,9 @@ function item_post(App $a) {
                $pubmail_enabled = ($_REQUEST['pubmail_enable'] ?? false) && !$private;
 
                // if using the API, we won't see pubmail_enable - figure out if it should be set
-               if ($api_source && $profile_uid && $profile_uid == local_user() && !$private) {
+               if ($api_source && $profile_uid && $profile_uid == DI::userSession()->getLocalUserId() && !$private) {
                        if (function_exists('imap_open') && !DI::config()->get('system', 'imap_disabled')) {
-                               $pubmail_enabled = DBA::exists('mailacct', ["`uid` = ? AND `server` != ? AND `pubmail`", local_user(), '']);
+                               $pubmail_enabled = DBA::exists('mailacct', ["`uid` = ? AND `server` != ? AND `pubmail`", DI::userSession()->getLocalUserId(), '']);
                        }
                }
 
@@ -334,7 +334,7 @@ function item_post(App $a) {
                                System::jsonExit(['preview' => '']);
                        }
 
-                       notice(DI::l10n()->t('Empty post discarded.'));
+                       DI::sysmsg()->addNotice(DI::l10n()->t('Empty post discarded.'));
                        if ($return_path) {
                                DI::baseUrl()->redirect($return_path);
                        }
@@ -362,11 +362,11 @@ function item_post(App $a) {
        $self   = false;
        $contact_id = 0;
 
-       if (local_user() && ((local_user() == $profile_uid) || $allow_comment)) {
+       if (DI::userSession()->getLocalUserId() && ((DI::userSession()->getLocalUserId() == $profile_uid) || $allow_comment)) {
                $self = true;
-               $author = DBA::selectFirst('contact', [], ['uid' => local_user(), 'self' => true]);
-       } elseif (!empty(Session::getRemoteContactID($profile_uid))) {
-               $author = DBA::selectFirst('contact', [], ['id' => Session::getRemoteContactID($profile_uid)]);
+               $author = DBA::selectFirst('contact', [], ['uid' => DI::userSession()->getLocalUserId(), 'self' => true]);
+       } elseif (!empty(DI::userSession()->getRemoteContactID($profile_uid))) {
+               $author = DBA::selectFirst('contact', [], ['id' => DI::userSession()->getRemoteContactID($profile_uid)]);
        }
 
        if (DBA::isResult($author)) {
@@ -374,7 +374,7 @@ function item_post(App $a) {
        }
 
        // get contact info for owner
-       if ($profile_uid == local_user() || $allow_comment) {
+       if ($profile_uid == DI::userSession()->getLocalUserId() || $allow_comment) {
                $contact_record = $author ?: [];
        } else {
                $contact_record = DBA::selectFirst('contact', [], ['uid' => $profile_uid, 'self' => true]) ?: [];
@@ -384,7 +384,7 @@ function item_post(App $a) {
        if ($posttype != Item::PT_PERSONAL_NOTE) {
                // Look for any tags and linkify them
                $item = [
-                       'uid'       => local_user() ? local_user() : $profile_uid,
+                       'uid'       => DI::userSession()->getLocalUserId() ? DI::userSession()->getLocalUserId() : $profile_uid,
                        'gravity'   => $toplevel_item_id ? Item::GRAVITY_COMMENT : Item::GRAVITY_PARENT,
                        'network'   => $network,
                        'body'      => $body,
@@ -611,7 +611,8 @@ function item_post(App $a) {
                $datarray['author-uri-id'] = ItemURI::getIdByURI($datarray['author-link']);
                $datarray['owner-updated'] = '';
                $datarray['has-media'] = false;
-               $datarray['body'] = Item::improveSharedDataInBody($datarray);
+               $datarray['quote-uri-id'] = Item::getQuoteUriId($datarray['body'], $datarray['uid']);
+               $datarray['body'] = BBCode::removeSharedData($datarray['body']);
 
                $o = DI::conversation()->create([array_merge($contact_record, $datarray)], 'search', false, true);
 
@@ -632,7 +633,7 @@ function item_post(App $a) {
                        unset($datarray['self']);
                        unset($datarray['api_source']);
 
-                       Post\Delayed::add($datarray['uri'], $datarray, PRIORITY_HIGH, Post\Delayed::PREPARED_NO_HOOK, $scheduled_at);
+                       Post\Delayed::add($datarray['uri'], $datarray, Worker::PRIORITY_HIGH, Post\Delayed::PREPARED_NO_HOOK, $scheduled_at);
                        item_post_return(DI::baseUrl(), $api_source, $return_path);
                }
        }
@@ -652,7 +653,12 @@ function item_post(App $a) {
        }
 
        $datarray['uri-id'] = ItemURI::getIdByURI($datarray['uri']);
-       $datarray['body']   = Item::improveSharedDataInBody($datarray);
+
+       $quote_uri_id = Item::getQuoteUriId($datarray['body'], $datarray['uid']);
+       if (!empty($quote_uri_id)) {
+               $datarray['quote-uri-id'] = $quote_uri_id;
+               $datarray['body']         = BBCode::removeSharedData($datarray['body']);
+       }
 
        if ($orig_post) {
                $fields = [
@@ -681,7 +687,7 @@ function item_post(App $a) {
        $post_id = Item::insert($datarray);
 
        if (!$post_id) {
-               notice(DI::l10n()->t('Item wasn\'t stored.'));
+               DI::sysmsg()->addNotice(DI::l10n()->t('Item wasn\'t stored.'));
                if ($return_path) {
                        DI::baseUrl()->redirect($return_path);
                }
@@ -733,7 +739,7 @@ function item_post(App $a) {
 
        Hook::callAll('post_local_end', $datarray);
 
-       if (strlen($emailcc) && $profile_uid == local_user()) {
+       if (strlen($emailcc) && $profile_uid == DI::userSession()->getLocalUserId()) {
                $recipients = explode(',', $emailcc);
                if (count($recipients)) {
                        foreach ($recipients as $recipient) {
@@ -779,7 +785,7 @@ function item_post_return($baseurl, $api_source, $return_path)
 
 function item_content(App $a)
 {
-       if (!Session::isAuthenticated()) {
+       if (!DI::userSession()->isAuthenticated()) {
                throw new HTTPException\UnauthorizedException();
        }
 
@@ -793,9 +799,9 @@ function item_content(App $a)
        switch ($args->get(1)) {
                case 'drop':
                        if (DI::mode()->isAjax()) {
-                               Item::deleteForUser(['id' => $args->get(2)], local_user());
+                               Item::deleteForUser(['id' => $args->get(2)], DI::userSession()->getLocalUserId());
                                // ajax return: [<item id>, 0 (no perm) | <owner id>]
-                               System::jsonExit([intval($args->get(2)), local_user()]);
+                               System::jsonExit([intval($args->get(2)), DI::userSession()->getLocalUserId()]);
                        } else {
                                if (!empty($args->get(3))) {
                                        $o = drop_item($args->get(2), $args->get(3));
@@ -806,16 +812,16 @@ function item_content(App $a)
                        break;
 
                case 'block':
-                       $item = Post::selectFirstForUser(local_user(), ['guid', 'author-id', 'parent', 'gravity'], ['id' => $args->get(2)]);
+                       $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::setBlocked($item['author-id'], local_user(), true);
+                       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)), local_user()]);
+                               System::jsonExit([intval($args->get(2)), DI::userSession()->getLocalUserId()]);
                        } else {
                                item_redirect_after_action($item, $args->get(3));
                        }
@@ -834,10 +840,10 @@ function item_content(App $a)
 function drop_item(int $id, string $return = ''): string
 {
        // Locate item to be deleted
-       $item = Post::selectFirstForUser(local_user(), ['id', 'uid', 'guid', 'contact-id', 'deleted', 'gravity', 'parent'], ['id' => $id]);
+       $item = Post::selectFirstForUser(DI::userSession()->getLocalUserId(), ['id', 'uid', 'guid', 'contact-id', 'deleted', 'gravity', 'parent'], ['id' => $id]);
 
        if (!DBA::isResult($item)) {
-               notice(DI::l10n()->t('Item not found.'));
+               DI::sysmsg()->addNotice(DI::l10n()->t('Item not found.'));
                DI::baseUrl()->redirect('network');
                //NOTREACHED
        }
@@ -849,19 +855,19 @@ function drop_item(int $id, string $return = ''): string
        $contact_id = 0;
 
        // check if logged in user is either the author or owner of this item
-       if (Session::getRemoteContactID($item['uid']) == $item['contact-id']) {
+       if (DI::userSession()->getRemoteContactID($item['uid']) == $item['contact-id']) {
                $contact_id = $item['contact-id'];
        }
 
-       if ((local_user() == $item['uid']) || $contact_id) {
+       if ((DI::userSession()->getLocalUserId() == $item['uid']) || $contact_id) {
                // delete the item
-               Item::deleteForUser(['id' => $item['id']], local_user());
+               Item::deleteForUser(['id' => $item['id']], DI::userSession()->getLocalUserId());
 
                item_redirect_after_action($item, $return);
                //NOTREACHED
        } else {
-               Logger::warning('Permission denied.', ['local' => local_user(), 'uid' => $item['uid'], 'cid' => $contact_id]);
-               notice(DI::l10n()->t('Permission denied.'));
+               Logger::warning('Permission denied.', ['local' => DI::userSession()->getLocalUserId(), 'uid' => $item['uid'], 'cid' => $contact_id]);
+               DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
                DI::baseUrl()->redirect('display/' . $item['guid']);
                //NOTREACHED
        }
@@ -879,7 +885,7 @@ function item_redirect_after_action(array $item, string $returnUrlHex)
        // Check if delete a comment
        if ($item['gravity'] == Item::GRAVITY_COMMENT) {
                if (!empty($item['parent'])) {
-                       $parentitem = Post::selectFirstForUser(local_user(), ['guid'], ['id' => $item['parent']]);
+                       $parentitem = Post::selectFirstForUser(DI::userSession()->getLocalUserId(), ['guid'], ['id' => $item['parent']]);
                }
 
                // Return to parent guid