]> git.mxchange.org Git - friendica.git/blobdiff - mod/follow.php
Issue 8371: Use correct user id for photo upload
[friendica.git] / mod / follow.php
index dce6798b3c305c2288599a7f42ef5b275cf14da8..58419dfd3ba54836f144ae3b3ff2d3148df98c50 100644 (file)
@@ -1,16 +1,31 @@
 <?php
 /**
- * @file mod/follow.php
+ * @copyright Copyright (C) 2020, Friendica
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
  */
+
 use Friendica\App;
-use Friendica\Core\Config;
-use Friendica\Core\L10n;
 use Friendica\Core\Protocol;
 use Friendica\Core\Renderer;
-use Friendica\Core\System;
 use Friendica\DI;
 use Friendica\Model\Contact;
 use Friendica\Model\Profile;
+use Friendica\Model\Item;
 use Friendica\Network\Probe;
 use Friendica\Database\DBA;
 use Friendica\Util\Strings;
@@ -26,7 +41,7 @@ function follow_post(App $a)
        }
 
        $uid = local_user();
-       $url = Strings::escapeTags(trim($_REQUEST['url']));
+       $url = Probe::cleanURI($_REQUEST['url']);
        $return_path = 'follow?url=' . urlencode($url);
 
        // Makes the connection request for friendica contacts easier
@@ -36,6 +51,9 @@ function follow_post(App $a)
        $result = Contact::createFromProbe($uid, $url, true);
 
        if ($result['success'] == false) {
+               // Possibly it is a remote item and not an account
+               follow_remote_item($url);
+
                if ($result['message']) {
                        notice($result['message']);
                }
@@ -96,14 +114,14 @@ function follow_content(App $a)
 
        $protocol = Contact::getProtocol($ret['url'], $ret['network']);
 
-       if (($protocol == Protocol::DIASPORA) && !Config::get('system', 'diaspora_enabled')) {
+       if (($protocol == Protocol::DIASPORA) && !DI::config()->get('system', 'diaspora_enabled')) {
                notice(DI::l10n()->t("Diaspora support isn't enabled. Contact can't be added."));
                $submit = '';
                //$a->internalRedirect($_SESSION['return_path']);
                // NOTREACHED
        }
 
-       if (($protocol == Protocol::OSTATUS) && Config::get('system', 'ostatus_disabled')) {
+       if (($protocol == Protocol::OSTATUS) && DI::config()->get('system', 'ostatus_disabled')) {
                notice(DI::l10n()->t("OStatus support is disabled. Contact can't be added."));
                $submit = '';
                //$a->internalRedirect($_SESSION['return_path']);
@@ -111,6 +129,9 @@ function follow_content(App $a)
        }
 
        if ($protocol == Protocol::PHANTOM) {
+               // Possibly it is a remote item and not an account
+               follow_remote_item($url);
+
                notice(DI::l10n()->t("The network type couldn't be detected. Contact can't be added."));
                $submit = '';
                //$a->internalRedirect($_SESSION['return_path']);
@@ -159,36 +180,29 @@ function follow_content(App $a)
 
        $o = Renderer::replaceMacros($tpl, [
                '$header'        => DI::l10n()->t('Connect/Follow'),
-               '$desc'          => '',
                '$pls_answer'    => DI::l10n()->t('Please answer the following:'),
-               '$does_know_you' => ['knowyou', DI::l10n()->t('Does %s know you?', $ret['name']), false, '', [DI::l10n()->t('No'), DI::l10n()->t('Yes')]],
-               '$add_note'      => DI::l10n()->t('Add a personal note:'),
-               '$page_desc'     => '',
-               '$friendica'     => '',
-               '$statusnet'     => '',
-               '$diaspora'      => '',
-               '$diasnote'      => '',
                '$your_address'  => DI::l10n()->t('Your Identity Address:'),
-               '$invite_desc'   => '',
-               '$emailnet'      => '',
+               '$url_label'     => DI::l10n()->t('Profile URL'),
+               '$keywords_label'=> DI::l10n()->t('Tags:'),
                '$submit'        => $submit,
                '$cancel'        => DI::l10n()->t('Cancel'),
-               '$nickname'      => '',
+
+               '$request'       => $request,
                '$name'          => $ret['name'],
                '$url'           => $ret['url'],
                '$zrl'           => Profile::zrl($ret['url']),
-               '$url_label'     => DI::l10n()->t('Profile URL'),
                '$myaddr'        => $myaddr,
-               '$request'       => $request,
                '$keywords'      => $r[0]['keywords'],
-               '$keywords_label'=> DI::l10n()->t('Tags:')
+
+               '$does_know_you' => ['knowyou', DI::l10n()->t('%s knows you', $ret['name'])],
+               '$addnote_field' => ['dfrn-request-message', DI::l10n()->t('Add a personal note:')],
        ]);
 
        DI::page()['aside'] = '';
 
        $profiledata = Contact::getDetailsByURL($ret['url']);
        if ($profiledata) {
-               Profile::load($a, '', 0, $profiledata, false);
+               Profile::load($a, '', $profiledata, false);
        }
 
        if ($gcontact_id <> 0) {
@@ -202,3 +216,19 @@ function follow_content(App $a)
 
        return $o;
 }
+
+function follow_remote_item($url)
+{
+       $item_id = Item::fetchByLink($url, local_user());
+       if (!$item_id) {
+               // If the user-specific search failed, we search and probe a public post
+               $item_id = Item::fetchByLink($url);
+       }
+
+       if (!empty($item_id)) {
+               $item = Item::selectFirst(['guid'], ['id' => $item_id]);
+               if (DBA::isResult($item)) {
+                       DI::baseUrl()->redirect('display/' . $item['guid']);
+               }
+       }
+}