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();
     }
 }
コード例 #2
0
 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()));
 }
コード例 #3
0
 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;
 }
コード例 #4
0
 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());
 }
コード例 #5
0
 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;
 }