'name:json_string', 'BeginDate' => 'start_date:datetime_epoch', 'EndDate' => 'end_date:datetime_epoch', 'SubmissionBeginDate' => 'submission_begin_date:datetime_epoch', 'SubmissionEndDate' => 'submission_end_date:datetime_epoch', 'VotingBeginDate' => 'voting_begin_date:datetime_epoch', 'VotingEndDate' => 'voting_end_date:datetime_epoch', 'SelectionBeginDate' => 'selection_begin_date:datetime_epoch', 'SelectionEndDate' => 'selection_end_date:datetime_epoch', 'RegistrationBeginDate' => 'registration_begin_date:datetime_epoch', 'RegistrationEndDate' => 'registration_end_date:datetime_epoch', 'StartShowingVenuesDate' => 'start_showing_venues_date:datetime_epoch', 'Active' => 'active:json_boolean', 'ScheduleDefaultStartDate' => 'schedule_start_date:datetime_epoch', 'TypeId' => 'type_id:json_int' , 'DatesLabel' => 'dates_label:json_string' , 'PresentationVotesCount' => 'presentation_votes_count:json_int' , 'PresentationVotersCount' => 'presentation_voters_count:json_int' , 'AttendeesCount' => 'attendees_count:json_int', 'SpeakersCount' => 'speakers_count:json_int', 'PresentationsSubmittedCount' => 'presentations_submitted_count:json_int', 'PublishedEventsCount' => 'published_events_count:json_int', 'SpeakerAnnouncementEmailAcceptedCount' => 'speaker_announcement_email_accepted_count:json_int', 'SpeakerAnnouncementEmailRejectedCount' => 'speaker_announcement_email_rejected_count:json_int', 'SpeakerAnnouncementEmailAlternateCount' => 'speaker_announcement_email_alternate_count:json_int', 'SpeakerAnnouncementEmailAcceptedAlternateCount' => 'speaker_announcement_email_accepted_alternate_count:json_int', 'SpeakerAnnouncementEmailAcceptedRejectedCount' => 'speaker_announcement_email_accepted_rejected_count:json_int', 'SpeakerAnnouncementEmailAlternateRejectedCount' => 'speaker_announcement_email_alternate_rejected_count:json_int', ]; protected static $allowed_relations = [ 'ticket_types', 'locations', 'wifi_connections', ]; /** * @param null $expand * @param array $fields * @param array $relations * @param array $params * @return array */ public function serialize($expand = null, array $fields = [], array $relations = [], array $params = []) { $summit = $this->object; if(!$summit instanceof Summit) return []; $values = parent::serialize($expand, $fields, $relations, $params); $time_zone_list = timezone_identifiers_list(); $time_zone_id = $summit->getTimeZoneId(); if(!count($relations)) $relations = $this->getAllowedRelations(); $values['time_zone'] = null; if (!empty($time_zone_id) && isset($time_zone_list[$time_zone_id])) { $time_zone_name = $time_zone_list[$time_zone_id]; $time_zone = new \DateTimeZone($time_zone_name); $time_zone_info = $time_zone->getLocation(); $time_zone_info['name'] = $time_zone->getName(); $now = new \DateTime($summit->getLocalBeginDate()->format('Y-m-d H:i:s'), $time_zone); $time_zone_info['offset'] = $time_zone->getOffset($now); $values['time_zone'] = $time_zone_info; } $values['logo'] = ($summit->hasLogo()) ? Config::get("server.assets_base_url", 'https://www.openstack.org/') . $summit->getLogo()->getFilename() : null; // pages info $main_page = $summit->getMainPage(); $schedule_page = $summit->getSchedulePage(); $values['page_url'] = sprintf("%ssummit/%s", Config::get("server.assets_base_url", 'https://www.openstack.org/'), $main_page); $values['schedule_page_url'] = sprintf("%ssummit/%s/%s", Config::get("server.assets_base_url", 'https://www.openstack.org/'), $main_page, $schedule_page); $values['schedule_event_detail_url'] = sprintf("%ssummit/%s/%s/%s", Config::get("server.assets_base_url", 'https://www.openstack.org/'), $main_page, $schedule_page, 'events/:event_id/:event_title'); // tickets if(in_array('ticket_types', $relations)) { $ticket_types = []; foreach ($summit->getTicketTypes() as $ticket) { $ticket_types[] = SerializerRegistry::getInstance()->getSerializer($ticket)->serialize($expand); } $values['ticket_types'] = $ticket_types; } //locations if(in_array('locations', $relations)) { $locations = []; foreach ($summit->getLocations() as $location) { $locations[] = SerializerRegistry::getInstance()->getSerializer($location)->serialize($expand); } $values['locations'] = $locations; } // wifi connections if(in_array('wifi_connections', $relations)) { $wifi_connections = []; foreach ($summit->getWifiConnections() as $wifi_connection) { $wifi_connections[] = SerializerRegistry::getInstance()->getSerializer($wifi_connection)->serialize($expand); } $values['wifi_connections'] = $wifi_connections; } if (!empty($expand)) { $expand = explode(',', $expand); foreach ($expand as $relation) { switch (trim($relation)) { case 'event_types':{ $event_types = []; foreach ($summit->getEventTypes() as $event_type) { $event_types[] = SerializerRegistry::getInstance()->getSerializer($event_type)->serialize(); } $values['event_types'] = $event_types; } break; case 'tracks':{ $presentation_categories = array(); foreach ($summit->getPresentationCategories() as $cat) { $presentation_categories[] = SerializerRegistry::getInstance()->getSerializer($cat)->serialize(); } $values['tracks'] = $presentation_categories; } break; case 'track_groups':{ // track_groups $track_groups = array(); foreach ($summit->getCategoryGroups() as $group) { $track_groups[] = SerializerRegistry::getInstance()->getSerializer($group)->serialize(); } $values['track_groups'] = $track_groups; } break; case 'sponsors':{ $sponsors = array(); foreach ($summit->getSponsors() as $company) { $sponsors[] = SerializerRegistry::getInstance()->getSerializer($company)->serialize(); } $values['sponsors'] = $sponsors; } break; case 'speakers':{ $speakers = array(); foreach ($summit->getSpeakers() as $speaker) { $speakers[] = SerializerRegistry::getInstance()->getSerializer($speaker)->serialize ( null, [], [], [ 'summit_id' => $summit->getId(), 'published' => true ] ); } $values['speakers'] = $speakers; } break; case 'schedule': { $event_types = array(); foreach ($summit->getEventTypes() as $event_type) { $event_types[] = SerializerRegistry::getInstance()->getSerializer($event_type)->serialize(); } $values['event_types'] = $event_types; $presentation_categories = array(); foreach ($summit->getPresentationCategories() as $cat) { $presentation_categories[] = SerializerRegistry::getInstance()->getSerializer($cat)->serialize(); } $values['tracks'] = $presentation_categories; // track_groups $track_groups = array(); foreach ($summit->getCategoryGroups() as $group) { $track_groups[] = SerializerRegistry::getInstance()->getSerializer($group)->serialize(); } $values['track_groups'] = $track_groups; $schedule = array(); foreach ($summit->getScheduleEvents() as $event) { $schedule[] = SerializerRegistry::getInstance()->getSerializer($event)->serialize(); } $values['schedule'] = $schedule; $sponsors = array(); foreach ($summit->getSponsors() as $company) { $sponsors[] = SerializerRegistry::getInstance()->getSerializer($company)->serialize(); } $values['sponsors'] = $sponsors; $speakers = array(); foreach ($summit->getSpeakers() as $speaker) { $speakers[] = SerializerRegistry::getInstance()->getSerializer($speaker)->serialize ( null, [], [], [ 'summit_id' => $summit->getId(), 'published' => true ] ); } $values['speakers'] = $speakers; } break; case 'type':{ if(isset($values['type_id'])) { unset($values['type_id']); $values['type'] = $summit->hasType() ? SerializerRegistry::getInstance()->getSerializer($summit->getType())->serialize() : null; } } break; } } } $values['timestamp'] = time(); return $values; } }