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 = "";
     }
     if (isset($this->hodnoteniaData[$predmet][HodnoteniaFields::MOZE_PRIHLASIT]) && $this->hodnoteniaData[$predmet][HodnoteniaFields::MOZE_PRIHLASIT] == 'N') {
         $mozePredmet = false;
     } else {
         $mozePredmet = true;
     }
     if ($znamka != "" && $znamka != "FX" && !$mozePredmet) {
         return self::PRIHLASIT_NEMOZE_ZNAMKA;
     }
     $prihlasRange = AIS2Utils::parseAISDateTimeRange($prihlasTerminyRow[PrihlasTerminyFields::PRIHLASOVANIE_DATUM]);
     if (!($prihlasRange['od'] < $time && $prihlasRange['do'] > $time)) {
         return self::PRIHLASIT_NEMOZE_CAS;
     }
     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 != "FX" && $mozePredmet) {
         return self::PRIHLASIT_MOZE_ZNAMKA;
     }
     return self::PRIHLASIT_MOZE;
 }
 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;
     }
     $prihlasRange = AIS2Utils::parseAISDateTimeRange($prihlasTerminyRow[PrihlasTerminyFields::PRIHLASOVANIE_DATUM]);
     if (!($prihlasRange['od'] < $time && $prihlasRange['do'] > $time)) {
         return self::PRIHLASIT_NEMOZE_CAS;
     }
     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;
 }
 public function mozeSaPrihlasit($row)
 {
     $prihlasRange = AIS2Utils::parseAISDateTimeRange($row['prihlasovanie']);
     $predmet = $row['predmet'];
     if (isset($this->hodnoteniaData[$predmet]['znamka'])) {
         $znamka = $this->hodnoteniaData[$predmet]['znamka'];
     } else {
         $znamka = "";
     }
     if (isset($this->hodnoteniaData[$predmet]['mozePrihlasit']) && $this->hodnoteniaData[$predmet]['mozePrihlasit'] == 'N') {
         $mozePredmet = false;
     } else {
         $mozePredmet = true;
     }
     if ($znamka != "" && $znamka != "FX" && !$mozePredmet) {
         return self::PRIHLASIT_NEMOZE_ZNAMKA;
     }
     if (!($prihlasRange['od'] < time() && $prihlasRange['do'] > time())) {
         return self::PRIHLASIT_NEMOZE_CAS;
     }
     if ($row['maxPocet'] != '' && $row['maxPocet'] == $row['pocetPrihlasenych']) {
         return self::PRIHLASIT_NEMOZE_POCET;
     }
     if (!$mozePredmet) {
         return self::PRIHLASIT_NEMOZE_INE;
     }
     if ($znamka != "" && $znamka != "FX" && $mozePredmet) {
         return self::PRIHLASIT_MOZE_ZNAMKA;
     }
     return self::PRIHLASIT_MOZE;
 }
 public function getHtml()
 {
     $trace = $this->trace->addChild("MojeTerminyHodnoteniaCallback");
     $trace->tlog("Executing callback");
     $terminyHodnotenia = $this->terminyHodnoteniaApp->getTerminyHodnotenia($trace->addChild("get terminy hodnotenia"));
     $hodnotenia = $this->hodnoteniaApp->getHodnotenia($trace->addChild("get hodnotenia"));
     if (Input::get('action') !== null) {
         $trace->tlog("odhlasujem zo skusky");
         assert(Input::get("action") == "odhlasZoSkusky");
         if ($this->odhlasZoSkusky(Input::get("odhlasIndex"))) {
             FajrUtils::redirect();
         } else {
             throw new Exception('Z termínu sa nepodarilo odhlásiť.');
         }
     }
     $baseUrlParams = array("studium" => Input::get("studium"), "list" => Input::get("list"), "tab" => Input::get("tab"));
     $terminyHodnoteniaTableActive = new Table(TableDefinitions::mojeTerminyHodnotenia(), 'termin', $baseUrlParams);
     $terminyHodnoteniaCollapsibleActive = new Collapsible(new HtmlHeader('Aktuálne termíny hodnotenia'), $terminyHodnoteniaTableActive);
     $terminyHodnoteniaTableOld = new Table(TableDefinitions::mojeTerminyHodnotenia(), 'termin', $baseUrlParams);
     $terminyHodnoteniaCollapsibleOld = new Collapsible(new HtmlHeader('Staré termíny hodnotenia'), $terminyHodnoteniaTableOld);
     if (Input::get('termin') != null) {
         $terminyHodnoteniaTableActive->setOption('selected_key', Input::get('termin'));
         $terminyHodnoteniaTableOld->setOption('selected_key', Input::get('termin'));
     }
     $actionUrl = FajrUtils::linkUrl($baseUrlParams);
     $hodnoteniePredmetu = array();
     foreach ($hodnotenia->getData() as $row) {
         $hodnoteniePredmetu[$row['nazov']] = $row['znamka'];
     }
     foreach ($terminyHodnotenia->getData() as $row) {
         $datum = AIS2Utils::parseAISDateTime($row['dat'] . " " . $row['cas']);
         if ($row['znamka'] == "") {
             // skusme najst znamku v hodnoteniach
             if (isset($hodnoteniePredmetu[$row['predmet']]) && $hodnoteniePredmetu[$row['predmet']] != "") {
                 $row['znamka'] = $hodnoteniePredmetu[$row['predmet']] . " (z&nbsp;predmetu)";
             }
         }
         if ($datum < time()) {
             $row['odhlas'] = "Skúška už bola.";
             if ($row['jePrihlaseny'] == 'A') {
                 $terminyHodnoteniaTableOld->addRow($row, null);
             }
         } else {
             if ($row['mozeOdhlasit'] == 1) {
                 $class = 'terminmozeodhlasit';
                 $hash = $this->hashNaOdhlasenie($row);
                 $row['odhlas'] = "<form method='post' action='{$actionUrl}'>\n              <div>\n              <input type='hidden' name='action' value='odhlasZoSkusky'/>\n              <input type='hidden' name='odhlasIndex'\n              value='" . $row['index'] . "'/>\n              <input type='hidden' name='hash' value='{$hash}'/>\n              <button name='submit' type='submit' class='tableButton negative'>\n                <img src='images/cross.png' alt=''>Odhlás\n              </button></div></form>";
             } else {
                 $row['odhlas'] = "nedá sa";
                 $class = 'terminnemozeodhlasit';
             }
             if ($row['prihlaseny'] != 'A') {
                 $row['odhlas'] = 'Si odhlásený. Ak chceš, opäť sa prihlás.';
                 $class = 'terminodhlaseny';
             }
             $terminyHodnoteniaTableActive->addRow($row, array('class' => $class));
         }
     }
     $html = $terminyHodnoteniaCollapsibleActive->getHtml();
     $html .= $terminyHodnoteniaCollapsibleOld->getHtml();
     if (Input::get('termin') != null) {
         $prihlaseni = $this->terminyHodnoteniaApp->getZoznamPrihlasenychDialog($trace, Input::get('termin'))->getZoznamPrihlasenych($trace);
         $zoznamPrihlasenychTable = new Table(TableDefinitions::zoznamPrihlasenych(), null, array('studium', 'list'));
         $zoznamPrihlasenychTable->addRows($prihlaseni->getData());
         $zoznamPrihlasenychCollapsible = new Collapsible(new HtmlHeader('Zoznam prihlásených
       na vybratý termín'), $zoznamPrihlasenychTable);
         $html .= $zoznamPrihlasenychCollapsible->getHtml();
     }
     return $html;
 }
 /**
  * Akcia pre zobrazenie mojich terminov hodnotenia
  *
  * @param Trace $trace trace object
  * @param Request $request request from browser
  * @param Response $response response information
  */
 public function runMojeTerminyHodnotenia(Trace $trace, Context $context)
 {
     $request = $context->getRequest();
     $response = $context->getResponse();
     $termin = $request->getParameter('termin');
     $terminyHodnotenia = $this->terminyHodnoteniaScreen->getTerminyHodnotenia($trace->addChild("get terminy hodnotenia"));
     $hodnotenia = $this->hodnoteniaScreen->getHodnotenia($trace->addChild("get hodnotenia"));
     $hodnoteniePredmetu = array();
     foreach ($hodnotenia->getData() as $hodnoteniaRow) {
         $hodnoteniePredmetu[$hodnoteniaRow[HodnoteniaFields::PREDMET_SKRATKA]] = $hodnoteniaRow[HodnoteniaFields::ZNAMKA];
     }
     $terminyHodnoteniaActive = array();
     $terminyHodnoteniaOld = array();
     foreach ($terminyHodnotenia->getData() as $terminyRow) {
         $mojeTerminyRow = $terminyRow;
         if ($terminyRow[TerminyFields::ZNAMKA] == '') {
             // skusme najst znamku v hodnoteniach
             $predmet = $terminyRow[TerminyFields::PREDMET_SKRATKA];
             if (isset($hodnoteniePredmetu[$predmet]) && $hodnoteniePredmetu[$predmet] != '') {
                 // TODO(ppershing): move this to another field and deal with it in template!
                 $mojeTerminyRow[TerminyFields::ZNAMKA] = $hodnoteniePredmetu[$predmet] . " (nepriradená k termínu)";
             }
         }
         $datum = AIS2Utils::parseAISDateTime($terminyRow[TerminyFields::DATUM] . " " . $terminyRow[TerminyFields::CAS]);
         if ($datum < time()) {
             if ($terminyRow[TerminyFields::JE_PRIHLASENY] == 'TRUE') {
                 $terminyHodnoteniaOld[] = $mojeTerminyRow;
             }
         } else {
             if ($terminyRow[TerminyFields::MOZE_ODHLASIT] == 1) {
                 $mojeTerminyRow[MojeTerminyFields::HASH_ODHLASENIE] = StudiumUtils::hashNaOdhlasenie($terminyRow);
             }
             $terminyHodnoteniaActive[] = $mojeTerminyRow;
         }
     }
     $response->set('prihlaseni', null);
     if ($request->getParameter('termin') !== '') {
         $prihlaseni = $this->terminyHodnoteniaScreen->getZoznamPrihlasenychDialog($trace, $termin)->getZoznamPrihlasenych($trace);
         $response->set('prihlaseni', $prihlaseni->getData());
     }
     $response->set('terminyActive', $terminyHodnoteniaActive);
     $response->set('terminyOld', $terminyHodnoteniaOld);
     $response->set('termin', $termin);
     $response->setTemplate('studium/mojeTerminyHodnotenia');
 }
 public function testDateTimeRange()
 {
     $this->assertEquals(AIS2Utils::parseAISDateTimeRange("11.01.2010 08:30 do 12.02.2011 09:40"), array('od' => mktime(8, 30, 0, 1, 11, 2010), 'do' => mktime(9, 40, 0, 2, 12, 2011)));
 }