diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitLocationsApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitLocationsApiController.php index 91d3b7aab..f1a1ca22e 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitLocationsApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitLocationsApiController.php @@ -214,33 +214,71 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) { */ public function getVenues($summit_id) { - return $this->processRequest(function () use ($summit_id) { - $summit = SummitFinderStrategyFactory::build($this->repository, $this->resource_server_context)->find($summit_id); - if (is_null($summit)) return $this->error404(); - - //locations - $locations = []; + $summit = SummitFinderStrategyFactory::build($this->repository, $this->resource_server_context)->find($summit_id); + if (is_null($summit)) return $this->error404(); - foreach ($summit->getVenues() as $location) { - $locations[] = SerializerRegistry::getInstance()->getSerializer($location)->serialize(); + return $this->_getAll( + function () { + return [ + 'name' => ['==', '=@','@@'], + 'rooms_name' => ['==', '=@','@@'], + 'rooms_floor_name' =>['==', '=@','@@'], + 'floors_name' => ['==', '=@','@@'], + 'description' => ['=@','@@'], + 'address_1' => ['=@'], + 'address_2' => ['=@'], + 'zip_code' => ['==', '=@'], + 'city' => ['==', '=@'], + 'state' => ['==', '=@'], + 'country' => ['==', '=@'], + 'sold_out' => ['=='], + 'is_main' => ['=='], + ]; + }, + function () { + return [ + 'name' => 'sometimes|string', + 'rooms_name' => 'sometimes|string', + 'rooms_floor_name' => 'sometimes|string', + 'floors_name' => 'sometimes|string', + 'description' => 'sometimes|string', + 'address_1' => 'sometimes|string', + 'address_2' => 'sometimes|string', + 'zip_code' => 'sometimes|string', + 'city' => 'sometimes|string', + 'state' => 'sometimes|string', + 'country' => 'sometimes|string', + 'sold_out' => 'sometimes|boolean', + 'is_main' => 'sometimes|boolean', + ]; + }, + function () { + return [ + 'id', + 'name', + 'order' + ]; + }, + function ($filter) { + $filter->addFilterCondition(FilterParser::buildFilter('class_name', '==', SummitVenue::ClassName)); + return $filter; + }, + function () { + return SerializerRegistry::SerializerType_Public; + }, + null, + null, + function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) { + return $this->location_repository->getBySummit + ( + $summit, + new PagingInfo($page, $per_page), + call_user_func($applyExtraFilters, $filter), + $order + ); } - - $response = new PagingResponse - ( - count($locations), - count($locations), - 1, - 1, - $locations - ); - - return $this->ok($response->toArray( - SerializerUtils::getExpand(), - SerializerUtils::getFields(), - SerializerUtils::getRelations(), - )); - }); + ); } /** diff --git a/app/Repositories/Summit/DoctrineSummitLocationRepository.php b/app/Repositories/Summit/DoctrineSummitLocationRepository.php index 16ccf88a1..3c4e61ffe 100644 --- a/app/Repositories/Summit/DoctrineSummitLocationRepository.php +++ b/app/Repositories/Summit/DoctrineSummitLocationRepository.php @@ -23,7 +23,6 @@ use models\summit\SummitGeoLocatedLocation; use models\summit\SummitHotel; use models\summit\SummitVenue; -use utils\DoctrineFilterMapping; use utils\DoctrineHavingFilterMapping; use utils\DoctrineInstanceOfFilterMapping; use utils\Filter; @@ -56,7 +55,10 @@ protected function getBaseEntity() protected function getFilterMappings() { return [ - 'name' => 'al.name:json_string', + 'name' => 'al.name:json_string', + 'rooms_name' => 'v_rooms.name:json_string', + 'rooms_floor_name' => 'v_rooms_floor.name:json_string', + 'floors_name' => 'v_floors.name:json_string', 'description' => 'al.description:json_string', 'opening_hour' => 'al.opening_hour:json_int', 'closing_hour' => 'al.closing_hour:json_int', @@ -126,7 +128,7 @@ public function getBySummit ->from(SummitAbstractLocation::class, "al") ->leftJoin(SummitGeoLocatedLocation::class, 'gll', 'WITH', 'gll.id = al.id') ->leftJoin(SummitVenue::class, 'v', 'WITH', 'v.id = gll.id') - ->leftJoin(SummitExternalLocation::class, 'el', 'WITH', 'el.id = gll.id') + ->leftJoin(SummitVenueRoom::class, 'vr', 'WITH', 'v.id = gll.id') ->leftJoin(SummitHotel::class, 'h', 'WITH', 'h.id = el.id') ->leftJoin(SummitAirport::class, 'ap', 'WITH', 'ap.id = el.id') ->leftJoin(SummitVenueRoom::class, 'r', 'WITH', 'r.id = al.id') @@ -158,6 +160,16 @@ public function getBySummit $query = $query->addOrderBy("al.id",'ASC'); } + if($filter->hasFilter("rooms_name") || $filter->hasFilter("rooms_floor_name")){ + $query = $query->leftJoin('v.rooms', 'v_rooms'); + if($filter->hasFilter("rooms_floor_name")){ + $query = $query->leftJoin('v_rooms.floor', 'v_rooms_floor'); + } + } + if($filter->hasFilter("floors_name")){ + $query = $query->leftJoin('v.floors', 'v_floors'); + } + if($filter->hasFilter("availability_day")){ // special case, we need to figure if each room has available slots $res = $query->getQuery()->execute();