forked from mirror/pixelfed
113 lines
2.5 KiB
PHP
113 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace App\Observers;
|
|
|
|
use App\UserFilter;
|
|
use App\Services\UserFilterService;
|
|
use App\Jobs\HomeFeedPipeline\FeedFollowPipeline;
|
|
use App\Jobs\HomeFeedPipeline\FeedUnfollowPipeline;
|
|
|
|
class UserFilterObserver
|
|
{
|
|
/**
|
|
* Handle events after all transactions are committed.
|
|
*
|
|
* @var bool
|
|
*/
|
|
public $afterCommit = true;
|
|
|
|
/**
|
|
* Handle the user filter "created" event.
|
|
*
|
|
* @param \App\UserFilter $userFilter
|
|
* @return void
|
|
*/
|
|
public function created(UserFilter $userFilter)
|
|
{
|
|
$this->filterCreate($userFilter);
|
|
}
|
|
|
|
/**
|
|
* Handle the user filter "updated" event.
|
|
*
|
|
* @param \App\UserFilter $userFilter
|
|
* @return void
|
|
*/
|
|
public function updated(UserFilter $userFilter)
|
|
{
|
|
$this->filterCreate($userFilter);
|
|
}
|
|
|
|
/**
|
|
* Handle the user filter "deleted" event.
|
|
*
|
|
* @param \App\UserFilter $userFilter
|
|
* @return void
|
|
*/
|
|
public function deleted(UserFilter $userFilter)
|
|
{
|
|
$this->filterDelete($userFilter);
|
|
}
|
|
|
|
/**
|
|
* Handle the user filter "restored" event.
|
|
*
|
|
* @param \App\UserFilter $userFilter
|
|
* @return void
|
|
*/
|
|
public function restored(UserFilter $userFilter)
|
|
{
|
|
$this->filterCreate($userFilter);
|
|
}
|
|
|
|
/**
|
|
* Handle the user filter "force deleted" event.
|
|
*
|
|
* @param \App\UserFilter $userFilter
|
|
* @return void
|
|
*/
|
|
public function forceDeleted(UserFilter $userFilter)
|
|
{
|
|
$this->filterDelete($userFilter);
|
|
}
|
|
|
|
protected function filterCreate(UserFilter $userFilter)
|
|
{
|
|
if($userFilter->filterable_type !== 'App\Profile') {
|
|
return;
|
|
}
|
|
|
|
switch ($userFilter->filter_type) {
|
|
case 'mute':
|
|
UserFilterService::mute($userFilter->user_id, $userFilter->filterable_id);
|
|
FeedUnfollowPipeline::dispatch($userFilter->user_id, $userFilter->filterable_id)->onQueue('feed');
|
|
break;
|
|
|
|
case 'block':
|
|
UserFilterService::block($userFilter->user_id, $userFilter->filterable_id);
|
|
FeedUnfollowPipeline::dispatch($userFilter->user_id, $userFilter->filterable_id)->onQueue('feed');
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
protected function filterDelete(UserFilter $userFilter)
|
|
{
|
|
if($userFilter->filterable_type !== 'App\Profile') {
|
|
return;
|
|
}
|
|
|
|
switch ($userFilter->filter_type) {
|
|
case 'mute':
|
|
UserFilterService::unmute($userFilter->user_id, $userFilter->filterable_id);
|
|
FeedFollowPipeline::dispatch($userFilter->user_id, $userFilter->filterable_id)->onQueue('feed');
|
|
break;
|
|
|
|
case 'block':
|
|
UserFilterService::unblock($userFilter->user_id, $userFilter->filterable_id);
|
|
FeedFollowPipeline::dispatch($userFilter->user_id, $userFilter->filterable_id)->onQueue('feed');
|
|
break;
|
|
}
|
|
}
|
|
}
|