status = $status; } /** * Execute the job. * * @return void */ public function handle() { $profile = $this->status->profile; $status = $this->status; // Verify status exists if (!$status) { Log::info("NewPostPipeline: Status no longer exists, skipping job"); return; } // Verify status has a profile if (!$status->profile_id) { Log::info("NewPostPipeline: Status {$status->id} has no profile_id, skipping job"); return; } $profile = $status->profile; if (!$profile) { Log::info("NewPostPipeline: Profile no longer exists for status {$status->id}, skipping job"); return; } if ($profile->no_autolink == false) { $this->parseEntities(); } } public function parseEntities() { $this->extractEntities(); } public function extractEntities() { $this->entities = Extractor::create()->extract($this->status->caption); $this->autolinkStatus(); } public function autolinkStatus() { $this->autolink = Autolink::create()->autolink($this->status->caption); $this->storeHashtags(); } public function storeHashtags() { $tags = array_unique($this->entities['hashtags']); $status = $this->status; foreach ($tags as $tag) { if (mb_strlen($tag) > 124) { continue; } DB::transaction(function () use ($status, $tag) { $hashtag = GroupHashtag::firstOrCreate([ 'name' => $tag, ]); GroupPostHashtag::firstOrCreate( [ 'status_id' => $status->id, 'group_id' => $status->group_id, 'hashtag_id' => $hashtag->id, 'profile_id' => $status->profile_id, 'status_visibility' => $status->visibility, ] ); }); } $this->storeMentions(); } public function storeMentions() { // todo } }