namespace App\Models;
+use Illuminate\Broadcasting\PrivateChannel;
+use Illuminate\Database\Eloquent\BroadcastsEvents;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
+use Illuminate\Support\Arr;
-class Channel extends Model
-{
+class Channel extends Model {
+
+ use BroadcastsEvents;
use HasFactory;
+ public function broadcastOn($event) {
+ $channels = [
+ new PrivateChannel('Channel.'.$this->id),
+ ];
+ return $channels;
+ }
+
public function getCurrentEpisode() {
return $this->episodes()
->where('start', '<', now()->subMinutes(10))
->first();
}
+ public function getGuessingLeaderboard() {
+ return $this->winners()->selectRaw('(select t2.uname from guessing_winners t2 where t2.uid = guessing_winners.uid order by created_at desc limit 1) as name, sum(score) as score')->groupBy('uid')->orderBy('score', 'desc')->limit(10)->get();
+ }
+
public function hasActiveGuessing() {
return !is_null($this->guessing_start);
}
$distance = abs(intval($guess->guess) - intval($solution));
if (is_null($min_distance) || $distance == $min_distance) {
$candidates[] = $guess;
+ if (is_null($min_distance)) {
+ $min_distance = $distance;
+ }
} else if ($distance < $min_distance) {
$candidates = [$guess];
$min_distance = $distance;
return false;
}
+ public function listAnd($entries) {
+ $lang = empty($this->languages) ? 'en' : $this->languages[0];
+ if ($lang == 'de') {
+ return Arr::join($entries, ', ', ' und ');
+ }
+ return Arr::join($entries, ', ', ' and ');
+ }
+
public function crews() {
return $this->hasMany(ChannelCrew::class);
}
return $this->belongsTo(Organization::class);
}
+ public function winners() {
+ return $this->hasMany(GuessingWinner::class);
+ }
+
protected $casts = [
'chat' => 'boolean',
'chat_commands' => 'array',