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; }
/** * 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); }
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))); }