$o = Renderer::replaceMacros($tpl, [
'$header' => DI::l10n()->t('Disconnect/Unfollow'),
- '$desc' => '',
- '$pls_answer' => '',
- '$does_know_you' => '',
- '$add_note' => '',
'$page_desc' => '',
- '$friendica' => '',
- '$statusnet' => '',
- '$diaspora' => '',
- '$diasnote' => '',
'$your_address' => DI::l10n()->t('Your Identity Address:'),
'$invite_desc' => '',
- '$emailnet' => '',
'$submit' => DI::l10n()->t('Submit Request'),
'$cancel' => DI::l10n()->t('Cancel'),
- '$nickname' => '',
- '$name' => $contact['name'],
'$url' => $contact['url'],
'$zrl' => Contact::magicLink($contact['url']),
'$url_label' => DI::l10n()->t('Profile URL'),
--- /dev/null
+<?php
+
+namespace Friendica\Module;
+
+use Friendica\BaseModule;
+use Friendica\DI;
+use Friendica\Core\Logger;
+use Friendica\Core\Protocol;
+use Friendica\Core\Renderer;
+use Friendica\Core\Search;
+use Friendica\Core\System;
+use Friendica\Model\Profile;
+use Friendica\Network\Probe;
+
+/**
+ * Remotely follow the account on this system by the provided account
+ */
+class RemoteFollow extends BaseModule
+{
+ public static function init(array $parameters = [])
+ {
+ if (empty($parameters['profile'])) {
+ return;
+ }
+
+ Profile::load(DI::app(), $parameters['profile']);
+ }
+
+ public static function post(array $parameters = [])
+ {
+ $a = DI::app();
+
+ if (empty($parameters['profile']) || !empty($_POST['cancel']) || empty($_POST['dfrn_url'])) {
+ DI::baseUrl()->redirect();
+ }
+
+ if (empty($a->profile['uid'])) {
+ notice(DI::l10n()->t('Profile unavailable.') . EOL);
+ return;
+ }
+
+ $url = trim($_POST['dfrn_url']);
+ if (!strlen($url)) {
+ notice(DI::l10n()->t("Invalid locator") . EOL);
+ return;
+ }
+
+ // Detect the network, make sure the provided URL is valid
+ $data = Probe::uri($url);
+ if ($data['network'] == Protocol::PHANTOM) {
+ notice(DI::l10n()->t("The provided profile link doesn't seem to be valid"));
+ return;
+ }
+
+ // Fetch link for the "remote follow" functionality of the given profile
+ $follow_link_template = Probe::getRemoteFollowLink($url);
+
+ if (empty($follow_link_template)) {
+ notice(DI::l10n()->t("Remote subscription can't be done for your network. Please subscribe directly on your system."));
+ return;
+ }
+
+ Logger::notice('Remote request', ['url' => $url, 'follow' => $a->profile['url'], 'remote' => $follow_link_template]);
+
+ // Substitute our user's feed URL into $follow_link_template
+ // Send the subscriber home to subscribe
+ // Diaspora needs the uri in the format user@domain.tld
+ if ($data['network'] == Protocol::DIASPORA) {
+ $uri = urlencode($a->profile['addr']);
+ } else {
+ $uri = urlencode($a->profile['url']);
+ }
+
+ $follow_link = str_replace('{uri}', $uri, $follow_link_template);
+ System::externalRedirect($follow_link);
+ }
+
+ public static function content(array $parameters = [])
+ {
+ $a = DI::app();
+
+ if (empty($parameters['profile']) || empty($a->profile)) {
+ return '';
+ }
+
+ $target_addr = $a->profile['addr'];
+ $target_url = $a->profile['url'];
+
+ $tpl = Renderer::getMarkupTemplate('auto_request.tpl');
+ $o = Renderer::replaceMacros($tpl, [
+ '$header' => DI::l10n()->t('Friend/Connection Request'),
+ '$page_desc' => DI::l10n()->t('Enter your Webfinger address (user@domain.tld) or profile URL here. If this isn\'t supported by your system, you have to subscribe to <strong>%s</strong> or <strong>%s</strong> directly on your system.', $target_addr, $target_url),
+ '$invite_desc' => DI::l10n()->t('If you are not yet a member of the free social web, <a href="%s">follow this link to find a public Friendica node and join us today</a>.', Search::getGlobalDirectory() . '/servers'),
+ '$your_address' => DI::l10n()->t('Your Webfinger address or profile URL:'),
+ '$pls_answer' => DI::l10n()->t('Please answer the following:'),
+ '$submit' => DI::l10n()->t('Submit Request'),
+ '$cancel' => DI::l10n()->t('Cancel'),
+
+ '$request' => 'remote_follow/' . $parameters['profile'],
+ '$name' => $a->profile['name'],
+ '$myaddr' => '', //Profile::getMyURL(),
+ ]);
+ return $o;
+ }
+}
\ No newline at end of file
<div class="generic-page-wrapper">
<h1>{{$header}}</h1>
+{{if !$myaddr}}
+ <p id="dfrn-request-intro">
+ {{$page_desc nofilter}}
+ </p>
+ <p>
+ {{$invite_desc nofilter}}
+ </p>
+{{/if}}
+
<form action="{{$request}}" method="post">
+{{if $url}}
<dl>
<dt>{{$url_label}}</dt>
<dd><a target="blank" href="{{$zrl}}">{{$url}}</a></dd>
+ </dl>
+{{/if}}
{{if $keywords}}
+ <dl>
<dt>{{$keywords_label}}</dt>
<dd>{{$keywords}}</dd>
-{{/if}}
</dl>
-
+{{/if}}
<div id="dfrn-request-url-wrapper">
<label id="dfrn-url-label" for="dfrn-url">{{$your_address}}</label>
- {{$myaddr}}
- <input type="hidden" name="dfrn_url" id="dfrn-url" value="{{$myaddr}}">
+ {{if $myaddr}}
+ {{$myaddr}}
+ <input type="hidden" name="dfrn_url" id="dfrn-url" value="{{$myaddr}}" />
+ {{else}}
+ <input type="text" name="dfrn_url" id="dfrn-url" size="32" value="{{$myaddr}}">
+ {{/if}}
<input type="hidden" name="url" id="url" value="{{$url}}">
<div id="dfrn-request-url-end"></div>
</div>