rooms = $rooms; $this->stickies = $stickied; } public const TOP_DEFAULT = 35; /** * @param CommunityRoom[] $rooms */ public static function takeRooms(array $rooms) { return new RoomSieve($rooms); } public function saveStickies() { $stickied = CommunityRoom::get_stickied_rooms($this->rooms, $rest); $rooms = $rest; return new RoomSieve($rooms, $stickied); } /** * @param CommunityRoom[] $rooms */ public function addRooms(array $rooms) { return new RoomSieve(array_merge($this->rooms, $rooms), $this->stickies); } public function apply(Closure $filter) { return new RoomSieve($filter($this->rooms), $this->stickies); } public function getWithStickies() { return [...$this->stickies, ...$this->rooms]; } public function getWithoutStickies() { return $this->saveStickies()->getRooms(); } public function getRooms() { return $this->rooms; } public function onlyTop(int $count = RoomSieve::TOP_DEFAULT) { $rooms = $this->rooms; return new RoomSieve(array_slice(array_reverse($rooms), 0, $count), $this->stickies); } public function exceptTop(int $count = RoomSieve::TOP_DEFAULT) { $rooms = $this->rooms; CommunityRoom::sort_rooms_num($rooms, 'active_users'); return new RoomSieve(array_slice(array_reverse($rooms), $count), $this->stickies); } private static function isIndexApproved(CommunityRoom $room): bool { return ( !$room->rated_nsfw() && $room->write && !$room->has_poor_staff_rating() && !empty($room->description) ); } public function applyStandardSort() { $rooms = $this->rooms; CommunityRoom::sort_rooms_str($rooms, 'name'); CommunityRoom::sort_rooms_by_server($rooms); return new RoomSieve($rooms, $this->stickies); } public function applyPreferentialSort() { $rooms = $this->rooms; CommunityRoom::sort_rooms_num($rooms,'created'); usort($rooms, function($a, $b) { return empty($b->description) - empty($a->description); }); usort($rooms, function(CommunityRoom $a, CommunityRoom $b) { return sign($a->get_numeric_staff_rating() - $b->get_numeric_staff_rating()); }); return new RoomSieve(array_reverse($rooms), $this->stickies); } public function indexApproved() { $rooms = array_values(array_filter($this->rooms, function($room) { return RoomSieve::isIndexApproved($room); })); return new RoomSieve($rooms, $this->stickies); } public function indexNonApproved() { $rooms = array_values(array_filter($this->rooms, function($room) { return !RoomSieve::isIndexApproved($room); })); return new RoomSieve($rooms, $this->stickies); } } ?>