%& --translate-file latin2pl
\documentclass[a4paper,10pt]{article}

\usepackage{polski}
\usepackage[latin2]{inputenc}



% Marginesy
\textwidth17cm \textheight24.5cm \topmargin-40pt
\oddsidemargin-0.04cm

%%%%%%%%%%%%%%%
% To zmieniac %
%%%%%%%%%%%%%%%
% Nazwa, wersja
\newcommand{\nazwaprojektu}{Snatch, serwer brydżowy}
\newcommand{\nazwadokumentu}{techniczne przypadki użycia}
\newcommand{\wersjadokumentu}{1.0}

\title{\nazwaprojektu \ --- \nazwadokumentu}
\author{Micha\l{} Korch \and Piotr Tomanek \and Marcin Pilipczuk \and Piotr Tabor}

\begin{document}

% Definicja naglowka posrodku strony
\newcommand{\nagl}[1]{\par\begin{center}{\bf{#1}}\end{center}\par}
% Definicja tego na poczatku
\newcommand{\pocz}{\par {\bf{\nazwaprojektu}}\par {\bf{\nazwadokumentu}}\par {\bf{Wersja: \wersjadokumentu}}\par}

%% Historia
% environment
\newenvironment{historia}{\nagl{Historia}\begin{tabular*}{17cm}{c|c|c|l} {\bf{Data}} & {\bf{Wersja}} & {\bf{Autor}} & {\bf{Zmiany}} \\}{\end{tabular*}}
% item
\newcommand{\hist}[4]{#1 & #2 & #3 & \parbox[t]{9cm}{#4} \\ }

%% Spis tresci
\newcommand{\spistresci}{\tableofcontents}

\newcommand{\wfp}{www.bardzofajnyportal.pl}

\maketitle
\par
{\bf{Wersja: \wersjadokumentu}}
\par

\begin{historia}

\hist{2005-05-05}{0.1}{Marcin Pilipczuk}{Wzorzec}
\hist{2005-05-09}{0.2}{Michał Korch}{Uzupełnienie listy przypadków użycia}
\hist{2005-05-15}{1.0}{Marcin Pilipczuk}{Napisanie 16 przykładowych przypadków użycia, przejrzenie listy przypadków i dopisanie kilku brakujących.}
\end{historia}

\spistresci

\newpage
\newcommand*{\strz}{$>$}

%%%%%%%%% Tu sa definicje rzeczy do tucow
%% Pojedyncze pole to subsubsection
% Jesli to co mamy wypisac to -, to nic nie wypisujemy
\newcommand{\pole}[2]{
  \if#2-
  \else
  \subsubsection{#1}
  #2
  \fi}
%% Licznik do alternatywnych flowow w TUCu.
\newcounter{inneflowy}
%% Caly tuc
% Tuca uzywamy:
% \tuc{NAZWA}
%     {Krotki opis, jeden akapit}
%     {Przebiegi - alternatywne uzywajac \inny}
%     {Preconditiony - ze zalogowany, ze costam, w \wymog}
%     {Postconditiony - co zostawia po tym, w \zostawia}
%     {Specjalne wymogi co do przebiegu - standardy, i inne bzdurki, uwagi, mozliwe rozszerzenia}
\newcommand{\tuc}[6]{
\if#1-
\else
  \subsection{#1}
  \if#2-
  \else
  \subsubsection{Opis}
  #2\par
  \fi
  \if#3-
  \else
  \subsubsection{Przebieg}
  \setcounter{inneflowy}{0}
  #3\par
  \fi
  \if#4-
  \else
  \subsubsection{Wymogi wstępne}
  Aby przypadek został wykonany, muszą zostać spełnione następujące kryteria.
  \begin{itemize}
  #4
  \end{itemize}
  \fi
  \if#5-
  \else
  \subsubsection{Stan po przypadku}
  Po wykonaniu przypadku użycia, system spełnia następujące warunki:
  \begin{itemize}
  #5
  \end{itemize}
  \fi
  \if#6-
  \else
  \subsubsection{Uwagi}
  #6
  \fi
\fi}
%%% Te dodatki, zdefiniowane, aby je latwo zmieniac.
%% \inny{Tresc} - alternatywny przebieg
\newcommand{\inny}[1]{
  \addtocounter{inneflowy}{1}
  \par
  {\bf{Alternatywny przebieg nr \arabic{inneflowy}.}}
  \par
  #1
  \par}
%% \wymog , \zostawia - pojedyncze wymogi i postwymogi
\newcommand{\wymog}[1]{ \item #1 }
\newcommand{\zostawia}[1]{ \item #1 }
%%%%%%%%%%%%%%%%%%%%%%%%

\section{Wstęp}

\subsection{Cel dokumentu}

Dokument ten określa sposób działania systemu i realizowania jego funkcjonalności,
  w szczególności realizowania Biznesowych Przypadków Użycia. Prezentacja działania
  odbywa się przez Techniczne Przypadki Użycia, czyli pojedyncze akcje systemu.

Dokument ten stanowi załącznik do ,,Umowy o wykonanie projektu''
dla udziałowca. Wszelkiem zmiany opisanej w tym dokumencie
funkcjonalno\'{s}ci wymagają stosownego aneksu do umowy.

\subsection{O projekcie}
Dokument ten dotyczy projektu rozgrywek brydżowych przez Internet. Działający projekt ma umożliwić grę towarzyską
i organizowanie turniejów brydżowych przez Internet w ramach portalu www.bardzofajnyportal.pl, który jest udziałowcem
projektu. Zyski mają płynąć z zamieszczanych reklam.

\subsection{Definicje i skr\'{o}ty}
\begin{description}

\item[projekt, serwis] - to, co ten dokument opisuje - projekt rozgrywek brydżowych przez Internet.
\item[gracz] - klient grający w brydża przez działający projekt.
\item[widz] - klient obserwujący rozgrywki.
\item[sędzia] - klient mający większe uprawnienia, organizujący turnieje i nadzorujący je.
\item[udziałowiec] - portal www.bardzofajnyportal.pl, który jest udziałowcem i docelowym właścicielem binarnej wersji projektu.
\item[zesp\'{o}\l{}, Snatch] - zesp\'{o}\l{} wykonuj\k{a}cy projekt.

\end{description}

\subsection{Źródła}

Dokument ten korzysta

\begin{itemize}
\item Z Wizji Biznesowej w kwestii ogólnego wyglądu projektu.
\item Z Wizji, a w szczególności z zawartym w niej opisie funkcjonalności projektu.
\item Z Biznesowych Przypadków użycia, opisując, jak będą one realizowane w systemie.
\item Z SADa, uszczegóławiając sposób realizacji systemu.
\end{itemize}

\subsection{Streszczenie}
W dokumencie tym szegółowo zostaje opisany sposób realizacji funkcjonalno\'{s}ci
projektu poprzez pojedyncze Techniczne Przypadki Użycia.

\newpage

% Teraz bede dzielil przypadki uzycia na rozdzialy

\section{Przypadki użycia --- obsługa bazy danych}

\tuc{Rejestracja użytkownika}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Logowanie użytkownika}% nazwa
{Ten przypadek odbywa się w momencie, gdy aplikacja kliencka połączyła się z demonem nadzorującym i wysłała dane do autoryzacji.
Demon nadzorujący wykonuje zapytanie do bazy danych, otrzymując w zamian informacje o błędnym haśle lub tymczasowy klucz zalogowanego klienta.}% Krotki opis
{Demon nadzorujący tworzy nowy obiekt klasy BazaDanychKlient, uruchamiając jego konstruktor z podaniem loginu i hasła użytkownika
(wysłane przez aplikację kliencką. Zostaje stwierdzone, czy użytkownik o takim loginie posiada takie hasło. Hasła w bazie danych nie są trzymane jawnie,
 a jest trzymana ich suma MD5. W przypadku stwierdzenia różnicy w kodzie MD5 podanego hasła i sumy zapisanej w bazie danych, zwracany jest błąd. 
 W przeciwnym przypadku zostaje wygenerowany tymczasowy klucz (taki ,,cookies''), poprzez policzenie sumy MD5 na hasle, loginie, dacie systemowej
 i losowo wygenerowanej liczbie oraz doklejeniu do tego numeru porządkowego wygenerowanego cookiesa (jako liczba 64-bitowa). 
 Ten ,,cookies'' zostaje zwrócony oraz zapisany w bazie danych, w rekordzie użytkownika.
 \inny{Procedura logowania się użytkownika, czyli wywołanie konstruktora klasy BazaDanychKlient z parametrami login i hasło, może też być
 dokonana przez generację dynamicznych stron www w momencie logowania się użytkownika. Wówczas otrzymany klucz służy jako identyfikator sesji.}}% Flow
{-}% Preconditiony
{\zostawia{Użytkownik zostaje zalogowany i otrzymuje tymczasowy klucz. Przy następnych połączeniach, z serwerem turnieju bądź z serwerem rozdania,
autoryzacja będzie następować poprzed podanie tymczasowego klucza i porównanie go z kluczami w bazie danych.}}% Postconditiony
{Doklejenie numeru ,,cookiesa'' powoduje unikalność kluczy. W momencie wylogowania użytkownika i zamknięcia aplikacji klienckiej klucz z bazy danych
zostanie usunięty.}% Uwagi, superrequirementy, i inne taborety.

\tuc{Autoryzacja przez identyfikator sesji}% nazwa
{W momencie logowania aplikacja kliencka otrzymała od serwera tymczasowy klucz. Przy połączeniach do serwerów turnieju i rozdań korzysta z tego
klucza. Ten przypadek opisuje autoryzację użytkownika na podstawie podanego klucza}% Krotki opis
{Dowolny program: serwer turnieju, rozdania, proces czatu, skrypty tworzące dynamiczne strony www - po nawiązaniu połączenia z klientem otrzymują od niego
tymczasowy klucz. Tworzą one instancję klasy BazaDanychKlient konstruktorem, którego argumentem jest tymczasowy klucz. W bazie danych jest wyszukiwane,
czy istnieje użytkownik z takim kluczem. Jeśli tak, zwracane są jego dane i wypełniane pola instancji klasy BazaDanychKlient (login, status).
W przeciwnym przypadku zgłaszany jest błąd.}% Flow
{\wymog{Aby proces autoryzacji się powiódł, użytkownik wcześniej musi się zalogować i otrzyma wtedy identyfikator sesji (klucz) - patrz poprzedni przypadek.}}% Preconditiony
{\zostawia{Tożsamość użytkownika została potwierdzona.}}% Postconditiony
{Jest to procedura występująca na początku każdego nawiązywania połączenia, poza logowaniem się.}% Uwagi, superrequirementy, i inne taborety.

\tuc{Pobranie lub aktualizacja danych użytkownika}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Usunięcie użytkownika}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Włożenie, generacja lub wyjęcie danych o rozdaniu do rozegrania}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Włożenie lub wyjęcie wyników rozdania}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Pobranie przebiegu dawnego rozdania}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Dodanie lub usunięcie rankingu}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Stworzenie migawki (snapshot) rankingu}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Pobranie rankingu}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Rejestracja turnieju}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Pobranie lub aktualizacja danych turniejowych}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Włożenie lub wyjęcie wyników turnieju}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wyszukanie gracza}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wzięcie reklamy do wyświetlenia}% nazwa
{Ten przypadek opisuje proces wybrania oraz pobrania reklamy, którą ma wyświetlic aplikacja kliencka lub być na stronie www.
Jest to opis działania funkcji bazy danych ,,daj reklamę''. Aplikacja kliencka wyświetla jedną reklamę na górze swojego okienka,
na każdej stronie www też znaduje się baner.}% Krotki opis
{Demon nadzorujący lub generator stron www potrzebuje reklamę do wysłania klientowi lub do zamieszczenia na stronie. Tworzy nową instancję
klasy BazaDanychReklama, konstruktorem bezarugmentowym. Zostaje zadane zapytanie do bazy danych o aktualnie dostępną reklamę z największym ilorazem
$\frac{I}{T}$, gdzie $I$ jest liczbą pozostałych wykupionych wyświetleń reklamy, a $T$ czasem do końca wyświetlania reklamy. Zostaje zwiększony licznik
wyświetleń, a instancja klasy BazaDanychReklama posiada pobrany z bazy danych baner, który następnie potrafi przekazać serwisowi www lub demonowi nadzorującemu.
\inny{W przypadku, gdy nie ma reklamy do wyświetlenia, procedura zwraca czysty, biały obrazek.}}% Flow
{\wymog{Ten przypadek jest wywoływany, gdy klient prosi o nową stronę www lub otwierza się nowe okienko w aplikacji klienckiej.}
\wymog{Musi istnieć reklama do wyświetlenia, w przeciwnym razie konstruktor zwraca pusty, biały obrazek (nie błąd).}}% Preconditiony
{\zostawia{Zostaje wybrana reklama do wyświetlenia.}}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Pobranie danych o reklamodawcy, w tym statystyk}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Dodanie nowej reklamy}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Pobranie statystyk działania serwisu}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Czyszczenie bazy danych - usunięcie mniej istotnych turniejów i rozdań towarzyskich}% nazwa
{Jest to funkcja wewnątrz bazy danych, napisana w PL/SQL, wywoływana co noc przez CRON-a. Powoduje ona usunięcie informacji 
o rozgrywkach towarzyskich tego dnia oraz o niższych rangą turniejach starszych niż czas określony w pliku konfiguracyjnym (zapewne dwa tygodnie).
}% Krotki opis
{O godzinie 3:00 CRON uruchamia funkcję czyszczącą, napisaną w PL/SQL. Dokonuje ona dwie rzeczy: usuwa rozdania torzarzyskie z tego dnia oraz usuwa
turnieje nie odznaczone jako ważne (każdy turniej standardowo jest niskiej rangi) starsze niż ustalony czas.}% Flow
{-}% Preconditiony
{-}% Postconditiony
{Służy to ograniczeniu przyrostu bazy danych w informację, które z dużym prawdopodobieństwem nikt nie będzie już oglądał.}% Uwagi, superrequirementy, i inne taborety.

\tuc{Stworzenie kopii zapasowej bazy danych}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\newpage

\section{Przypadki użycia --- serwer pojedynczego rozdania}

\tuc{Uruchomienie serwera pojedynczego rozdania}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Łączenie się gracza, widza lub sędziego}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Przeprowadzenie licytacji}% nazwa
{Serwer pojedynczego rozdania, po podłączeniu się graczy i po wysłaniu im ich kart, rozpoczyna licytację. Zbiera od wszystkich kolejno odzywki
i zakańcza licytację zgodnie z zasadami brydża - po 4 pasach na początku, lub po 3 później.}% Krotki opis
{Serwer, po stwierdzeniu, że wszyscy się podłączyli, rozpoczyna licytację. Odbiera kolejno odzywki licytacyjne (patrz przypadek Odebranie odzywki), po czym
wysyła je do wszystkich przy stoliku - innych graczy i widzów. W przypadku stwierdzenia trzech pasów, wysyła do wszystkich sygnał o końcu licytacji
i kontrakcie rozgrywanym i rozpoczyna rozdanie (patrz przypadek Przeprowadzenie rozdania).
\inny{W przypadku 4 pasów na początku, serwer wysyła wszystkim informację o tym fakcie i zakańcza rozdanie bez fazy rozgrywki.}}% Flow
{\wymog{Rozpoczelo sie rozdanie.}
\wymog{Wszyscy gracze się podłączyli.}}% Preconditiony
{\zostawia{Został ustalony kontrakt i przeprowadzona licytacja.}}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Przeprowadzenie rozdania}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

