teamChannelId = currentTeam()?->id; } public function ignoreStaleTeamChannelEvent(): void { $this->skipRender(); } /** * The data of a team channel event. Events about one resource send it encrypted in `payload`, * because the team channel also reaches members without access to that resource. * * @param array $event * @return array */ protected function teamChannelPayload(array $event): array { if (! array_key_exists('payload', $event)) { return $event; } try { // The payload comes from the browser: unserialize it without classes. $payload = unserialize(decrypt($event['payload'], false), ['allowed_classes' => false]); } catch (DecryptException) { return []; } return is_array($payload) ? $payload : []; } /** * @param array $handlers broadcast event name => handler method * @return array */ protected function teamChannelListeners(array $handlers): array { $currentTeamId = currentTeam()?->id; $teamId = $this->teamChannelId ?? $currentTeamId; if ($teamId === null) { return []; } $isStale = $teamId !== $currentTeamId; $listeners = []; foreach ($handlers as $event => $handler) { $listeners["echo-private:team.{$teamId},{$event}"] = $isStale ? 'ignoreStaleTeamChannelEvent' : $handler; } return $listeners; } }