mirror of
https://codeberg.org/streams/streams.git
synced 2024-09-19 21:35:13 +00:00
more complete handling of unfollow
This commit is contained in:
parent
5c3efea888
commit
459611b889
3 changed files with 57 additions and 16 deletions
|
@ -2236,16 +2236,17 @@ class Activity
|
|||
}
|
||||
|
||||
|
||||
public static function unfollow($channel, $act)
|
||||
public static function unfollowActor($channel, $actor)
|
||||
{
|
||||
/* actor is unfollowing $channel */
|
||||
if (! $actor) {
|
||||
return;
|
||||
}
|
||||
$actorId = is_string($actor) ? $actor : $actor['id'];
|
||||
|
||||
$person_obj = $act->actor;
|
||||
|
||||
if (is_array($person_obj)) {
|
||||
if ($actorId) {
|
||||
$r = q(
|
||||
"select * from abook left join xchan on abook_xchan = xchan_hash where abook_xchan = '%s' and abook_channel = %d limit 1",
|
||||
dbesc($person_obj['id']),
|
||||
dbesc($actorId),
|
||||
intval($channel['channel_id'])
|
||||
);
|
||||
if ($r) {
|
||||
|
|
|
@ -375,6 +375,12 @@ class Inbox extends Controller
|
|||
break;
|
||||
|
||||
case 'Reject':
|
||||
if (is_array($AS->obj) && array_key_exists('type', $AS->obj) && $AS->obj['type'] === 'Follow'
|
||||
&& isset($AS->obj['object'])) {
|
||||
// do unfollow activity
|
||||
Activity::unfollowActor($channel, $AS->obj['object']);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -424,10 +430,27 @@ class Inbox extends Controller
|
|||
}
|
||||
}
|
||||
if ($AS->type === 'Undo') {
|
||||
if ($AS->obj && is_array($AS->obj) && array_key_exists('type', $AS->obj) && $AS->obj['type'] === 'Follow') {
|
||||
// do unfollow activity
|
||||
Activity::unfollow($channel, $AS);
|
||||
return true;
|
||||
if ($AS->obj && is_array($AS->obj)) {
|
||||
if (array_key_exists('type', $AS->obj) && $AS->obj['type'] === 'Follow') {
|
||||
// do unfollow activity
|
||||
Activity::unfollowActor($channel, $AS->actor['id']);
|
||||
return true;
|
||||
}
|
||||
if (array_key_exists('type', $AS->obj) && $AS->obj['type'] === 'Accept') {
|
||||
// do a deep dive
|
||||
if (isset($AS->obj['object'])) {
|
||||
$originalActivity = $AS->obj['object'];
|
||||
if (is_string($AS->obj['object'])) {
|
||||
$originalActivity = Activity::fetch($AS->obj['object']);
|
||||
}
|
||||
if ($originalActivity && isset($originalActivity['type']) && $originalActivity['type'] === 'Follow'
|
||||
&& isset($originalActivity['object'])) {
|
||||
$person = is_string($originalActivity['object']) ? $originalActivity['object'] : $originalActivity['object']['id'];
|
||||
Activity::unfollowActor($channel, $person);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($AS->type === 'Accept') {
|
||||
|
@ -438,7 +461,7 @@ class Inbox extends Controller
|
|||
if ($AS->type === 'Leave') {
|
||||
if ($AS->obj && is_array($AS->obj) && array_key_exists('type', $AS->obj) && $AS->obj['type'] === 'Group') {
|
||||
// do unfollow activity
|
||||
Activity::unfollow($channel, $AS);
|
||||
Activity::unfollowActor($channel, $AS->obj['id']);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -327,10 +327,27 @@ class Outbox extends Controller
|
|||
}
|
||||
}
|
||||
if ($AS->type === 'Undo') {
|
||||
if ($AS->obj && is_array($AS->obj) && array_key_exists('type', $AS->obj) && $AS->obj['type'] === 'Follow') {
|
||||
// do unfollow activity
|
||||
Activity::unfollow($channel, $AS);
|
||||
return true;
|
||||
if ($AS->obj && is_array($AS->obj)) {
|
||||
if (array_key_exists('type', $AS->obj) && $AS->obj['type'] === 'Follow') {
|
||||
// do unfollow activity
|
||||
Activity::unfollowActor($channel, $AS->actor['id']);
|
||||
return true;
|
||||
}
|
||||
if (array_key_exists('type', $AS->obj) && $AS->obj['type'] === 'Accept') {
|
||||
// do a deep dive
|
||||
if (isset($AS->obj['object'])) {
|
||||
$originalActivity = $AS->obj['object'];
|
||||
if (is_string($AS->obj['object'])) {
|
||||
$originalActivity = Activity::fetch($AS->obj['object']);
|
||||
}
|
||||
if ($originalActivity && isset($originalActivity['type']) && $originalActivity['type'] === 'Follow'
|
||||
&& isset($originalActivity['object'])) {
|
||||
$person = is_string($originalActivity['object']) ? $originalActivity['object'] : $originalActivity['object']['id'];
|
||||
Activity::unfollowActor($channel, $person);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($AS->type === 'Accept') {
|
||||
|
@ -341,7 +358,7 @@ class Outbox extends Controller
|
|||
if ($AS->type === 'Leave') {
|
||||
if ($AS->obj && is_array($AS->obj) && array_key_exists('type', $AS->obj) && $AS->obj['type'] === 'Group') {
|
||||
// do unfollow activity
|
||||
Activity::unfollow($channel, $AS);
|
||||
Activity::unfollowActor($channel, $AS->obj['id']);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue