Fixed summit attendee serializer
Added ticket serializer and filter by eventbrite order id and external attendee id Change-Id: I86c26e272354ad79fc999134b346fc61cff0926b
This commit is contained in:
parent
2306382478
commit
68ec7ff062
@ -308,6 +308,10 @@ final class OAuth2SummitAttendeesApiController extends OAuth2ProtectedController
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $summit_id
|
||||
* @return mixed
|
||||
*/
|
||||
public function getAttendeesBySummit($summit_id){
|
||||
|
||||
$values = Input::all();
|
||||
@ -341,24 +345,27 @@ final class OAuth2SummitAttendeesApiController extends OAuth2ProtectedController
|
||||
$filter = null;
|
||||
|
||||
if (Input::has('filter')) {
|
||||
$filter = FilterParser::parse(Input::get('filter'), array
|
||||
(
|
||||
'first_name' => ['=@', '=='],
|
||||
'last_name' => ['=@', '=='],
|
||||
'email' => ['=@', '=='],
|
||||
));
|
||||
$filter = FilterParser::parse(Input::get('filter'), [
|
||||
|
||||
'first_name' => ['=@', '=='],
|
||||
'last_name' => ['=@', '=='],
|
||||
'email' => ['=@', '=='],
|
||||
'external_order_id' => ['=@', '=='],
|
||||
'external_attendee_id' => ['=@', '=='],
|
||||
]);
|
||||
}
|
||||
|
||||
$order = null;
|
||||
|
||||
if (Input::has('order'))
|
||||
{
|
||||
$order = OrderParser::parse(Input::get('order'), array
|
||||
(
|
||||
$order = OrderParser::parse(Input::get('order'), [
|
||||
|
||||
'first_name',
|
||||
'last_name',
|
||||
'id',
|
||||
));
|
||||
'external_order_id',
|
||||
]);
|
||||
}
|
||||
|
||||
if(is_null($filter)) $filter = new Filter();
|
||||
|
@ -115,6 +115,7 @@ final class SerializerRegistry
|
||||
|
||||
$this->registry['SummitEventFeedback'] = SummitEventFeedbackSerializer::class;
|
||||
$this->registry['SummitAttendee'] = SummitAttendeeSerializer::class;
|
||||
$this->registry['SummitAttendeeTicket'] = SummitAttendeeTicketSerializer::class;
|
||||
$this->registry['SummitMemberSchedule'] = SummitMemberScheduleSerializer::class;
|
||||
$this->registry['SummitMemberFavorite'] = SummitMemberFavoriteSerializer::class;
|
||||
$this->registry['SummitEntityEvent'] = SummitEntityEventSerializer::class;
|
||||
|
@ -22,14 +22,12 @@ use models\summit\SummitAttendee;
|
||||
*/
|
||||
final class SummitAttendeeSerializer extends SilverStripeSerializer
|
||||
{
|
||||
protected static $array_mappings = array
|
||||
(
|
||||
protected static $array_mappings = [
|
||||
'SummitHallCheckedIn' => 'summit_hall_checked_in:json_boolean',
|
||||
'SummitHallCheckedInDate' => 'summit_hall_checked_in_date:datetime_epoch',
|
||||
'SharedContactInfo' => 'shared_contact_info:json_boolean',
|
||||
'MemberId' => 'member_id:json_int',
|
||||
);
|
||||
|
||||
];
|
||||
|
||||
/**
|
||||
* @param null $expand
|
||||
@ -93,7 +91,7 @@ final class SummitAttendeeSerializer extends SilverStripeSerializer
|
||||
$tickets = array();
|
||||
foreach($attendee->getTickets() as $t)
|
||||
{
|
||||
array_push($tickets, SerializerRegistry::getInstance()->getSerializer($t->getTicketType())->serialize());
|
||||
array_push($tickets, SerializerRegistry::getInstance()->getSerializer($t)->serialize($expand));
|
||||
}
|
||||
$values['tickets'] = $tickets;
|
||||
}
|
||||
|
@ -0,0 +1,52 @@
|
||||
<?php namespace ModelSerializers;
|
||||
use models\summit\SummitAttendeeTicket;
|
||||
|
||||
/**
|
||||
* Copyright 2018 OpenStack Foundation
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
**/
|
||||
final class SummitAttendeeTicketSerializer extends SilverStripeSerializer
|
||||
{
|
||||
protected static $array_mappings = [
|
||||
'ExternalOrderId' => 'external_order_id:json_string',
|
||||
'ExternalAttendeeId' => 'external_attendee_id:json_string',
|
||||
'BoughtDate' => 'bought_date:datetime_epoch',
|
||||
'TicketTypeId' => 'ticket_type_id:json_int',
|
||||
];
|
||||
|
||||
/**
|
||||
* @param null $expand
|
||||
* @param array $fields
|
||||
* @param array $relations
|
||||
* @param array $params
|
||||
* @return array
|
||||
*/
|
||||
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array())
|
||||
{
|
||||
$ticket = $this->object;
|
||||
if (!$ticket instanceof SummitAttendeeTicket) return [];
|
||||
$values = parent::serialize($expand, $fields, $relations, $params);
|
||||
if (!empty($expand)) {
|
||||
$exp_expand = explode(',', $expand);
|
||||
foreach ($exp_expand as $relation) {
|
||||
switch (trim($relation)) {
|
||||
case 'ticket_type': {
|
||||
unset($values['ticket_type_id']);
|
||||
$values['ticket_type'] = SerializerRegistry::getInstance()->getSerializer($ticket->getTicketType())->serialize();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $values;
|
||||
}
|
||||
}
|
@ -55,6 +55,7 @@ final class DoctrineSummitAttendeeRepository
|
||||
->from(SummitAttendee::class, "a")
|
||||
->leftJoin('a.summit', 's')
|
||||
->leftJoin('a.member', 'm')
|
||||
->leftJoin('a.tickets', 't')
|
||||
->where("s.id = :summit_id");
|
||||
|
||||
$query->setParameter("summit_id", $summit->getId());
|
||||
@ -80,15 +81,28 @@ final class DoctrineSummitAttendeeRepository
|
||||
'm',
|
||||
"m.email :operator ':value'"
|
||||
),
|
||||
'external_order_id' => new DoctrineLeftJoinFilterMapping
|
||||
(
|
||||
'a.tickets',
|
||||
't',
|
||||
"t.external_order_id :operator ':value'"
|
||||
),
|
||||
'external_attendee_id' => new DoctrineLeftJoinFilterMapping
|
||||
(
|
||||
'a.tickets',
|
||||
't',
|
||||
"t.external_attendee_id :operator ':value'"
|
||||
),
|
||||
]);
|
||||
}
|
||||
|
||||
if (!is_null($order)) {
|
||||
|
||||
$order->apply2Query($query, [
|
||||
'id' => 'a.id',
|
||||
'first_name' => 'm.first_name',
|
||||
'last_name' => 'm.last_name',
|
||||
'id' => 'a.id',
|
||||
'first_name' => 'm.first_name',
|
||||
'last_name' => 'm.last_name',
|
||||
'external_order_id' => 't.external_order_id',
|
||||
]);
|
||||
} else {
|
||||
//default order
|
||||
|
@ -102,4 +102,37 @@ class OAuth2AttendeesApiTest extends ProtectedApiTest
|
||||
$attendee = json_decode($content);
|
||||
$this->assertTrue(!is_null($attendee));
|
||||
}
|
||||
|
||||
public function testGetAttendeeByOrderID(){
|
||||
|
||||
$params = [
|
||||
|
||||
'id' => 23,
|
||||
'page' => 1,
|
||||
'per_page' => 10,
|
||||
'order' => '+external_order_id',
|
||||
'filter' => 'external_order_id==615528547',
|
||||
'expand' => 'member,schedule,tickets,ticket_type'
|
||||
];
|
||||
|
||||
$headers = [
|
||||
"HTTP_Authorization" => " Bearer " . $this->access_token,
|
||||
"CONTENT_TYPE" => "application/json"
|
||||
];
|
||||
|
||||
$response = $this->action(
|
||||
"GET",
|
||||
"OAuth2SummitAttendeesApiController@getAttendeesBySummit",
|
||||
$params,
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
$headers
|
||||
);
|
||||
|
||||
$content = $response->getContent();
|
||||
$this->assertResponseStatus(200);
|
||||
$attendees = json_decode($content);
|
||||
$this->assertTrue(!is_null($attendees));
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user