diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitApiController.php index eae49288..035d6dd4 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitApiController.php @@ -79,10 +79,17 @@ final class OAuth2SummitApiController extends OAuth2ProtectedController { try { + $expand = Request::input('expand', ''); + $fields = Request::input('fields', ''); + $relations = Request::input('relations', ''); + + $relations = !empty($relations) ? explode(',', $relations) : []; + $fields = !empty($fields) ? explode(',', $fields) : []; + $summits = []; foreach($this->_getSummits() as $summit){ - $summits[] = SerializerRegistry::getInstance()->getSerializer($summit)->serialize(Input::get('expand','')); + $summits[] = SerializerRegistry::getInstance()->getSerializer($summit)->serialize($expand, $fields, $relations); } $response = new PagingResponse diff --git a/app/ModelSerializers/SummitSerializer.php b/app/ModelSerializers/SummitSerializer.php index 6aa1d5ee..95b3c9b7 100644 --- a/app/ModelSerializers/SummitSerializer.php +++ b/app/ModelSerializers/SummitSerializer.php @@ -27,8 +27,6 @@ final class SummitSerializer extends SilverStripeSerializer 'Name' => 'name:json_string', 'BeginDate' => 'start_date:datetime_epoch', 'EndDate' => 'end_date:datetime_epoch', - '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', @@ -56,6 +54,13 @@ final class SummitSerializer extends SilverStripeSerializer 'SpeakerAnnouncementEmailAlternateRejectedCount' => 'speaker_announcement_email_alternate_rejected_count:json_int', ]; + protected static $allowed_relations = [ + + 'ticket_types', + 'locations', + 'wifi_connections', + ]; + /** * @param null $expand * @param array $fields @@ -70,6 +75,7 @@ final class SummitSerializer extends SilverStripeSerializer $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])) { @@ -95,25 +101,31 @@ final class SummitSerializer extends SilverStripeSerializer $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 - $ticket_types = []; - foreach ($summit->getTicketTypes() as $ticket) { - $ticket_types[] = SerializerRegistry::getInstance()->getSerializer($ticket)->serialize($expand); + 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; } - $values['ticket_types'] = $ticket_types; //locations - $locations = []; - foreach ($summit->getLocations() as $location) { - $locations[] = SerializerRegistry::getInstance()->getSerializer($location)->serialize($expand); + if(in_array('locations', $relations)) { + $locations = []; + foreach ($summit->getLocations() as $location) { + $locations[] = SerializerRegistry::getInstance()->getSerializer($location)->serialize($expand); + } + $values['locations'] = $locations; } - $values['locations'] = $locations; // wifi connections - $wifi_connections = []; - foreach ($summit->getWifiConnections() as $wifi_connection) { - $wifi_connections[] = SerializerRegistry::getInstance()->getSerializer($wifi_connection)->serialize($expand); + 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; } - $values['wifi_connections'] = $wifi_connections; if (!empty($expand)) { $expand = explode(',', $expand); @@ -229,6 +241,7 @@ final class SummitSerializer extends SilverStripeSerializer } } } + $values['timestamp'] = time(); return $values; } diff --git a/tests/OAuth2SummitApiTest.php b/tests/OAuth2SummitApiTest.php index e0903ed2..1fb6bfab 100644 --- a/tests/OAuth2SummitApiTest.php +++ b/tests/OAuth2SummitApiTest.php @@ -18,7 +18,8 @@ final class OAuth2SummitApiTest extends ProtectedApiTest public function testGetSummits() { - $params = ['expand' => 'type']; + $start = time(); + $params = ['relations'=>'none']; $headers = array("HTTP_Authorization" => " Bearer " . $this->access_token); $response = $this->action( @@ -33,6 +34,9 @@ final class OAuth2SummitApiTest extends ProtectedApiTest $content = $response->getContent(); $summits = json_decode($content); + $end = time(); + $delta = $end - $start; + echo "execution call " . $delta . " seconds ..."; $this->assertTrue(!is_null($summits)); $this->assertResponseStatus(200); }