public function mozeSaPrihlasit($prihlasTerminyRow, $time)
 {
     $predmet = $prihlasTerminyRow[PrihlasTerminyFields::PREDMET_SKRATKA];
     if (isset($this->hodnoteniaData[$predmet][HodnoteniaFields::ZNAMKA])) {
         $znamka = $this->hodnoteniaData[$predmet][HodnoteniaFields::ZNAMKA];
     } else {
         $znamka = "";
     }
     // Note(PPershing): never use $this->hodnoteniaData[$predmet][HodnoteniaFields::MOZE_PRIHLASIT]
     // AiS will incorrectly report that you can't sign up if you have FX!
     $mozePredmet = $prihlasTerminyRow[ZoznamTerminovFields::MOZE_PRIHLASIT] == 'A';
     if ($znamka != "" && !Znamka::isSame($znamka, 'Fx') && !$mozePredmet) {
         return self::PRIHLASIT_NEMOZE_ZNAMKA;
     }
     try {
         $prihlasRange = AIS2Utils::parseAISDateTimeRange($prihlasTerminyRow[PrihlasTerminyFields::PRIHLASOVANIE_DATUM]);
         if (!($prihlasRange['od'] < $time && $prihlasRange['do'] > $time)) {
             return self::PRIHLASIT_NEMOZE_CAS;
         }
     } catch (\Exception $e) {
         // ignorujme chybu pri parsovani datumu
         // lepsie pouzivatelovi umoznit vyskusat sa prihlasit
         // ako mu to neumoznit napriek tomu, ze by sa mal vediet prihlasit
     }
     if ($prihlasTerminyRow[PrihlasTerminyFields::MAX_POCET] !== '' && $prihlasTerminyRow[PrihlasTerminyFields::MAX_POCET] <= $prihlasTerminyRow[PrihlasTerminyFields::POCET_PRIHLASENYCH]) {
         return self::PRIHLASIT_NEMOZE_POCET;
     }
     if (!$mozePredmet) {
         return self::PRIHLASIT_NEMOZE_INE;
     }
     if ($znamka != "" && !Znamka::isSame($znamka, 'Fx') && $mozePredmet) {
         return self::PRIHLASIT_MOZE_ZNAMKA;
     }
     return self::PRIHLASIT_MOZE;
 }
예제 #2
0
 public function prihlasNaTermin(Trace $trace, $terminIndex)
 {
     $terminy = $this->executor->readTable(array(), 'terminy');
     // Jemna napodobenina logiky pre prihlasovanie,
     // checkuje ci uz nie som zapisany na iny termin s vyslednou znamkou.
     foreach ($terminy as $index => $unused) {
         $info = $this->executor->readTable(array('termin' => $index), 'prihlas');
         if (isset($info['jePrihlaseny']) && $info['jePrihlaseny']) {
             $znamka = $info['prihlasenyData'][self::MOJE_TERMINY_ZNAMKA];
             if (!Znamka::isSame($znamka, 'Fx')) {
                 throw new Exception("Už si prihlásený na iný termín z tohoto predmetu!");
             }
         }
     }
     $info = $this->executor->readTable(array('termin' => $terminIndex), 'prihlas');
     if (!isset($info['mozePrihlasit']) || !$info['mozePrihlasit']) {
         $dovod = isset($info['nemozePrihlasitDovod']) ? $info['nemozePrihlasitDovod'] : 'neznámy';
         throw new Exception("Nemôžem prihlásiť na termín - dôvod: " . $dovod);
     }
     if (isset($info['jePrihlaseny']) && $info['jePrihlaseny']) {
         throw new Exception("Na daný termín si už prihlásený.");
     }
     $info['jePrihlaseny'] = true;
     $this->executor->writeTable(array('termin' => $terminIndex), 'prihlas', $info);
     $this->closeIfNeeded($trace);
     return true;
 }
예제 #3
0
 public function testPorovnavaniaZnamok()
 {
     $this->assertTrue(Znamka::isSame('a', 'a'));
     $this->assertTrue(Znamka::isSame('a', 'A'));
     $this->assertTrue(Znamka::isSame('A', 'a'));
     $this->assertTrue(Znamka::isSame('Fx', 'Fx'));
     $this->assertTrue(Znamka::isSame('FX', 'Fx'));
     $this->assertTrue(Znamka::isSame('Fx', 'FX'));
     $this->assertTrue(Znamka::isSame('fX', 'fx'));
     $this->assertTrue(Znamka::isSame('fX', 'FX'));
     $this->assertFalse(Znamka::isSame('a', 'B'));
     $this->assertFalse(Znamka::isSame('Fx', 'Fxx'));
     $this->assertFalse(Znamka::isSame('C', 'EC'));
 }
예제 #4
0
 /**
  * Prida predmet s danou znamkou, zarata do neohodnotenych ak
  * sa znamku nepodarilo rozpoznat alebo nie je vyplnena
  * @param string $castRoka do ktorej casti roka sa ma znamka zaratat
  * @param string $znamkaText nazov znamky (A, B, ...)
  * @param int $kredity pocet kreditov pre danu znamku
  */
 public function add($castRoka, $znamkaText, $kredity)
 {
     Preconditions::check(in_array($castRoka, array(self::SEMESTER_LETNY, self::SEMESTER_ZIMNY, self::AKADEMICKY_ROK)), "Neplatná časť študijného roka.");
     $znamka = null;
     if ($znamkaText !== '') {
         $znamka = Znamka::fromString($znamkaText);
     }
     $this->obdobia[$castRoka]->add($kredity, $znamka);
     // Ak pridavame do akademickeho roka, tak hodnotu nechceme zaratat dvakrat
     if ($castRoka !== self::AKADEMICKY_ROK) {
         $this->obdobia[self::AKADEMICKY_ROK]->add($kredity, $znamka);
     }
 }