mirror of
https://git.sekbaer.de/Friendica/friendica.git
synced 2025-06-16 20:05:14 +02:00
Follow/Unfollow contact with a single click
This commit is contained in:
parent
5232a8583f
commit
33575a94fa
6 changed files with 88 additions and 76 deletions
|
@ -41,31 +41,7 @@ function follow_post(App $a)
|
|||
DI::baseUrl()->redirect('contact');
|
||||
}
|
||||
|
||||
$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']);
|
||||
}
|
||||
|
||||
notice(DI::l10n()->t('The contact could not be added.'));
|
||||
|
||||
DI::baseUrl()->redirect($return_path);
|
||||
// NOTREACHED
|
||||
follow_process($a);
|
||||
}
|
||||
|
||||
function follow_content(App $a)
|
||||
|
@ -92,6 +68,10 @@ function follow_content(App $a)
|
|||
DI::baseUrl()->redirect($return_path);
|
||||
}
|
||||
|
||||
if (!empty($_REQUEST['auto'])) {
|
||||
follow_process($a);
|
||||
}
|
||||
|
||||
$submit = DI::l10n()->t('Submit Request');
|
||||
|
||||
// Don't try to add a pending contact
|
||||
|
@ -195,6 +175,34 @@ function follow_content(App $a)
|
|||
return $o;
|
||||
}
|
||||
|
||||
function follow_process(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']);
|
||||
}
|
||||
|
||||
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());
|
||||
|
|
|
@ -31,56 +31,13 @@ use Friendica\Util\Strings;
|
|||
|
||||
function unfollow_post(App $a)
|
||||
{
|
||||
$base_return_path = 'contact';
|
||||
|
||||
if (!local_user()) {
|
||||
notice(DI::l10n()->t('Permission denied.'));
|
||||
DI::baseUrl()->redirect('login');
|
||||
// NOTREACHED
|
||||
}
|
||||
|
||||
$uid = local_user();
|
||||
$url = Strings::escapeTags(trim($_REQUEST['url'] ?? ''));
|
||||
|
||||
$condition = ["`uid` = ? AND (`rel` = ? OR `rel` = ?) AND (`nurl` = ? OR `alias` = ? OR `alias` = ?)",
|
||||
$uid, Contact::SHARING, Contact::FRIEND, Strings::normaliseLink($url),
|
||||
Strings::normaliseLink($url), $url];
|
||||
$contact = DBA::selectFirst('contact', [], $condition);
|
||||
|
||||
if (!DBA::isResult($contact)) {
|
||||
notice(DI::l10n()->t("You aren't following this contact."));
|
||||
DI::baseUrl()->redirect($base_return_path);
|
||||
// NOTREACHED
|
||||
}
|
||||
|
||||
if (!empty($_REQUEST['cancel'])) {
|
||||
DI::baseUrl()->redirect($base_return_path . '/' . $contact['id']);
|
||||
}
|
||||
|
||||
if (!in_array($contact['network'], Protocol::NATIVE_SUPPORT)) {
|
||||
notice(DI::l10n()->t('Unfollowing is currently not supported by your network.'));
|
||||
DI::baseUrl()->redirect($base_return_path . '/' . $contact['id']);
|
||||
// NOTREACHED
|
||||
}
|
||||
|
||||
$dissolve = ($contact['rel'] == Contact::SHARING);
|
||||
|
||||
$owner = User::getOwnerDataById($uid);
|
||||
if ($owner) {
|
||||
Contact::terminateFriendship($owner, $contact, $dissolve);
|
||||
}
|
||||
|
||||
// Sharing-only contacts get deleted as there no relationship any more
|
||||
if ($dissolve) {
|
||||
Contact::remove($contact['id']);
|
||||
$return_path = $base_return_path;
|
||||
} else {
|
||||
DBA::update('contact', ['rel' => Contact::FOLLOWER], ['id' => $contact['id']]);
|
||||
$return_path = $base_return_path . '/' . $contact['id'];
|
||||
}
|
||||
|
||||
DI::baseUrl()->redirect($return_path);
|
||||
// NOTREACHED
|
||||
unfollow_process();
|
||||
}
|
||||
|
||||
function unfollow_content(App $a)
|
||||
|
@ -93,6 +50,10 @@ function unfollow_content(App $a)
|
|||
// NOTREACHED
|
||||
}
|
||||
|
||||
if (!empty($_REQUEST['auto'])) {
|
||||
unfollow_process();
|
||||
}
|
||||
|
||||
$uid = local_user();
|
||||
$url = Strings::escapeTags(trim($_REQUEST['url']));
|
||||
|
||||
|
@ -154,3 +115,46 @@ function unfollow_content(App $a)
|
|||
|
||||
return $o;
|
||||
}
|
||||
|
||||
function unfollow_process()
|
||||
{
|
||||
$base_return_path = 'contact';
|
||||
|
||||
$uid = local_user();
|
||||
$url = Strings::escapeTags(trim($_REQUEST['url'] ?? ''));
|
||||
|
||||
$condition = ["`uid` = ? AND (`rel` = ? OR `rel` = ?) AND (`nurl` = ? OR `alias` = ? OR `alias` = ?)",
|
||||
$uid, Contact::SHARING, Contact::FRIEND, Strings::normaliseLink($url),
|
||||
Strings::normaliseLink($url), $url];
|
||||
$contact = DBA::selectFirst('contact', [], $condition);
|
||||
|
||||
if (!DBA::isResult($contact)) {
|
||||
notice(DI::l10n()->t("You aren't following this contact."));
|
||||
DI::baseUrl()->redirect($base_return_path);
|
||||
// NOTREACHED
|
||||
}
|
||||
|
||||
if (!in_array($contact['network'], Protocol::NATIVE_SUPPORT)) {
|
||||
notice(DI::l10n()->t('Unfollowing is currently not supported by your network.'));
|
||||
DI::baseUrl()->redirect($base_return_path . '/' . $contact['id']);
|
||||
// NOTREACHED
|
||||
}
|
||||
|
||||
$dissolve = ($contact['rel'] == Contact::SHARING);
|
||||
|
||||
$owner = User::getOwnerDataById($uid);
|
||||
if ($owner) {
|
||||
Contact::terminateFriendship($owner, $contact, $dissolve);
|
||||
}
|
||||
|
||||
// Sharing-only contacts get deleted as there no relationship any more
|
||||
if ($dissolve) {
|
||||
Contact::remove($contact['id']);
|
||||
$return_path = $base_return_path;
|
||||
} else {
|
||||
DBA::update('contact', ['rel' => Contact::FOLLOWER], ['id' => $contact['id']]);
|
||||
$return_path = $base_return_path . '/' . $contact['id'];
|
||||
}
|
||||
|
||||
DI::baseUrl()->redirect($return_path);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue