From d8febbe45e59229a831ef205e09997f31b0cb0e9 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 22 Sep 2021 22:56:34 -0400 Subject: [PATCH] Add new hook to support unfollow contacts on non-native networks --- doc/Addons.md | 18 ++++++++++++++++++ doc/de/Addons.md | 1 + mod/unfollow.php | 2 +- src/Model/Contact.php | 6 ++++++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/doc/Addons.md b/doc/Addons.md index 4a32dc09f4..72adb0372b 100644 --- a/doc/Addons.md +++ b/doc/Addons.md @@ -479,6 +479,23 @@ Hook data: - **uid** (input): the user to return the contact data for (can be empty for public contacts). - **result** (output): Set by the hook function to indicate a successful detection. +### follow + +Called before adding a new contact for a user to handle non-native network remote contact (like Twitter). + +Hook data: + +- **url** (input): URL of the remote contact. +- **contact** (output): should be filled with the contact (with uid = user creating the contact) array if follow was successful. + +### unfollow + +Called when unfollowing a remote contact on a non-native network (like Twitter) + +Hook data: +- **contact** (input): the remote contact (uid = local unfollowing user id) array. +- **dissolve** (input): whether to stop sharing with the remote contact as well. + ## Complete list of hook callbacks Here is a complete list of all hook callbacks with file locations (as of 24-Sep-2018). Please see the source for details of any hooks not documented above. @@ -648,6 +665,7 @@ Here is a complete list of all hook callbacks with file locations (as of 24-Sep- Hook::callAll('contact_photo_menu', $args); Hook::callAll('follow', $arr); + Hook::callAll('unfollow', $hook_data); ### src/Model/Profile.php diff --git a/doc/de/Addons.md b/doc/de/Addons.md index 276f5ed1b6..fe27354822 100644 --- a/doc/de/Addons.md +++ b/doc/de/Addons.md @@ -356,6 +356,7 @@ Eine komplette Liste aller Hook-Callbacks mit den zugehörigen Dateien (am 01-Ap Hook::callAll('contact_photo_menu', $args); Hook::callAll('follow', $arr); + Hook::callAll('unfollow', $hook_data); ### src/Model/Profile.php diff --git a/mod/unfollow.php b/mod/unfollow.php index de1cb6cf7c..6ee45b17d8 100644 --- a/mod/unfollow.php +++ b/mod/unfollow.php @@ -144,7 +144,7 @@ function unfollow_process(string $url) Contact::terminateFriendship($owner, $contact, $dissolve); } - // Sharing-only contacts get deleted as there no relationship any more + // Sharing-only contacts get deleted as there no relationship anymore if ($dissolve) { Contact::remove($contact['id']); $return_path = $base_return_path; diff --git a/src/Model/Contact.php b/src/Model/Contact.php index 54fae63b64..e5aa430089 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -845,6 +845,12 @@ class Contact if ($dissolve) { ActivityPub\Transmitter::sendContactReject($contact['url'], $contact['hub-verify'], $user['uid']); } + } else { + $hook_data = [ + 'contact' => $contact, + 'dissolve' => $dissolve, + ]; + Hook::callAll('unfollow', $hook_data); } }