% To jest podprzypadek powyzszych
\tuc{Odebranie odzywki lub położonej karty i wysłanie do wszystkich obecnych przy stoliku}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

% To sie uzywa, jak poprosi o to jakis uzytkownik, tudziez na poczatku kazdy gracz dostaje
\tuc{Wysłanie kart jednego z graczy}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wysłanie wyników rozdania i zakończenie pracy}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Alternatywne działanie: podanie wyników dawnego rozdania}% nazwa
{Serwer pojedynczego rozdania może być uruchmiony nie tylko do przeprowadzenia rozgrywki, ale też do udostępnienia danych o dawniejszej rozgrywce widzowi.
Jest on wtedy uruchomiony przez demona nadzorującego lub serwer turnieju (dla sędziego oglądającego zakończone juz rozdanie) i tylko jeden
widz (sędzia) się do niego podłącza.}% Krotki opis
{Serwer rozdania zostaje uruchomiony z parametrami: numer starego rozdania oraz klucz klienta, który zażyczył sobie rozdanie. Oczekuje na połączenie
od klienta (do 1 minuty) a następnie, po połączeniu, pobiera z bazy danych rozdanie i wysyła klientowi, korzystając z BridgeML. Po wysłaniu zamyka połączenie
i ginie.}% Flow
{\wymog{Klient jest zalogowany.}
\wymog{Klient zażyczył sobie obejrzenie starego rozdania, ew. sędzia w czasie turnieju chce obejrzeć stare rozdanie.}}% Preconditiony
{\zostawia{Klient otrzymał pełen zapis rozdania.}}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\newpage

\section{Przypadki użycia --- serwer turnieju}

\tuc{Uruchomienie serwera turnieju}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Podłączenie się sędziego, ruszenie turnieju}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Podłączenie się gracza lub widza}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Pobranie lub zmiana konfiguracji turnieju}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Przeprowadzenie rozgrywki -- uruchomienie serwera rozgrywki}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Przeprowadzenie turnieju}% nazwa
{Jest to ogólny przypadek opisujący przeprowadzenie turnieju od momentu startu turnieju po zalogowaniu się wszystkich graczy do końca turnieju
i wysłania sędziemu wyników. Wywołuje on, w miarę potrzeby, poniższe przypadki.}% Krotki opis
{Po otrzymaniu sygnał o starcie turnieju (po zalogowaniu się wszystkich graczy) serwer turnieju przeprowadza kolejne fazy rozgrywek, zdefiniowane
w schemacie turnieju. Ma już informację o turnieju w postaci klasy Turniej (odbył się już przypadek ,,pobranie konfiguracji turnieju'') oraz
instancję klasy SchematTurnieju. Klasa SchematTurnieju posiada metody start() oraz następnaFaza(), która zwaraca kolekcję rozdań w kolejnej fazie turnieju
(start resetuje turniej). Jedno rozdanie zawiera informację o tym kto gra przy jednym stoliku, w postaci kluczy tymczasowych graczy, oraz informację
o kartach (numer rozdania w bazie danych). Serwer turnieju,
wywoławszy metodę następnaFaza(), uruchamia dla każdej rozgrywki serwer rozgrywki i przekazuje mu, przez argumenty wywołania, klucze graczy oraz informacje o rozdaniu (numer rozdania w bazie danych) - patrz przypadek Przeprowadzenie rozgrywki. Następnie wysyła każdemu graczowi, do którego stolika ma się teraz 
  podłączyć. Po zakończeniu fazy, serwer turnieju rozpoczyna kolejną fazę lub kończy turniej. Wówczas zostaje wywołany przypadek ,,wysłanie wyników turnieju
  do sędziego''.
\inny{W przypadku dostania niestandardowych informacji od graczy lub sędziego: zerwanie turnieju, opuszczenie turnieju, nałożenie kary, prośba o rozmowę,
serwer turnieju wywołuje odpowiednie przypadki użycia, opisane w tym rozdziale.}}% Flow
{\wymog{Turniej się rozpoczął.}
\wymog{Sędzia jest zalogowany i wystartował turniej.}
\wymog{Gracze są zalogowani.}}% Preconditiony
{\zostawia{Został przeprowadzony turniej, teraz tylko sędzia musi zatwierdzić jego wyniki.}}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Przyjęcie prośby o rozmowę}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Przyjęcie decyzji sędziego w sprawie kary lub usunięcia gracza}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Przejście gracza do nowego stolika}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Opuszczenie turnieju przez gracza}% nazwa
{Ten przypadek opisuje możliwość opuszczenia turnieju przez gracza w dwóch przypadkach: w przypadku usunięcia gracza przez sędziego, bądź to 
w czasie trwania turnieju, bądź na początku, gdyż nie pojawił się jego partner, oraz dobrowolne opuszczenie gry, które musi być zatwierdzone
przez sędziego.}% Krotki opis
{Gdy gracz sam chce opuścić turniej, jego aplikacja kliencka wysyła taki komunikat do serwera (zgodnie z protokołem Bridge Transfer Protocol).
Serwer wysyła zapytanie do sędziego i oczekuje odpowiedzi. W przypadku zezwolenia, serwer rozłącza się z klientem oraz wyrzuca z gry
jego partnera, wysyłając mu komunikat, że jego partner opuścił grę i zamykając połączenie. Przy podliczaniu punktów przyjmuje się, że
para grałaby średnią całej sali, a para, która by grała z opuszczoną parą, pauzuje w trakcie trwania kolejnej fazy.
W przypadku braku akceptacji sędziego, do gracza wysyłana jest prośba o nie odchodzenie i granie dalej.
\inny{W przypadku wyrzucenia graczy na początku trwania turnieju, z powodu braku partnera, z przyczyn oczywistych partner nie jest wyrzucany,
oraz schemat rozdania jest przebudowywany przez sędziego (patrz przypadek ,,Zmiana konfiguracji turnieju'') by uwzględnić brak pary.}
\inny{W przypadku wyrzucenia graca przez sędziego, sędzia wysyła serwerowi komunikat o wyrzucenia gracza i jego partnera i serwer wysyła każdemu
zainteresowanemu klientowi informację o wyrzuceniu i zamyka połączenie.}
\inny{Jeśli gracz zerwie połączenie z serwerem i nie następuje odnowienie połączenia, do sędziego wysyłany jest komunikat z tą informację. 
Zostaje wyrzucony z rozgrywek partner tamtego gracza i dalej są oni traktowani jakby opuścili turniej.}}% Flow
{\wymog{Trwa turniej lub też turniej się rozpoczyna i brakuje zarejestrowanego gracza.}
\wymog{Gracz chciał zrezygnować, sędzia chce wyrzucić gracza bądź brakuje partnera gracza.}}% Preconditiony
{\zostawia{Para graczy opuszcza turniej. Jeśli stało się to po początkach rozgrywek, są oni traktowani jak średnia sali w wynikach rozdań.}}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Zerwanie turnieju}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wysłanie wyników rozdania do sędziego}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Przyjęcie prośby sędziego o wyświetlenie rozegranej już rozgrywki}% nazwa
{Sędzia może poprosić o wyświetlenie rozdania, które już się zakończyło. W tym celu prosi o to serwer turnieju, który uruchamia serwer rozdania,
który wysyła informacje dla sędziego.}% Krotki opis
{Aplikacja sędziowska wysyła żądanie do serwera, podając numer rozdania w tym turnieju. Serwer stwierdza, jaki numer miało to rozdanie w bazie danych
(ma te informacje w swoich zmiennych, a dokładniej w instancji klasy SchematTurnieju) i wywołuje serwer rozdania, podając mu klucz i numer rozdania,
a aplikacji sędziowskiej wysyła, z czym ma się połączyć. Następnie serwer rozdania wysyła sędziemu informacje o rozgrywce (patrz przypadek 
    ,,Alternatywne działanie: podanie wyników dawnego rozdania''). }% Flow
{\wymog{Trwa turniej.}
\wymog{Odbyło się rozdanie, o którym mowa.}
\wymog{Aplikacja sędziowska zadała pytanie o to rozdanie.}}% Preconditiony
{\zostawia{Aplikacja sędziowska dostała informacje o rozdaniu.}}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Odebranie przetworzonych wyników od sędziego}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Zakończenie turnieju}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\newpage

\section{Przypadki użycia --- aplikacja kliencka}

\tuc{Połączenie się z demonem nadzorującym}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Logowanie użytkownika}% nazwa
{Jest to przypadek odbywający się zawsze na początku działania aplikacji klienckiej, po połączeniu z demonem nadzorującym.
Powoduje on przesłanie loginu i hasła do demona i otrzymanie w zamian klucza tymczasowego (identyfikatora sesji) bądź informacji o błędzie.}% Krotki opis
{Po połączeniu się z demonem nadzorującym aplikacja kliencka wyświetla pola na wpisanie loginu i hasła użytkownika. Wysyła je demonowi, oczekuje
odpowiedzi w postaci klucza tymczasowego. Po dostaniu klucza informuje użytkownika, że logowanie się powiodło i przystępuje do pobrania
listy graczy oraz stolików i wyświetlenia menu.
\inny{W przypadku dostania odpowiedzi o błędym haśle, aplikacja kliencka ponawia pytanie o login i hasło.}}% Flow
{\wymog{Aplikacja kliencka została uruchomiona.}
\wymog{Zostało nawiązane połączenie z demonem nadzorującym.}}% Preconditiony
{\zostawia{Użytkownikowi został przydzielony tymczasowy klucz - identyfikator sesji.}}% Postconditiony
{Połączenie odbywa sie przez protokół SSL, w związku z tym nie ma obaw o przesyłanie hasła.}% Uwagi, superrequirementy, i inne taborety.

\tuc{Rejestracja użytkownika}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Zmiana danych użytkownika, w tym prośba o zostanie sędzią}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wylogowanie użytkownika, rozłączenie}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Pobranie i wyświetlenie aktualnej listy osób dostępnych do gry}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Stworzenie nowego towarzystkiego stolika}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Podejście do istniejącego stolika (w tym także w trakcie turnieju)}% nazwa
{Gracz, w czasie trwania towrzyskich rozgrywek, może kliknąć na stolik i wówczas otwiera się okienko z tym stolikiem, 
jego aplikacja nawiązuje połączenie z serwerem rozdania. W trakcie trwania turnieju, to aplikacja kliencka dostaje rozkaz
podłączenia się pod kolejne rozdanie po skończeniu poprzedniego.}% Krotki opis
{Gracz, mając wyświetloną listę stolików towarzyskich, klika na jeden. Jego aplikacja wysyła do demona nadzorującego żądanie połączenie z rozdaniem.
wysyła numer stolika. Pojawia się drugie okienko, przedstawiające rozdanie.
  Demon zestawia połączenie z serwerem rozdania. Aplikacja kliencka wysyla serwerowi rozdania klucz tymczasowy w celu autoryzacji. Dostaje informację
  o stanie stolika (kto jest, kto gra). Od tej chwilii jest widzem przy stoliku.
\inny{W przypadku turnieju, odbywa się to inaczej. Serwer turnieju wysyła do aplikacji klienckiej komendę podejścia do stolika (połączenia sie z serwerem
    rozdania) i zestawia to połączenie. Aplikacja kliencka nawiązuje połączenie, wysyła klucz tymczasowy i automatycznie zasiada przy swoim miejscu
  (patrz przypadek ,,usiądnięcie przy stoliku''). }}% Flow
{\wymog{Gracz jest zalogowany.}
\wymog{Gracz klinął na stoliku, do którego chce podejść.}
\wymog{W czasie turnieju: zaczyna się kolejna faza turnieju, serwer turnieju wysłał żądanie podejścia do stolika.}}% Preconditiony
{\zostawia{Następuje połączenie aplikacji klienckiej z serwerem rozdania.}
\zostawia{Zostaje wyświetlone okienko ze stanem stolika.}
\zostawia{W przyapdku turnieju, gracz zasiada przy stoliku automatycznie.}}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Usiądnięcie przy stoliku}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Odejście od stolika}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Zaproszenie kogoś do własnego stolika}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wyrzucenie kogoś z własnego stolika}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Przeprowadzenie rozdania towarzyskiego}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wyświetlenie cudzej odzywki bądź położonej karty}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Odezwanie się w licytacji bądź położenie karty}% nazwa
{Jest to mały przypadek, element całego rozdania. Jest to pojedyncza decyzja gracza - odzywka licytacyjna bądź położenie karty.}% Krotki opis
{Gracz klika na odpowiednią kartę lub odzywkę licytacyjną spośród wyświetlonych. Aplikacja kliencka weryfikuje poprawność zagrania (zgodność
    kolorów w przypadku karty, wysokość w przypadku licytacji). W przypadku błędu, informuje o tym użytkownika i nic nie robi. 
Jeśli zagranie jest poprawne, wysyła je do serwera rozdania (w formacie BridgeML, protokół Bridge Transfer Protocol) i oczekuje na potwierdzenie - 
serwer wysyła zagranie do wszystkich, też do autora zagrania.}% Flow
{\wymog{Trwa rozdanie.}
\wymog{Gracze są podłączeni do serwera rozdania.}
\wymog{Teraz jest kolej tego gracza i trwa odpowiednia faza rozdania (licytacja bądź rozgrywka).}}% Preconditiony
{\zostawia{Zostaje wykonane zagranie.}}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Podsumowanie rozdania, zamknięcie stolika}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Rozmowa z kimś przez czat}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wyświetlenie listy dostępnych turniejów}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Rejestracja do turnieju}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Dołączenie się do turnieju}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Opuszczenie turnieju i bycie wyrzuconym z turnieju}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Otrzymanie komunikatu o końcu turnieju, obejrzenie wyników}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wyświetlenie FAQ lub manuala}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wyświetlenie określonego rankingu bądź listy rankingów}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wyszukanie gracza}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Przekierowanie na określoną stronę serwisu www \wfp}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Pobranie i wyświetlenie reklamy}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\newpage

\section{Przypadki użycia --- aplikacja sędziowska}

Występują tu przypadki użycia związane z aplikacją gracza (bo aplikacja sędziego jest jej szerszą wersją), a oprócz tego następujące przypadki:

\tuc{Tworzenie nowego turnieju}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Oglądanie i edycja ustawień turnieju}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wystartowanie turnieju przez sędziego}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Usunięcie nieobecnych graczy i ich ewentualnych partnerów}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Ruszenie turnieju}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Udzielenie odpowiedzi na pytanie gracza}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wysłanie komunikatu do gracza}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Nałożenie kary punktowej}% nazwa
{Sędzia w czasie turnieju może zechcieć nałożyć karę punktową na gracza. Ten przypadek opisuje przebieg nałożenia kary od czasu
decyzji sędziego do wysłania tej decyzji do serwera.}% Krotki opis
{Sędzia klika na liście graczy w turnieju prawym klawiszem na gracza, którego chce ukarać. Wybiera z menu, które się pojawi opcję ,,kara''.
Pojawia się okienko z polem do wpisania wysokości kary oraz komentarza. Sędzia po wypełnieniu klika OK lub Anuluj. W przypadku OK, aplikacja
weryfikuje czy pole ,,wysokość'' jest liczbą a następnie wysyła informację o karze do serwera.}% Flow
{\wymog{Trwa turniej.}
\wymog{Sędzia jest podłączony do turnieju.}}% Preconditiony
{\wymog{Zostaje wysłana do serwera infomacja o nałożeniu kary na gracza.}}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Usunięcie gracza z turnieju}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Przerwanie turnieu}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Przyjęcie rezygnacji gracza z turnieju w trakcie jego trwania}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Podsumowanie wyników turnieju}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wysłanie wyników turnieju do serwera}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Eksport wyników turnieju do pliku}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\newpage

\section{Przypadki użycia --- ogólnodostępne strony www}

\tuc{Zadanie pytania}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Kliknięcie na baner}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wyświetlenie reklamy}% nazwa
{Jest to przypadek opisujący proces wyświetlenia reklamy na dynamicznie generowanej stronie www, od momentu pobrania jej z bazy danych
do zakonczenia działania skryptu generującego stronę. Odbywa się on przy każdej generacji strony www.}% Krotki opis
{W trakcie generowania strony www, skrypt uruchamia przypadek ,,pobranie reklamy z bazy danych''. Otrzymuje on instancję klasy
BazaDanychReklama, zawierającą baner. Zapisuje on baner w pliku o losowej nazwie (sklejony czas systemowy i licznik kolejnej reklamy - 64bitowy) i 
w wysyłanej stronie zamieszcza odnośnik $<img>$ do tego statycznego pliku.}% Flow
{\wymog{Zostało wykonane żądanie wyświetlenia jakiejś strony dynamicznej.}}% Preconditiony
{\zostawia{Strona dynamiczna zawiera odnośnik do banera.}}% Postconditiony
{Co godzinę na serwerze www CRON uruchamia skrypt czyszczący stare pliki tymczasowe z banerami.}% Uwagi, superrequirementy, i inne taborety.

\tuc{Przekierowanie do apletu gracza lub sędziego}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Rejestracja użytkownika}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Odzyskanie hasła użytkownika}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wyświetlenie FAQ i ogólnej informacji o serwerze (strony statyczne)}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\newpage

\section{Przypadki użycia --- strony www reklamodawcy}\

\tuc{Rejestracja reklamodawcy}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Zalogowanie się reklamodawcy}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wylogowanie się reklamodawcy}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Zgloszenie reklamy}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Podgląd stanu banerów}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wydrukowanie formularza przelewu opłaty}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Kontakt reklamodawcy z pracownikiem}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Przegląd statystyk}% nazwa
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\newpage

