belongsTo('\App\Team'); } public function player() { return $this->belongsTo('\App\Player'); } public function mission() { return $this->belongsTo('\App\Mission'); } public function transit_line() { return $this->belongsTo('\App\TransitLine', 'm1_transit_line_id'); } public function transit_center() { return $this->belongsTo('\App\TransitCenter', 'm2_transit_center_id'); } public function document() { return $this->belongsTo('\App\Document', 'm7_document_id'); } public function photos() { if($this->photo) { return json_decode($this->photo); } else { return []; } } public function localtime() { $date = new DateTime($this->tweet_date); $date->setTimeZone(new DateTimeZone('US/Pacific')); // TODO: put in config or somewhere return $date; } public function twitter_permalink() { return 'https://twitter.com/'.($this->player ? $this->player->twitter : '_').'/status/'.$this->tweet_id; } public static function claimed_timeout() { // time out tweets if they aren't processed after the specified time $timeout = 300; $tweets = Tweet::where('claimed_at', '<', date('Y-m-d H:i:s', time()-$timeout))->where('processed', 0)->get(); foreach($tweets as $tweet) { $tweet->claimed_at = null; $tweet->save(); event(new NewTweetEvent($tweet)); } } public static function queued() { return Tweet::whereNull('claimed_at')->where('processed', 0) ->where('mission_id', '>', 0)->orderBy('tweet_date', 'asc'); } }