add Tournaments and Guest Page, add template for empty sites, extend user and db service
This commit is contained in:
parent
23070a4f69
commit
093f0d6a94
@ -69,12 +69,12 @@ if __name__ == "__main__":
|
||||
Page(
|
||||
name="Guests",
|
||||
page_url="guests",
|
||||
build=lambda: pages.PlaceholderPage(placeholder_name="Teilnehmer"),
|
||||
build=pages.GuestsPage,
|
||||
),
|
||||
Page(
|
||||
name="Tournaments",
|
||||
page_url="tournaments",
|
||||
build=lambda: pages.PlaceholderPage(placeholder_name="Turniere"),
|
||||
build=pages.TournamentsPage,
|
||||
),
|
||||
Page(
|
||||
name="FAQ",
|
||||
|
||||
83
src/ez_lan_manager/pages/GuestsPage.py
Normal file
83
src/ez_lan_manager/pages/GuestsPage.py
Normal file
@ -0,0 +1,83 @@
|
||||
from typing import Optional
|
||||
|
||||
from rio import Column, Component, event, TextStyle, Text, Button, Row, TextInput, Spacer, TextInputChangeEvent
|
||||
|
||||
from src.ez_lan_manager import ConfigurationService, UserService, TicketingService, SeatingService
|
||||
from src.ez_lan_manager.components.MainViewContentBox import MainViewContentBox
|
||||
from src.ez_lan_manager.pages import BasePage
|
||||
from src.ez_lan_manager.types.User import User
|
||||
|
||||
|
||||
class GuestsPage(Component):
|
||||
table_elements: list[Button] = []
|
||||
users_with_tickets: list[User] = []
|
||||
user_filter: Optional[str] = None
|
||||
|
||||
|
||||
def __post_init__(self) -> None:
|
||||
user_service = self.session[UserService]
|
||||
all_users = user_service.get_all_users()
|
||||
ticketing_service = self.session[TicketingService]
|
||||
self.users_with_tickets = list(filter(lambda user: ticketing_service.get_user_ticket(user.user_id) is not None, all_users))
|
||||
|
||||
@event.on_populate
|
||||
async def on_populate(self) -> None:
|
||||
await self.session.set_title(f"{self.session[ConfigurationService].get_lan_info().name} - Teilnehmer")
|
||||
|
||||
def on_searchbar_content_change(self, change_event: TextInputChangeEvent) -> None:
|
||||
self.user_filter = change_event.text
|
||||
|
||||
def build(self) -> Component:
|
||||
seating_service = self.session[SeatingService]
|
||||
if self.user_filter:
|
||||
users = [user for user in self.users_with_tickets if self.user_filter.lower() in user.user_name or self.user_filter.lower() in str(user.user_id)]
|
||||
else:
|
||||
users = self.users_with_tickets
|
||||
self.table_elements.clear()
|
||||
for idx, user in enumerate(users):
|
||||
seat = seating_service.get_user_seat(user.user_id)
|
||||
self.table_elements.append(
|
||||
Button(
|
||||
content=Row(Text(text=f"{user.user_id:0>4}", align_x=0, margin_right=1), Text(text=user.user_name, grow_x=True, wrap="ellipsize"), Text(text="-" if seat is None else seat.seat_id, align_x=1)),
|
||||
shape="rectangle",
|
||||
grow_x=True,
|
||||
color=self.session.theme.hud_color if idx % 2 == 0 else self.session.theme.primary_color
|
||||
)
|
||||
)
|
||||
|
||||
return BasePage(
|
||||
content=Column(
|
||||
MainViewContentBox(
|
||||
Column(
|
||||
Text(
|
||||
text="Teilnehmer",
|
||||
style=TextStyle(
|
||||
fill=self.session.theme.background_color,
|
||||
font_size=1.2
|
||||
),
|
||||
margin_top=2,
|
||||
margin_bottom=2,
|
||||
align_x=0.5
|
||||
),
|
||||
TextInput(
|
||||
label="Suche nach Name oder ID",
|
||||
margin=1,
|
||||
margin_left=3,
|
||||
margin_right=3,
|
||||
on_change=self.on_searchbar_content_change
|
||||
),
|
||||
Button(
|
||||
content=Row(Text(text="ID ", align_x=0, margin_right=1), Text(text="Benutzername", grow_x=True), Text(text="Sitzplatz", align_x=1)),
|
||||
shape="rectangle",
|
||||
grow_x=True,
|
||||
color=self.session.theme.primary_color,
|
||||
style="plain",
|
||||
is_sensitive=False
|
||||
),
|
||||
*self.table_elements,
|
||||
Spacer(min_height=1)
|
||||
)
|
||||
),
|
||||
align_y=0
|
||||
)
|
||||
)
|
||||
40
src/ez_lan_manager/pages/TEMPLATE.py
Normal file
40
src/ez_lan_manager/pages/TEMPLATE.py
Normal file
@ -0,0 +1,40 @@
|
||||
from rio import Column, Component, event, TextStyle, Text
|
||||
|
||||
from src.ez_lan_manager import ConfigurationService
|
||||
from src.ez_lan_manager.components.MainViewContentBox import MainViewContentBox
|
||||
from src.ez_lan_manager.pages import BasePage
|
||||
|
||||
class PAGENAME(Component):
|
||||
@event.on_populate
|
||||
async def on_populate(self) -> None:
|
||||
await self.session.set_title(f"{self.session[ConfigurationService].get_lan_info().name} - PAGENAME")
|
||||
|
||||
def build(self) -> Component:
|
||||
return BasePage(
|
||||
content=Column(
|
||||
MainViewContentBox(
|
||||
Column(
|
||||
Text(
|
||||
text="HEADER",
|
||||
style=TextStyle(
|
||||
fill=self.session.theme.background_color,
|
||||
font_size=1.2
|
||||
),
|
||||
margin_top=2,
|
||||
margin_bottom=0,
|
||||
align_x=0.5
|
||||
),
|
||||
Text(
|
||||
text="BASIC TEXT",
|
||||
style=TextStyle(
|
||||
fill=self.session.theme.background_color,
|
||||
font_size=0.9
|
||||
),
|
||||
margin=1,
|
||||
wrap=True
|
||||
)
|
||||
)
|
||||
),
|
||||
align_y=0
|
||||
)
|
||||
)
|
||||
40
src/ez_lan_manager/pages/TournamentsPage.py
Normal file
40
src/ez_lan_manager/pages/TournamentsPage.py
Normal file
@ -0,0 +1,40 @@
|
||||
from rio import Column, Component, event, TextStyle, Text
|
||||
|
||||
from src.ez_lan_manager import ConfigurationService
|
||||
from src.ez_lan_manager.components.MainViewContentBox import MainViewContentBox
|
||||
from src.ez_lan_manager.pages import BasePage
|
||||
|
||||
class TournamentsPage(Component):
|
||||
@event.on_populate
|
||||
async def on_populate(self) -> None:
|
||||
await self.session.set_title(f"{self.session[ConfigurationService].get_lan_info().name} - Turniere")
|
||||
|
||||
def build(self) -> Component:
|
||||
return BasePage(
|
||||
content=Column(
|
||||
MainViewContentBox(
|
||||
Column(
|
||||
Text(
|
||||
text="Turniere",
|
||||
style=TextStyle(
|
||||
fill=self.session.theme.background_color,
|
||||
font_size=1.2
|
||||
),
|
||||
margin_top=2,
|
||||
margin_bottom=0,
|
||||
align_x=0.5
|
||||
),
|
||||
Text(
|
||||
text="Aktuell ist noch kein Turnierplan hinterlegt.",
|
||||
style=TextStyle(
|
||||
fill=self.session.theme.background_color,
|
||||
font_size=0.9
|
||||
),
|
||||
margin=1,
|
||||
wrap=True
|
||||
)
|
||||
)
|
||||
),
|
||||
align_y=0
|
||||
)
|
||||
)
|
||||
@ -9,4 +9,6 @@ from .RegisterPage import RegisterPage
|
||||
from .ImprintPage import ImprintPage
|
||||
from .ContactPage import ContactPage
|
||||
from .RulesPage import RulesPage
|
||||
from .FaqPage import FaqPage
|
||||
from .FaqPage import FaqPage
|
||||
from .TournamentsPage import TournamentsPage
|
||||
from .GuestsPage import GuestsPage
|
||||
|
||||
@ -518,3 +518,18 @@ class DatabaseService:
|
||||
except Exception as e:
|
||||
logger.warning(f"Error setting user profile picture: {e}")
|
||||
return None
|
||||
|
||||
def get_all_users(self) -> list[User]:
|
||||
results = []
|
||||
cursor = self._get_cursor()
|
||||
try:
|
||||
cursor.execute("SELECT * FROM users;")
|
||||
self._connection.commit()
|
||||
except Exception as e:
|
||||
logger.warning(f"Error getting all users: {e}")
|
||||
return results
|
||||
|
||||
for user_raw in cursor.fetchall():
|
||||
results.append(self._map_db_result_to_user(user_raw))
|
||||
|
||||
return results
|
||||
|
||||
@ -16,6 +16,9 @@ class UserService:
|
||||
def __init__(self, db_service: DatabaseService) -> None:
|
||||
self._db_service = db_service
|
||||
|
||||
def get_all_users(self) -> list[User]:
|
||||
return self._db_service.get_all_users()
|
||||
|
||||
def get_user(self, accessor: Optional[Union[str, int]]) -> Optional[User]:
|
||||
if accessor is None:
|
||||
return
|
||||
|
||||
Loading…
Reference in New Issue
Block a user