]> git.mxchange.org Git - friendica.git/blobdiff - mod/follow.php
Merge pull request #10166 from mexon/mat/refactor-user-arguments
[friendica.git] / mod / follow.php
index 141fa9fdba2c392ab6748c7d5c2b41cc4399f6ab..ed8e3aa5fee881bd470d308be901fa3adb613809 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
  *
@@ -28,6 +28,7 @@ use Friendica\Model\Profile;
 use Friendica\Model\Item;
 use Friendica\Network\Probe;
 use Friendica\Database\DBA;
+use Friendica\Model\Post;
 use Friendica\Model\User;
 use Friendica\Util\Strings;
 
@@ -42,30 +43,8 @@ function follow_post(App $a)
        }
 
        $url = Probe::cleanURI($_REQUEST['url']);
-       $return_path = 'follow?url=' . urlencode($url);
-
-       // Makes the connection request for friendica contacts easier
-       // This is just a precaution if maybe this page is called somewhere directly via POST
-       $_SESSION['fastlane'] = $url;
-
-       $result = Contact::createFromProbe($a->user, $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']);
-               }
-               DI::baseUrl()->redirect($return_path);
-       } elseif ($result['cid']) {
-               DI::baseUrl()->redirect('contact/' . $result['cid']);
-       }
-
-       info(DI::l10n()->t('The contact could not be added.'));
-
-       DI::baseUrl()->redirect($return_path);
-       // NOTREACHED
+       follow_process($a, $url);
 }
 
 function follow_content(App $a)
@@ -108,7 +87,13 @@ function follow_content(App $a)
        }
 
        $contact = Contact::getByURL($url, true);
+
+       // Possibly it is a mail contact
        if (empty($contact)) {
+               $contact = Probe::uri($url, Protocol::MAIL, $uid);
+       }
+
+       if (empty($contact) || ($contact['network'] == Protocol::PHANTOM)) {
                // Possibly it is a remote item and not an account
                follow_remote_item($url);
 
@@ -137,6 +122,10 @@ function follow_content(App $a)
                $request = $contact['request'];
                $tpl = Renderer::getMarkupTemplate('dfrn_request.tpl');
        } else {
+               if (!empty($_REQUEST['auto'])) {
+                       follow_process($a, $contact['url']);
+               }
+       
                $request = DI::baseUrl() . '/follow';
                $tpl = Renderer::getMarkupTemplate('auto_request.tpl');
        }
@@ -189,6 +178,33 @@ function follow_content(App $a)
        return $o;
 }
 
+function follow_process(App $a, string $url)
+{
+       $return_path = 'follow?url=' . urlencode($url);
+
+       // Makes the connection request for friendica contacts easier
+       // This is just a precaution if maybe this page is called somewhere directly via POST
+       $_SESSION['fastlane'] = $url;
+
+       $result = Contact::createFromProbe($a->user, $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']);
+               }
+               DI::baseUrl()->redirect($return_path);
+       } elseif ($result['cid']) {
+               DI::baseUrl()->redirect('contact/' . $result['cid']);
+       }
+
+       notice(DI::l10n()->t('The contact could not be added.'));
+
+       DI::baseUrl()->redirect($return_path);
+}
+
 function follow_remote_item($url)
 {
        $item_id = Item::fetchByLink($url, local_user());
@@ -198,7 +214,7 @@ function follow_remote_item($url)
        }
 
        if (!empty($item_id)) {
-               $item = Item::selectFirst(['guid'], ['id' => $item_id]);
+               $item = Post::selectFirst(['guid'], ['id' => $item_id]);
                if (DBA::isResult($item)) {
                        DI::baseUrl()->redirect('display/' . $item['guid']);
                }