Remove the obsolete parameter $two_way from terminateFriendship methods
- Follow revokation is now done independently
This commit is contained in:
parent
1047ad7bc2
commit
c4a4473cd0
6 changed files with 18 additions and 26 deletions
|
@ -510,7 +510,6 @@ Called when unfollowing a remote contact on a non-native network (like Twitter)
|
||||||
|
|
||||||
Hook data:
|
Hook data:
|
||||||
- **contact** (input): the remote contact (uid = local unfollowing user id) array.
|
- **contact** (input): the remote contact (uid = local unfollowing user id) array.
|
||||||
- **two_way** (input): wether to stop sharing with the remote contact as well.
|
|
||||||
- **result** (output): wether the unfollowing is successful or not.
|
- **result** (output): wether the unfollowing is successful or not.
|
||||||
|
|
||||||
### revoke_follow
|
### revoke_follow
|
||||||
|
|
|
@ -3826,10 +3826,8 @@ function api_friendships_destroy($type)
|
||||||
throw new HTTPException\NotFoundException('Not following Contact');
|
throw new HTTPException\NotFoundException('Not following Contact');
|
||||||
}
|
}
|
||||||
|
|
||||||
$dissolve = ($contact['rel'] == Contact::SHARING);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$result = Contact::terminateFriendship($owner, $contact, $dissolve);
|
$result = Contact::terminateFriendship($owner, $contact);
|
||||||
|
|
||||||
if ($result === null) {
|
if ($result === null) {
|
||||||
Logger::notice(API_LOG_PREFIX . 'Not supported for {network}', ['module' => 'api', 'action' => 'friendships_destroy', 'network' => $contact['network']]);
|
Logger::notice(API_LOG_PREFIX . 'Not supported for {network}', ['module' => 'api', 'action' => 'friendships_destroy', 'network' => $contact['network']]);
|
||||||
|
@ -3840,7 +3838,7 @@ function api_friendships_destroy($type)
|
||||||
throw new HTTPException\ServiceUnavailableException('Unable to unfollow this contact, please retry in a few minutes or contact your administrator.');
|
throw new HTTPException\ServiceUnavailableException('Unable to unfollow this contact, please retry in a few minutes or contact your administrator.');
|
||||||
}
|
}
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
Logger::error(API_LOG_PREFIX . $e->getMessage(), ['owner' => $owner, 'contact' => $contact, 'dissolve' => $dissolve]);
|
Logger::error(API_LOG_PREFIX . $e->getMessage(), ['owner' => $owner, 'contact' => $contact]);
|
||||||
throw new HTTPException\InternalServerErrorException('Unable to unfollow this contact, please contact your administrator');
|
throw new HTTPException\InternalServerErrorException('Unable to unfollow this contact, please contact your administrator');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -137,13 +137,11 @@ function unfollow_process(string $url)
|
||||||
// NOTREACHED
|
// NOTREACHED
|
||||||
}
|
}
|
||||||
|
|
||||||
$dissolve = ($contact['rel'] == Contact::SHARING);
|
|
||||||
|
|
||||||
$notice_message = '';
|
$notice_message = '';
|
||||||
$return_path = $base_return_path . '/' . $contact['id'];
|
$return_path = $base_return_path . '/' . $contact['id'];
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$result = Contact::terminateFriendship($owner, $contact, $dissolve);
|
$result = Contact::terminateFriendship($owner, $contact);
|
||||||
|
|
||||||
if ($result === null) {
|
if ($result === null) {
|
||||||
$notice_message = DI::l10n()->t('Unfollowing is currently not supported by this contact\'s network.');
|
$notice_message = DI::l10n()->t('Unfollowing is currently not supported by this contact\'s network.');
|
||||||
|
@ -157,7 +155,7 @@ function unfollow_process(string $url)
|
||||||
$notice_message = DI::l10n()->t('Contact was successfully unfollowed');
|
$notice_message = DI::l10n()->t('Contact was successfully unfollowed');
|
||||||
}
|
}
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
DI::logger()->error($e->getMessage(), ['owner' => $owner, 'contact' => $contact, 'dissolve' => $dissolve]);
|
DI::logger()->error($e->getMessage(), ['owner' => $owner, 'contact' => $contact]);
|
||||||
$notice_message = DI::l10n()->t('Unable to unfollow this contact, please contact your administrator');
|
$notice_message = DI::l10n()->t('Unable to unfollow this contact, please contact your administrator');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -207,12 +207,11 @@ class Protocol
|
||||||
*
|
*
|
||||||
* @param array $user User unfriending
|
* @param array $user User unfriending
|
||||||
* @param array $contact Contact unfriended
|
* @param array $contact Contact unfriended
|
||||||
* @param boolean $two_way Revoke eventual inbound follow as well
|
|
||||||
* @return bool|null true if successful, false if not, null if no action was performed
|
* @return bool|null true if successful, false if not, null if no action was performed
|
||||||
* @throws HTTPException\InternalServerErrorException
|
* @throws HTTPException\InternalServerErrorException
|
||||||
* @throws \ImagickException
|
* @throws \ImagickException
|
||||||
*/
|
*/
|
||||||
public static function terminateFriendship(array $user, array $contact, bool $two_way = false): bool
|
public static function terminateFriendship(array $user, array $contact): bool
|
||||||
{
|
{
|
||||||
if (empty($contact['network'])) {
|
if (empty($contact['network'])) {
|
||||||
throw new \InvalidArgumentException('Missing network key in contact array');
|
throw new \InvalidArgumentException('Missing network key in contact array');
|
||||||
|
@ -243,17 +242,12 @@ class Protocol
|
||||||
} elseif ($protocol == Protocol::DIASPORA) {
|
} elseif ($protocol == Protocol::DIASPORA) {
|
||||||
return Diaspora::sendUnshare($user, $contact) > 0;
|
return Diaspora::sendUnshare($user, $contact) > 0;
|
||||||
} elseif ($protocol == Protocol::ACTIVITYPUB) {
|
} elseif ($protocol == Protocol::ACTIVITYPUB) {
|
||||||
if ($two_way) {
|
|
||||||
ActivityPub\Transmitter::sendContactReject($contact['url'], $contact['hub-verify'], $user['uid']);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ActivityPub\Transmitter::sendContactUndo($contact['url'], $contact['id'], $user['uid']);
|
return ActivityPub\Transmitter::sendContactUndo($contact['url'], $contact['id'], $user['uid']);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Catch-all hook for connector addons
|
// Catch-all hook for connector addons
|
||||||
$hook_data = [
|
$hook_data = [
|
||||||
'contact' => $contact,
|
'contact' => $contact,
|
||||||
'two_way' => $two_way,
|
|
||||||
'result' => null
|
'result' => null
|
||||||
];
|
];
|
||||||
Hook::callAll('unfollow', $hook_data);
|
Hook::callAll('unfollow', $hook_data);
|
||||||
|
@ -265,6 +259,7 @@ class Protocol
|
||||||
* Revoke an incoming follow from the provided contact
|
* Revoke an incoming follow from the provided contact
|
||||||
*
|
*
|
||||||
* @param array $contact Private contact (uid != 0) array
|
* @param array $contact Private contact (uid != 0) array
|
||||||
|
* @return bool|null true if successful, false if not, null if no action was performed
|
||||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
||||||
* @throws \ImagickException
|
* @throws \ImagickException
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -830,17 +830,17 @@ class Contact
|
||||||
* Sends an unfriend message. Removes the contact for two-way unfriending or sharing only protocols (feed an mail)
|
* Sends an unfriend message. Removes the contact for two-way unfriending or sharing only protocols (feed an mail)
|
||||||
*
|
*
|
||||||
* @param array $user User unfriending
|
* @param array $user User unfriending
|
||||||
* @param array $contact Contact unfriended
|
* @param array $contact Contact (uid != 0) unfriended
|
||||||
* @param boolean $two_way Revoke eventual inbound follow as well
|
* @param boolean $two_way Revoke eventual inbound follow as well
|
||||||
* @return bool|null true if successful, false if not, null if no action was performed
|
* @return bool|null true if successful, false if not, null if no action was performed
|
||||||
* @throws HTTPException\InternalServerErrorException
|
* @throws HTTPException\InternalServerErrorException
|
||||||
* @throws \ImagickException
|
* @throws \ImagickException
|
||||||
*/
|
*/
|
||||||
public static function terminateFriendship(array $user, array $contact, bool $two_way = false): bool
|
public static function terminateFriendship(array $user, array $contact): bool
|
||||||
{
|
{
|
||||||
$result = Protocol::terminateFriendship($user, $contact, $two_way);
|
$result = Protocol::terminateFriendship($user, $contact);
|
||||||
|
|
||||||
if ($two_way || in_array($contact['network'], [Protocol::FEED, Protocol::MAIL])) {
|
if ($contact['rel'] == Contact::SHARING || in_array($contact['network'], [Protocol::FEED, Protocol::MAIL])) {
|
||||||
self::remove($contact['id']);
|
self::remove($contact['id']);
|
||||||
} else {
|
} else {
|
||||||
self::update(['rel' => Contact::FOLLOWER], ['id' => $contact['id']]);
|
self::update(['rel' => Contact::FOLLOWER], ['id' => $contact['id']]);
|
||||||
|
|
|
@ -69,7 +69,8 @@ class Contact extends BaseModule
|
||||||
$count_actions = 0;
|
$count_actions = 0;
|
||||||
foreach ($orig_records as $orig_record) {
|
foreach ($orig_records as $orig_record) {
|
||||||
$cdata = Model\Contact::getPublicAndUserContactID($orig_record['id'], local_user());
|
$cdata = Model\Contact::getPublicAndUserContactID($orig_record['id'], local_user());
|
||||||
if (empty($cdata)) {
|
if (empty($cdata) || public_contact() === $cdata['public']) {
|
||||||
|
// No action available on your own contact
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,7 +80,7 @@ class Contact extends BaseModule
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($_POST['contacts_batch_block'])) {
|
if (!empty($_POST['contacts_batch_block'])) {
|
||||||
self::toggleBlockContact($cdata['public']);
|
self::toggleBlockContact($cdata['public'], local_user());
|
||||||
$count_actions++;
|
$count_actions++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,12 +205,13 @@ class Contact extends BaseModule
|
||||||
* Toggles the blocked status of a contact identified by id.
|
* Toggles the blocked status of a contact identified by id.
|
||||||
*
|
*
|
||||||
* @param int $contact_id Id of the contact with uid = 0
|
* @param int $contact_id Id of the contact with uid = 0
|
||||||
|
* @param int $owner_id Id of the user we want to block the contact for
|
||||||
* @throws \Exception
|
* @throws \Exception
|
||||||
*/
|
*/
|
||||||
private static function toggleBlockContact(int $contact_id)
|
private static function toggleBlockContact(int $contact_id, int $owner_id)
|
||||||
{
|
{
|
||||||
$blocked = !Model\Contact\User::isBlocked($contact_id, local_user());
|
$blocked = !Model\Contact\User::isBlocked($contact_id, $owner_id);
|
||||||
Model\Contact\User::setBlocked($contact_id, local_user(), $blocked);
|
Model\Contact\User::setBlocked($contact_id, $owner_id, $blocked);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -373,7 +375,7 @@ class Contact extends BaseModule
|
||||||
throw new BadRequestException(DI::l10n()->t('You can\'t block yourself'));
|
throw new BadRequestException(DI::l10n()->t('You can\'t block yourself'));
|
||||||
}
|
}
|
||||||
|
|
||||||
self::toggleBlockContact($cdata['public']);
|
self::toggleBlockContact($cdata['public'], local_user());
|
||||||
|
|
||||||
$blocked = Model\Contact\User::isBlocked($contact_id, local_user());
|
$blocked = Model\Contact\User::isBlocked($contact_id, local_user());
|
||||||
info(($blocked ? DI::l10n()->t('Contact has been blocked') : DI::l10n()->t('Contact has been unblocked')));
|
info(($blocked ? DI::l10n()->t('Contact has been blocked') : DI::l10n()->t('Contact has been unblocked')));
|
||||||
|
|
Loading…
Reference in a new issue