diff --git a/doc/Addons.md b/doc/Addons.md index ec82452d5..6fa87c953 100644 --- a/doc/Addons.md +++ b/doc/Addons.md @@ -520,6 +520,24 @@ Hook data: - **contact** (input): the remote contact (uid = local revoking user id) array. - **result** (output): a boolean value indicating wether the operation was successful or not. +### block + +Called when blocking a remote contact on a non-native network (like Twitter). + +Hook data: +- **contact** (input): the remote contact (uid = 0) array. +- **uid** (input): the user id to issue the block for. +- **result** (output): a boolean value indicating wether the operation was successful or not. + +### unblock + +Called when unblocking a remote contact on a non-native network (like Twitter). + +Hook data: +- **contact** (input): the remote contact (uid = 0) array. +- **uid** (input): the user id to revoke the block for. +- **result** (output): a boolean value indicating wether the operation was successful or not. + ## 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. @@ -777,7 +795,9 @@ Here is a complete list of all hook callbacks with file locations (as of 24-Sep- Hook::callAll('support_follow', $hook_data); Hook::callAll('support_revoke_follow', $hook_data); Hook::callAll('unfollow', $hook_data); - Kook::callAll('revoke_follow', $hook_data); + Hook::callAll('revoke_follow', $hook_data); + Hook::callAll('block', $hook_data); + Hook::callAll('unblock', $hook_data); ### src/Core/StorageManager diff --git a/doc/de/Addons.md b/doc/de/Addons.md index e7fecc29a..64e3e37ba 100644 --- a/doc/de/Addons.md +++ b/doc/de/Addons.md @@ -418,7 +418,9 @@ Eine komplette Liste aller Hook-Callbacks mit den zugehörigen Dateien (am 01-Ap Hook::callAll('support_follow', $hook_data); Hook::callAll('support_revoke_follow', $hook_data); Hook::callAll('unfollow', $hook_data); - Kook::callAll('revoke_follow', $hook_data); + Hook::callAll('revoke_follow', $hook_data); + Hook::callAll('block', $hook_data); + Hook::callAll('unblock', $hook_data); ### src/Core/StorageManager diff --git a/src/Core/Protocol.php b/src/Core/Protocol.php index 66c74ccc9..a01e632bf 100644 --- a/src/Core/Protocol.php +++ b/src/Core/Protocol.php @@ -287,4 +287,46 @@ class Protocol return $hook_data['result']; } + + /** + * Send a block message to a remote server. Only useful for connector addons. + * + * @param array $contact Public contact record to block + * @param int $uid User issuing the block + * @return bool|null true if successful, false if not, null if no action was performed + * @throws HTTPException\InternalServerErrorException + */ + public static function block(array $contact, int $uid): ?bool + { + // Catch-all hook for connector addons + $hook_data = [ + 'contact' => $contact, + 'uid' => $uid, + 'result' => null, + ]; + Hook::callAll('block', $hook_data); + + return $hook_data['result']; + } + + /** + * Send an unblock message to a remote server. Only useful for connector addons. + * + * @param array $contact Public contact record to unblock + * @param int $uid User revoking the block + * @return bool|null true if successful, false if not, null if no action was performed + * @throws HTTPException\InternalServerErrorException + */ + public static function unblock(array $contact, int $uid): ?bool + { + // Catch-all hook for connector addons + $hook_data = [ + 'contact' => $contact, + 'uid' => $uid, + 'result' => null, + ]; + Hook::callAll('unblock', $hook_data); + + return $hook_data['result']; + } } diff --git a/src/Model/Contact/User.php b/src/Model/Contact/User.php index eb0b5af09..7d6ce17da 100644 --- a/src/Model/Contact/User.php +++ b/src/Model/Contact/User.php @@ -23,6 +23,7 @@ namespace Friendica\Model\Contact; use Exception; use Friendica\Core\Logger; +use Friendica\Core\Protocol; use Friendica\Core\System; use Friendica\Database\Database; use Friendica\Database\DBA; @@ -145,6 +146,13 @@ class User return; } + $contact = Contact::getById($cdata['public']); + if ($blocked) { + Protocol::block($contact); + } else { + Protocol::unblock($contact); + } + if ($cdata['user'] != 0) { DBA::update('contact', ['blocked' => $blocked], ['id' => $cdata['user'], 'pending' => false]); }