room; } public function getAttendee(): Attendee { return $this->attendee; } public function getSession(): ?Session { return $this->session; } public function setSession(Session $session): void { $this->session = $session; } public function isGuest(): bool { $participantType = $this->attendee->getParticipantType(); return \in_array($participantType, [self::GUEST, self::GUEST_MODERATOR], true); } public function hasModeratorPermissions(bool $guestModeratorAllowed = true): bool { $participantType = $this->attendee->getParticipantType(); if (!$guestModeratorAllowed) { return \in_array($participantType, [self::OWNER, self::MODERATOR], true); } return \in_array($participantType, [self::OWNER, self::MODERATOR, self::GUEST_MODERATOR], true); } public function canStartCall(IConfig $config): bool { if ($this->room->getType() === Room::TYPE_NOTE_TO_SELF) { return false; } $defaultStartCall = (int)$config->getAppValue('spreed', 'start_calls', (string)Room::START_CALL_EVERYONE); if ($defaultStartCall === Room::START_CALL_NOONE) { return false; } if (!($this->getPermissions() & Attendee::PERMISSIONS_CALL_START)) { return false; } if ($defaultStartCall === Room::START_CALL_EVERYONE) { return true; } if ($defaultStartCall === Room::START_CALL_USERS && (!$this->isGuest() || $this->hasModeratorPermissions())) { return true; } if ($defaultStartCall === Room::START_CALL_MODERATORS && $this->hasModeratorPermissions()) { return true; } return false; } public function getPermissions(): int { $permissions = $this->getPermissionsFromFallbackChain(); if ($this->hasModeratorPermissions()) { // Moderators can always do everything $permissions = Attendee::PERMISSIONS_MAX_DEFAULT; } return $permissions; } protected function getPermissionsFromFallbackChain(): int { if ($this->getAttendee()->getPermissions() !== Attendee::PERMISSIONS_DEFAULT) { return $this->getAttendee()->getPermissions(); } if ($this->room->getDefaultPermissions() !== Attendee::PERMISSIONS_DEFAULT) { // The conversation has some permissions set return $this->room->getDefaultPermissions(); } return Server::get(Config::class)->getDefaultPermissions(); } }