protected function build() { $this->select[] = 'group_information.*'; if ($this->event) { $this->joins[] = " JOIN event_in_group AS event_in_group ON event_in_group.group_id = group_information.id " . " AND event_in_group.event_id = :event_id "; $this->params['event_id'] = $this->event->getId(); } }
public function addEventToGroup(EventModel $event, GroupModel $group) { $stat = $this->siteContainer['databasehelper']->getPDO()->prepare("SELECT * FROM event_in_group WHERE group_id=:group_id AND " . " event_id=:event_id "); $stat->execute(array('group_id' => $group->getId(), 'event_id' => $event->getId())); if ($stat->fetch()) { return; } $stat = $this->siteContainer['databasehelper']->getPDO()->prepare("INSERT INTO event_in_group " . "(event_id, group_id )" . " VALUES " . "(:event_id, :group_id)"); $stat->execute(array('event_id' => $event->getId(), 'group_id' => $group->getId())); }
function loadData($filename, $folder = '', $defaults = array()) { $isDefault = $filename == 'data.ini'; $this->siteContainer['log']->debug('Starting DataLoader Ini', array('filename' => $filename, 'folder' => $folder, 'isDefault' => $isDefault)); $data = parse_ini_file($this->siteContainer['site']->getDir() . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . $folder . DIRECTORY_SEPARATOR . $filename, true); $out = new DataLoadResult(); $group = null; if (isset($data['group'])) { $group = new GroupModel(); if (isset($data['group']['slug']) && $data['group']['slug']) { $group->setSlug($data['group']['slug']); } $group->setTitle($data['group']['title']); if (isset($data['group']['description']) && $data['group']['description']) { $group->setDescription($data['group']['description']); } if (isset($data['group']['url']) && $data['group']['url']) { if (filter_var($data['group']['url'], FILTER_VALIDATE_URL)) { $group->setUrl($data['group']['url']); } else { // TODO warn! } } $this->siteContainer['site']->addGroup($group); if ($isDefault) { $out->addDefault($group); } } if (isset($data['event'])) { $event = new EventModel(); $groupsForEvent = $group ? array($group) : array(); $event->setCountry($this->siteContainer['site']->getDefaultCountry()); $event->setTimeZone($this->siteContainer['site']->getDefaultTimeZone()); if (isset($data['event']['slug']) && $data['event']['slug']) { $event->setSlug($data['event']['slug']); } foreach ($defaults as $default) { if (is_a($default, 'openacalendar\\staticweb\\models\\GroupModel')) { $groupsForEvent[] = $default; } else { if (is_a($default, 'openacalendar\\staticweb\\models\\CountryModel')) { $event->setCountry($default); } else { if (is_a($default, 'openacalendar\\staticweb\\models\\AreaModel')) { $event->setArea($default); } else { if (is_a($default, 'openacalendar\\staticweb\\models\\DefaultTimeZoneModel')) { $event->setTimeZone($default->getCode()); } } } } } $event->setTitle($data['event']['title']); $event->setStart($data['event']['start']); $event->setEnd($data['event']['end']); if (isset($data['event']['description']) && $data['event']['description']) { $event->setDescription($data['event']['description']); } if (isset($data['event']['url']) && $data['event']['url']) { if (filter_var($data['event']['url'], FILTER_VALIDATE_URL)) { $event->setUrl($data['event']['url']); } else { // TODO warn! } } if (isset($data['event']['country']) && $data['event']['country']) { $country = $this->siteContainer['countryrepository']->loadByHumanInput($data['event']['country']); if (!$country) { $out->addError(new DataErrorInvalidCountry()); return $out; } $event->setCountry($country); } if (isset($data['event']['timezone']) && $data['event']['timezone']) { $timezone = $data['event']['timezone']; if (!$this->siteContainer['countryrepository']->isTimeZoneValid($timezone)) { $out->addError(new DataErrorInvalidTimeZone()); return $out; } $event->setTimeZone($timezone); } if (isset($data['event']['group_slug']) && $data['event']['group_slug']) { $groupSpeccedInEvent = $this->siteContainer['grouprepository']->loadBySlug($data['event']['group_slug']); if (!$groupSpeccedInEvent) { // TODO error } else { $groupsForEvent[] = $groupSpeccedInEvent; } } if (is_a($event->getCountry(), 'openacalendar\\staticweb\\models\\CountryModel') && $event->getTimeZone()) { if (!$event->getCountry()->hasTimeZone($event->getTimeZone())) { $out->addError(new DataErrorInvalidTimeZoneForCountry()); return $out; } } $this->siteContainer['site']->addEvent($event); foreach ($groupsForEvent as $groupSpeccedInEvent) { $this->siteContainer['grouprepository']->addEventToGroup($event, $groupSpeccedInEvent); } } if (isset($data['area']) && isset($data['area']['slug'])) { $area = new AreaModel(); $area->setSlug($data['area']['slug']); $area->setTitle(isset($data['area']['title']) ? $data['area']['title'] : $data['area']['slug']); $area->setCountry($this->siteContainer['site']->getDefaultCountry()); foreach ($defaults as $default) { if (is_a($default, 'openacalendar\\staticweb\\models\\CountryModel')) { $area->setCountry($default); } else { if (is_a($default, 'openacalendar\\staticweb\\models\\AreaModel')) { $area->setParentArea($default); } } } // TODO also have to look for country in $out->defaults $this->siteContainer['site']->addArea($area); if ($isDefault) { $out->addDefault($area); } } if ($isDefault) { if (isset($data['country']) && isset($data['country']['code'])) { $country = $this->siteContainer['countryrepository']->loadByHumanInput($data['country']['code']); if (!$country) { $out->addError(new DataErrorInvalidCountry()); return $out; } $out->addDefault($country); } if (isset($data['timezone']) && isset($data['timezone']['timezone'])) { $timezone = new DefaultTimeZoneModel($data['timezone']['timezone']); // TODO check exisits! if (!$timezone) { $out->addError(new DataErrorInvalidTimeZone()); return $out; } $out->addDefault($timezone); } } $this->siteContainer['log']->debug('Finished DataLoader Ini'); return $out; }
public function create(EventModel $event) { $stat = $this->siteContainer['databasehelper']->getPDO()->prepare("INSERT INTO event_information " . "(slug, summary, description, url, country_id, area_id, timezone, start_at,end_at )" . " VALUES " . "(:slug, :summary, :description, :url, :country_id, :area_id, :timezone, :start_at, :end_at)"); $stat->execute(array('slug' => $event->getSlug(), 'summary' => $event->getTitle(), 'description' => $event->getDescription(), 'url' => $event->getUrl(), 'country_id' => $event->getCountryId(), 'area_id' => $event->getAreaId(), 'timezone' => $event->getTimezone(), 'start_at' => $event->getStart()->getTimestamp(), 'end_at' => $event->getEnd()->getTimestamp())); $event->setId($this->siteContainer['databasehelper']->getPDO()->lastInsertId()); }
public function addEvent(EventModel $event) { if (!$event->getSlug()) { $this->warnings[] = new DataWarningEventHasNoSlug(); $event->createSlug(); } if ($this->siteContainer['eventrepository']->loadBySlug($event->getSlug())) { $this->errors[] = new DataErrorTwoEventsHaveSameSlugs(); } if ($event->getStart()->getTimestamp() > $event->getEnd()->getTimestamp()) { $this->errors[] = new DataErrorEndBeforeStart(); } $this->siteContainer['log']->info("Adding event", array('event' => $event->getDataForLoggerInfo())); $this->siteContainer['eventrepository']->create($event); }
public function fetchAll() { $this->buildStart(); $this->build(); $this->buildStat(); $results = array(); while ($data = $this->stat->fetch()) { $event = new EventModel(); $event->setFromDataBaseRow($data); $results[] = $event; } return $results; }