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;
 }
Ejemplo n.º 2
0
 /**
  * Akcia pre zobrazenie mojich terminov hodnotenia
  *
  * @param Trace $trace trace object
  * @param Request $request request from browser
  */
 public function runMojeTerminyHodnotenia(Trace $trace, Request $request)
 {
     $this->templateParams['currentTab'] = 'TerminyHodnotenia';
     if ($this->terminyHodnoteniaScreen == null) {
         return $this->renderResponse('studium/terminyHodnoteniaNedostupne', $this->templateParams);
     }
     $termin = $request->getParameter('termin');
     $terminyHodnotenia = $this->terminyHodnoteniaScreen->getTerminyHodnotenia($trace->addChild("get terminy hodnotenia"));
     $this->warnings->warnWrongTableStructure($trace, 'moje terminy hodnotenia', regression\MojeTerminyRegression::get(), $terminyHodnotenia->getTableDefinition());
     $hodnotenia = $this->hodnoteniaScreen->getHodnotenia($trace->addChild("get hodnotenia"));
     $this->warnings->warnWrongTableStructure($trace, 'hodnotenia', regression\HodnoteniaRegression::get(), $hodnotenia->getTableDefinition());
     $hodnoteniePredmetu = array();
     foreach ($hodnotenia->getData() as $hodnoteniaRow) {
         $hodnoteniePredmetu[$hodnoteniaRow[HodnoteniaFields::PREDMET_SKRATKA]] = $hodnoteniaRow[HodnoteniaFields::ZNAMKA];
     }
     if ($request->getParameter('format') === 'ics') {
         $calendar = CalendarProvider::getInstance();
         $calendar->setConfig('unique_id', $request->getHostName());
         $calendar->setProperty('METHOD', 'PUBLISH');
         $calendar->setProperty("x-wr-calname", 'Moje termíny hodnotenia');
         $calendar->setProperty("X-WR-CALDESC", "Kalendár skúšok vyexportovaný z aplikácie FAJR");
         $calendar->setProperty("X-WR-TIMEZONE", 'Europe/Bratislava');
         $datetimeFields = array('TZID=Europe/Bratislava');
         foreach ($terminyHodnotenia->getData() as $terminyRow) {
             if ($terminyRow[TerminyFields::JE_PRIHLASENY] !== 'TRUE') {
                 continue;
             }
             $casSkusky = AIS2Utils::parseAISDateTime($terminyRow[TerminyFields::DATUM] . " " . $terminyRow[TerminyFields::CAS]);
             $vevent = new \vevent();
             $vevent->setProperty('dtstart', FajrUtils::datetime2icsdatetime($casSkusky), $datetimeFields);
             // koniec dame povedzme 4 hodiny po konci, kedze nevieme kolko skuska trva
             $vevent->setProperty('dtend', FajrUtils::datetime2icsdatetime($casSkusky + 4 * 3600), $datetimeFields);
             $vevent->setProperty('location', $terminyRow['miestnosti']);
             $vevent->setProperty('summary', $terminyRow['predmetNazov']);
             // TODO: toto uid je unikatne, len pokial sa nezmeni niektora z vlastnosti skusok
             // co znamena, ze to nie je uplne OK podla standardu
             // - sposobi to, ze pridavanie novych skusok bude fungovat OK
             // ale mazanie/presuvanie nebude fungovat
             // najlepsie by bolo, ak by sme mali nejake unikatne id-cko skusky priamo z AISu
             $uid = $casSkusky . '-' . $terminyRow[TerminyFields::PREDMET_SKRATKA];
             $uid .= '-' . $terminyRow['miestnosti'];
             $uid .= '@' . $request->getHostName();
             $uid = str_replace(' ', '-', $uid);
             $vevent->setProperty('uid', $uid);
             $description = 'Prihlasovanie: ' . $terminyRow['prihlasovanie'] . "\r\n";
             $description .= 'Odhlasovanie: ' . $terminyRow['odhlasovanie'] . "\r\n";
             $description .= 'Poznámka: ' . $terminyRow['poznamka'];
             $vevent->setProperty('description', $description);
             $calendar->setComponent($vevent);
         }
         $response = new Response($calendar->createCalendar());
         $response->headers->set('Content-Type', 'text/calendar; charset=utf-8');
         $response->headers->set('Content-Disposition', 'attachment; filename="MojeSkusky.ics"');
         $response->setMaxAge(10);
         return $response;
     }
     $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 < $this->serverTime) {
             if ($terminyRow[TerminyFields::JE_PRIHLASENY] == 'TRUE') {
                 $terminyHodnoteniaOld[] = $mojeTerminyRow;
             }
         } else {
             if ($terminyRow[TerminyFields::MOZE_ODHLASIT] == 1) {
                 $mojeTerminyRow[MojeTerminyFields::HASH_ODHLASENIE] = StudiumUtils::hashNaOdhlasenie($terminyRow);
             }
             $terminyHodnoteniaActive[] = $mojeTerminyRow;
         }
     }
     $this->templateParams['prihlaseni'] = null;
     if ($request->getParameter('termin') !== '') {
         $prihlaseni = $this->terminyHodnoteniaScreen->getZoznamPrihlasenychDialog($trace, $termin)->getZoznamPrihlasenych($trace);
         $this->warnings->warnWrongTableStructure($trace, 'prihlaseni na termin', regression\PrihlaseniNaTerminRegression::get(), $prihlaseni->getTableDefinition());
         $this->templateParams['prihlaseni'] = $prihlaseni->getData();
     }
     $this->templateParams['terminyActive'] = $terminyHodnoteniaActive;
     $this->templateParams['terminyOld'] = $terminyHodnoteniaOld;
     $this->templateParams['termin'] = $termin;
     return $this->renderResponse('studium/mojeTerminyHodnotenia', $this->templateParams);
 }
Ejemplo n.º 3
0
 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)));
 }