public function testParseAISDateTime() { $this->assertEquals(AIS2Utils::parseAISDateTime("11.01.2010 08:30"), mktime(8, 30, 00, 1, 11, 2010)); $this->assertEquals(AIS2Utils::parseAISDateTime("31.02.2011 09:35"), mktime(9, 35, 00, 2, 31, 2011)); // parsovanie bez uvodnych nul zatial nepodporujeme (a ani nemusime) // AIS2Utils::parseAISDateTime("31.2.2011 9:35"); $this->setExpectedException("Exception"); AIS2Utils::parseAISDateTime("8:30 11.1.2010"); }
/** * 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); }