2018-06-04 02:25:40 -06:00
< ? php
namespace App\Jobs\CommentPipeline ;
2019-05-20 21:35:09 -06:00
use App\ {
Notification ,
2019-07-20 20:09:46 -06:00
Status ,
UserFilter
2019-05-20 21:35:09 -06:00
};
use App\Services\NotificationService ;
2021-12-10 21:55:42 -07:00
use App\Services\StatusService ;
2019-12-10 23:04:03 -07:00
use DB , Cache , Log ;
use Illuminate\Support\Facades\Redis ;
2019-05-20 21:35:09 -06:00
2018-06-04 02:25:40 -06:00
use Illuminate\Bus\Queueable ;
use Illuminate\Contracts\Queue\ShouldQueue ;
use Illuminate\Foundation\Bus\Dispatchable ;
2018-08-28 03:07:36 +00:00
use Illuminate\Queue\InteractsWithQueue ;
use Illuminate\Queue\SerializesModels ;
2018-06-04 02:25:40 -06:00
class CommentPipeline implements ShouldQueue
{
use Dispatchable , InteractsWithQueue , Queueable , SerializesModels ;
protected $status ;
protected $comment ;
2019-01-12 15:23:22 -07:00
/**
* Delete the job if its models no longer exist .
*
* @ var bool
*/
public $deleteWhenMissingModels = true ;
2020-05-22 15:53:59 -06:00
public $timeout = 5 ;
public $tries = 1 ;
2019-01-12 15:23:22 -07:00
2018-06-04 02:25:40 -06:00
/**
* Create a new job instance .
*
* @ return void
*/
public function __construct ( Status $status , Status $comment )
{
$this -> status = $status ;
$this -> comment = $comment ;
}
/**
* Execute the job .
*
* @ return void
*/
public function handle ()
{
$status = $this -> status ;
$comment = $this -> comment ;
$target = $status -> profile ;
$actor = $comment -> profile ;
2022-02-12 20:58:35 -07:00
if ( config ( 'database.default' ) === 'mysql' ) {
DB :: transaction ( function () use ( $status ) {
$count = DB :: select ( DB :: raw ( " select id, in_reply_to_id from statuses, (select @pv := :kid) initialisation where id > @pv and find_in_set(in_reply_to_id, @pv) > 0 and @pv := concat(@pv, ',', id) " ), [ 'kid' => $status -> id ]);
$status -> reply_count = count ( $count );
$status -> save ();
});
}
2021-12-10 21:55:42 -07:00
2019-03-31 20:39:15 -06:00
if ( $actor -> id === $target -> id || $status -> comments_disabled == true ) {
2018-06-05 21:01:59 -06:00
return true ;
}
2019-12-10 23:04:03 -07:00
2019-07-20 20:09:46 -06:00
$filtered = UserFilter :: whereUserId ( $target -> id )
-> whereFilterableType ( 'App\Profile' )
-> whereIn ( 'filter_type' , [ 'mute' , 'block' ])
-> whereFilterableId ( $actor -> id )
-> exists ();
if ( $filtered == true ) {
return ;
}
2018-06-05 21:01:59 -06:00
2019-05-20 21:35:09 -06:00
DB :: transaction ( function () use ( $target , $actor , $comment ) {
2018-08-28 03:07:36 +00:00
$notification = new Notification ();
2018-06-04 02:25:40 -06:00
$notification -> profile_id = $target -> id ;
$notification -> actor_id = $actor -> id ;
$notification -> action = 'comment' ;
$notification -> message = $comment -> replyToText ();
$notification -> rendered = $comment -> replyToHtml ();
$notification -> item_id = $comment -> id ;
$notification -> item_type = " App \ Status " ;
$notification -> save ();
2019-05-20 21:35:09 -06:00
NotificationService :: setNotification ( $notification );
NotificationService :: set ( $notification -> profile_id , $notification -> id );
2021-12-14 21:09:23 -07:00
StatusService :: del ( $comment -> id );
2019-05-20 21:35:09 -06:00
});
2022-01-08 04:59:28 -07:00
if ( $exists = Cache :: get ( 'status:replies:all:' . $status -> id )) {
if ( $exists && $exists -> count () == 3 ) {
} else {
Cache :: forget ( 'status:replies:all:' . $status -> id );
}
} else {
Cache :: forget ( 'status:replies:all:' . $status -> id );
}
2018-06-04 02:25:40 -06:00
}
}