2018-06-04 08:25:40 +00:00
< ? php
namespace App\Jobs\CommentPipeline ;
2019-05-21 03:35:09 +00:00
use App\ {
Notification ,
2019-07-21 02:09:46 +00:00
Status ,
UserFilter
2019-05-21 03:35:09 +00:00
};
use App\Services\NotificationService ;
2021-12-11 04:55:42 +00:00
use App\Services\StatusService ;
2019-12-11 06:04:03 +00:00
use DB , Cache , Log ;
use Illuminate\Support\Facades\Redis ;
2019-05-21 03:35:09 +00:00
2018-06-04 08:25:40 +00: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 08:25:40 +00:00
class CommentPipeline implements ShouldQueue
{
use Dispatchable , InteractsWithQueue , Queueable , SerializesModels ;
protected $status ;
protected $comment ;
2019-01-12 22:23:22 +00:00
/**
* Delete the job if its models no longer exist .
*
* @ var bool
*/
public $deleteWhenMissingModels = true ;
2020-05-22 21:53:59 +00:00
public $timeout = 5 ;
public $tries = 1 ;
2019-01-12 22:23:22 +00:00
2018-06-04 08:25:40 +00: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-13 03:58:35 +00: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-11 04:55:42 +00:00
2019-04-01 02:39:15 +00:00
if ( $actor -> id === $target -> id || $status -> comments_disabled == true ) {
2018-06-06 03:01:59 +00:00
return true ;
}
2019-12-11 06:04:03 +00:00
2019-07-21 02:09:46 +00:00
$filtered = UserFilter :: whereUserId ( $target -> id )
-> whereFilterableType ( 'App\Profile' )
-> whereIn ( 'filter_type' , [ 'mute' , 'block' ])
-> whereFilterableId ( $actor -> id )
-> exists ();
if ( $filtered == true ) {
return ;
}
2018-06-06 03:01:59 +00:00
2019-05-21 03:35:09 +00:00
DB :: transaction ( function () use ( $target , $actor , $comment ) {
2018-08-28 03:07:36 +00:00
$notification = new Notification ();
2018-06-04 08:25:40 +00: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-21 03:35:09 +00:00
NotificationService :: setNotification ( $notification );
NotificationService :: set ( $notification -> profile_id , $notification -> id );
2021-12-15 04:09:23 +00:00
StatusService :: del ( $comment -> id );
2019-05-21 03:35:09 +00:00
});
2022-01-08 11:59:28 +00: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 08:25:40 +00:00
}
}