Algoritmus zpracování práv
Rozvrh NG » Práva » Algoritmus zpracování práv
Zobrazení rozvrhu pro semestr
Aby bylo možné semestr nastavit pro práci (a tedy i zobrazit), musí být platný. To znamená, že:
- Existují pro něj záznamy v rn_semestr, hod a har.
- Stáří semestru není větší než rozvrhng_history. Stářím semestru se rozumí počet archivních semestrů mezi příslušným semestrem a současností plus jedna.
- Semestr není předběžný nebo má uživatel právo předběžný semestr zobrazit.
Právo zobrazit předběžný semestr je přidělováno takto:
- Anonymní uživatelé toto právo nemají.
- Studenti toto právo mají, pokud pro dotazovaný semestr je nastavena událost wrozstpred a aktuální datum spadá do rozsahu této události.
- U ostatních uživatelů platí, že pokud mají právo view_preliminary, pak semestr zobrazit můžou. Pokud semestr není chráněný, pak lze semestr zobrazit i v případě, že má uživatel právo view_prelim_unprot.
Rezervace
Pro založení rezervace je třeba mít právo create_reservation (alespoň na úrovni učitel). Dále je třeba, aby termín rezervace byl přípustný a aby měl uživatel právo založit rezervaci do cílové místnosti. Pro oboje je významný vztah rezervujícího uživatele k místnosti, kam je rezervace zakládána. Tento vztah plyne z tabulky rn_vlastnik a závisí na dni v týdnu. Proto je pro určení konkrétní úrovně práv uživatele třeba již znát datum rezervace. Samotný vztah je v tomto případě řízen právem create_reservation. Výsledný vztah se řídí tímto:
- veřejná - Pokud učebna nemá pro daný den vlastníka.
- vlastní - Zde záleží na úrovní práva create_reservation:
- učitel - učebna nikdy není vlastní
- ústav - učebna je vlastní, pokud ji v daný den vlastní také ústav zakládajícího uživatele
- sekce - učebna je vlastní, pokud ji v daný den vlastní také ústav spadající do stejné sekce jako zakládající uživatel
- fakulta - každá učebna je vlastní
- cizí V ostatních případech.
Platný termín rezervace
Termín rezervace musí vyhovat latenci místnosti (rn_mistnost.latence), tedy pokud je latence 2, musí být rezervace založena alespoň dva dny předem. Minimální latence je 0, nelze tedy zakládat rezervace do historie.
Maximální datum je omezeno i směrem do budoucnosti. Pokud je uřebna vlastní, pak je řízeno právem create_limit_private, jinak create_limit. Možné úrovně jsou:
- do konce období (výuka/zkouškové)
- do konce aktuálního semestru
- do konce aktuálního akademického roku
- do konce příštího semestru (včetně zkouškového)
- do konce příštího akademického roku
- bez omezení
Chráněný rozvrh
Pokud je semestr do kterého rezervace spadá (pokud takový vůbec existuje) chráněný, je pro založení rezervace potřeba, aby vztah k místnosti vzhledem k právu create_future byl "vlastní".
Intervalové a opakované rezervace
Pokud rezervace zasahuje více než jeden den, pak pro její založení musí být předchozí podmínky splněny pro všechny dny rezervace. Existují tyto speciální typy rezervací:
- Opakovaná ignorující kolize - Rezervace opakující se ve stejný čas a den několik týdnů v řadě. Je třeba právo create_repeat.
- Souvislá - Rezervace opakující se ve stejný den několik dní v řadě. Je třeba právo create_interval.
- Souvislá vynucená - Jako souvislá, ale lze založit i při kolizi. Je třeba právo create_hard.
Žádosti
Pokud je termín rezervace přípustný, je ještě třeba rozhodonut, zda má uživatel pravo rezervaci přímo založit. Jinak je vytvořena žádost. Pokud je typ místnosti "potvrzovací" (tj. rn_mistnost.typ je 'X'), pak jde o žádost vždy, kromě případu, že má uživatel právo create_reservation na úrovni fakulta. Jinak dáva uživatel žádost jen do místností, které jsou k němu ve vztahu"cizí" vzhledem k právu create_reservation.
Potvrzování žádostí
Uživatel může potvrzovat rezervace do místností, ke kterým je ve vlastnickém vztahu vzhledem k právu approve.
Mazání a editace rezervací
Mazání a editace rezervací se řídí právy edit_reservation a edit_res_by_room. Pracovat s rezervací může, pokud je splněna jedna ze tří podmínek:
- Vztah je vlastníkem místnosti vzhledem k právu edit_res_by_room.
- Rezervace byla založena uživatelem pokoušejícím se o úpravu a uživatel má právo edit_reservation alespoň na úrovni učitel.
- Učitel napsaný na rezervaci spadá (vzhledem k právu edit_reservation) do působnosti uživatele pokoušejícího se o úpravu. Tato působnost je určena právem takto:
- učitel - do působnosti uživatele patří pouze uživatel samotný.
- ústav - do působnosti uživatele patří všichni učitelé spadající pod stejný ústav.
- sekce - do působnosti uživatele patří všichni učitelé spadající pod stejnou sekci.
- fakulta - do působnosti uživatele patří všichni učitelé.
Pro smazání rezervace toto stačí. Přesun rezervace je realizován jako odstranění staré rezervace a založení nové. Při zakládání nové rezervace proběhnou normálně všechny kontroly práv jako při zakládání nové rezervace.