\section{Przypadki użycia --- strony www pracownika oraz narzędzia administracyjne}

Większość działań administracyjnych odbywa się przez dynamiczne strony www.

\tuc{Zalogowanie się pracownika}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.
  
\tuc{Wyświetlanie listy graczy}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wyświetlanie danych gracza}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Usunięcie gracza}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Zmiana statusu gracza}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.
  
\tuc{Wyświetlenie listy graczy ubiegających się o status sędziego}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Zaakceptowanie prośby gracza o status sędziego lub jej odrzucenie z prawem obsługi użytkowników}
{Gracz może w dowolnym momencie poprosić o przyznanie statusu sędziego. Wówczas pojawia sie on na liście ubiegających się o ten status.
Pracownik \wfp może przyznać graczowi ten status bądź odrzucić prośbę.}% Krotki opis
{Po kliknięciu na stronie listy graczy ubiegających się o status sędziego pracownik jest przenoszony do strony o jednym graczu. Zostaje wyświetlone
informacje o graczu (patrz ,,wyświetlenie danych gracza'') wraz z opcjami - przyznaj status sędziego lub odrzuć prośbę, oraz polem do wpisania
uwag. Pracownik wybiera opcję i wysyła formularz do serwera www. Skrypt www aktualizuje dane gracza w bazie danych zgodnie z decyzją (patrz 
    ,,zmiana danych gracza w bazie danych'') i wysyła do niego mail z infomacją o decyzji, korzystając z programu ,,nail'' i gotowych wzorców
maili.}% Flow
{\wymog{Pracownik \wfp jest zalogowany.}
\wymog{Pracownik \wfp obejrzał listę graczy ubiegających się o status sędziego i klinął na jednym.}
\wymog{Pracownik \wfp podjął decyzję co do tego gracza.}}% Preconditiony
{\zostawia{Decyzja co do tego gracza została podjęta i umieszczona w bazie danych.}
\zostawia{Został wysłany do tego gracza mail z informacją o decyzji.}}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wyświetlanie listy pytań}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.
  
\tuc{Udzielenie odpowiedzi na pytanie}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.
  
\tuc{Dodanie elementu do FAQ}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.
  
\tuc{Edycja lub usuwanie elementów FAQ}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.
  
\tuc{Wyświetlanie zgłoszeń reklamodawców}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.
  
\tuc{Akceptowanie lub odrzucanie zgłoszeń reklamodawców}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.
  
\tuc{Wyświetlanie listy obecnie zamieszczonych reklam}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wyświetlenie listy turniejów}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wyświetlenie ustawień wybranego turnieju}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Akceptacja lub odrzucenie turnieju}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Edycja ustawień turnieju}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.
  
\tuc{Usunięcie turnieju}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wyświetlenie listy pracowników}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.
  
\tuc{Wyświetlenie danych wybranego pracownika}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.
  
\tuc{Edycja danych i uprawnień wybranego pracownika}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Usunięcie pracownika}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.
  
\tuc{Wykonanie archiwalnej kopii bazy danych}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wyświetlenie listy rankingów}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Wyświetlenie zawartości i ustawienia wybranego rankingu}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Usunięcie rankingu}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Stworzenie nowego rankingu}
{Pracownik \wfp może stworzyć nowy ranking, który będzie wyświetlany graczom. W tym celu nazywa ten ranking oraz
piszę formułę SQL (z pewnymi ograniczeniami), która generuje ranking. Od tej pory ranking jest dostępny, co 5 minut generuje się jego migawka
(patrz przypadek ,,wygenerowanie migawki (snapshot) rankingu''). }% Krotki opis
{Przed pracownikiem, po kliknięciu odpowiedniej opcji w menu, otwiera się strona z formularzem, zawierająca nazwę rankingu oraz pole na zapytanie SQL.
Pracownik wypełnia pola i wysyła formularz do serwera. Serwer sprawdza poprawność SQL-a zgodnie z zasadami:
\begin{itemize}
\item SELECT * oznacza wybranie wszystkich pól potrzebnych do wygenerowania rankingu - imię, nazwisko, login, numer gracza.
\item Nie można się odwoływać do innych graczy i do tablic niezwiązanych z grami: reklam, reklamodawców, pracowników.
\end{itemize}}% Flow
{\wymog{Pracownik jest zalogowany.}}% Preconditiony
{\zostawia{Zostaje stworzony nowy ranking i wygenerowana jego pierwsza migawka.}}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.  

\tuc{Wyświetlenie danych wybranego pracownika}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.
  
\tuc{Edycja danych i uprawnień wybranego pracownika}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.

\tuc{Zarządzenie stworzenia kopii zapasowej bazy danych}
{-}% Krotki opis
{-}% Flow
{-}% Preconditiony
{-}% Postconditiony
{-}% Uwagi, superrequirementy, i inne taborety.
    
\end{document}
