mirror of
https://github.com/friendica/friendica
synced 2025-04-26 03:10:13 +00:00
Merge pull request #7104 from annando/separated-confirm
The follow confirmation process is now separated
This commit is contained in:
commit
7c62a4e02b
7 changed files with 267 additions and 232 deletions
|
@ -124,6 +124,7 @@ class Router
|
|||
});
|
||||
$this->routeCollector->addRoute(['GET'], '/filer[/{id:\d+}]', Module\Filer\SaveTag::class);
|
||||
$this->routeCollector->addRoute(['GET'], '/filerm/{id:\d+}', Module\Filer\RemoveTag::class);
|
||||
$this->routeCollector->addRoute(['GET', 'POST'], '/follow_confirm', Module\FollowConfirm::class);
|
||||
$this->routeCollector->addRoute(['GET'], '/followers/{owner}', Module\Followers::class);
|
||||
$this->routeCollector->addRoute(['GET'], '/following/{owner}', Module\Following::class);
|
||||
$this->routeCollector->addRoute(['GET'], '/friendica[/json]', Module\Friendica::class);
|
||||
|
|
|
@ -125,13 +125,14 @@ class Contact extends BaseObject
|
|||
}
|
||||
|
||||
/**
|
||||
* @param integer $id
|
||||
* @param integer $id Contact ID
|
||||
* @param array $fields Array of selected fields, empty for all
|
||||
* @return array|boolean Contact record if it exists, false otherwise
|
||||
* @throws \Exception
|
||||
*/
|
||||
public static function getById($id)
|
||||
public static function getById($id, $fields = [])
|
||||
{
|
||||
return DBA::selectFirst('contact', [], ['id' => $id]);
|
||||
return DBA::selectFirst('contact', $fields, ['id' => $id]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
97
src/Module/FollowConfirm.php
Normal file
97
src/Module/FollowConfirm.php
Normal file
|
@ -0,0 +1,97 @@
|
|||
<?php
|
||||
namespace Friendica\Module;
|
||||
|
||||
use Friendica\App;
|
||||
use Friendica\BaseModule;
|
||||
use Friendica\Core\L10n;
|
||||
use Friendica\Core\Logger;
|
||||
use Friendica\Core\Protocol;
|
||||
use Friendica\Database\DBA;
|
||||
use Friendica\Model\Contact;
|
||||
use Friendica\Model\User;
|
||||
use Friendica\Protocol\Diaspora;
|
||||
use Friendica\Protocol\ActivityPub;
|
||||
use Friendica\Util\DateTimeFormat;
|
||||
|
||||
/**
|
||||
* Process follow request confirmations
|
||||
*/
|
||||
class FollowConfirm extends BaseModule
|
||||
{
|
||||
public static function post()
|
||||
{
|
||||
$a = self::getApp();
|
||||
|
||||
$uid = local_user();
|
||||
if (!$uid) {
|
||||
notice(L10n::t('Permission denied.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
$intro_id = intval(defaults($_POST, 'intro_id' , 0));
|
||||
$duplex = intval(defaults($_POST, 'duplex' , 0));
|
||||
$cid = intval(defaults($_POST, 'contact_id', 0));
|
||||
$hidden = intval(defaults($_POST, 'hidden' , 0));
|
||||
|
||||
if (empty($cid)) {
|
||||
notice(L10n::t('No given contact.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
Logger::info('Confirming follower', ['cid' => $cid]);
|
||||
|
||||
$contact = DBA::selectFirst('contact', [], ['id' => $cid, 'uid' => $uid]);
|
||||
if (!DBA::isResult($contact)) {
|
||||
Logger::warning('Contact not found in DB.', ['cid' => $cid]);
|
||||
notice(L10n::t('Contact not found.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
$relation = $contact['rel'];
|
||||
$new_relation = $contact['rel'];
|
||||
$writable = $contact['writable'];
|
||||
|
||||
if (!empty($contact['protocol'])) {
|
||||
$protocol = $contact['protocol'];
|
||||
} else {
|
||||
$protocol = $contact['network'];
|
||||
}
|
||||
|
||||
if ($protocol == Protocol::ACTIVITYPUB) {
|
||||
ActivityPub\Transmitter::sendContactAccept($contact['url'], $contact['hub-verify'], $uid);
|
||||
}
|
||||
|
||||
if (in_array($protocol, [Protocol::DIASPORA, Protocol::ACTIVITYPUB])) {
|
||||
if ($duplex) {
|
||||
$new_relation = Contact::FRIEND;
|
||||
} else {
|
||||
$new_relation = Contact::FOLLOWER;
|
||||
}
|
||||
|
||||
if ($new_relation != Contact::FOLLOWER) {
|
||||
$writable = 1;
|
||||
}
|
||||
}
|
||||
|
||||
$fields = ['name-date' => DateTimeFormat::utcNow(),
|
||||
'uri-date' => DateTimeFormat::utcNow(),
|
||||
'blocked' => false, 'pending' => false, 'protocol' => $protocol,
|
||||
'writable' => $writable, 'hidden' => $hidden, 'rel' => $new_relation];
|
||||
DBA::update('contact', $fields, ['id' => $cid]);
|
||||
|
||||
if ($new_relation == Contact::FRIEND) {
|
||||
if ($protocol == Protocol::DIASPORA) {
|
||||
$user = User::getById($uid);
|
||||
$contact = Contact::getById($cid);
|
||||
$ret = Diaspora::sendShare($user, $contact);
|
||||
Logger::info('share returns', ['return' => $ret]);
|
||||
} elseif ($protocol == Protocol::ACTIVITYPUB) {
|
||||
ActivityPub\Transmitter::sendActivity('Follow', $contact['url'], $uid);
|
||||
}
|
||||
}
|
||||
|
||||
DBA::delete('intro', ['id' => $intro_id]);
|
||||
|
||||
$a->internalRedirect('contact/' . intval($cid));
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue