Files
openstackid-resources/app/Models/Foundation/Summit/Factories/SummitLocationFactory.php
smarcet 5d209e8a36 Update bookable room field types from float to int (
bc stripes use int)

Change-Id: I15d3d9be2e46f9fd253feda94fbedf1db975948d
2019-06-30 19:02:21 -03:00

278 lines
8.7 KiB
PHP

<?php namespace App\Models\Foundation\Summit\Factories;
/**
* 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.
**/
use models\exceptions\ValidationException;
use models\summit\SummitAbstractLocation;
use models\summit\SummitAirport;
use models\summit\SummitBookableVenueRoom;
use models\summit\SummitExternalLocation;
use models\summit\SummitGeoLocatedLocation;
use models\summit\SummitHotel;
use models\summit\SummitVenue;
use models\summit\SummitVenueRoom;
/**
* Class SummitLocationFactory
* @package App\Models\Foundation\Summit\Factories
*/
final class SummitLocationFactory
{
/**
* @param array $data
* @return SummitAbstractLocation|null
* @throws ValidationException
*/
public static function build(array $data){
if(!isset($data['class_name'])) throw new ValidationException("missing class_name param");
$location = null;
switch($data['class_name']){
case SummitVenue::ClassName :{
$location = self::populateSummitVenue(new SummitVenue, $data);
}
break;
case SummitExternalLocation::ClassName :{
$location = self::populateSummitExternalLocation(new SummitExternalLocation, $data);
}
break;
case SummitHotel::ClassName :{
$location = self::populateSummitHotel(new SummitHotel, $data);
}
break;
case SummitAirport::ClassName :{
$location = self::populateSummitAirport(new SummitAirport, $data);
}
break;
case SummitBookableVenueRoom::ClassName :{
$location = self::populateSummitVenueBookableRoom(new SummitBookableVenueRoom, $data);
}
break;
case SummitVenueRoom::ClassName :{
$location = self::populateSummitVenueRoom(new SummitVenueRoom, $data);
}
break;
}
return $location;
}
/**
* @param SummitAbstractLocation $location
* @param array $data
* @return SummitAbstractLocation
*/
private static function populateSummitAbstractLocation(SummitAbstractLocation $location, array $data){
if(isset($data['name']))
$location->setName(trim($data['name']));
if(isset($data['description']))
$location->setDescription(trim($data['description']));
return $location;
}
/**
* @param SummitGeoLocatedLocation $location
* @param array $data
* @return SummitGeoLocatedLocation
*/
private static function populateSummitGeoLocatedLocation(SummitGeoLocatedLocation $location, array $data){
if(isset($data['address_1']))
$location->setAddress1(trim($data['address_1']));
if(isset($data['address_2']))
$location->setAddress2(trim($data['address_2']));
if(isset($data['zip_code']))
$location->setZipCode(trim($data['zip_code']));
if(isset($data['city']))
$location->setCity(trim($data['city']));
if(isset($data['state']))
$location->setState(trim($data['state']));
if(isset($data['country']))
$location->setCountry(trim($data['country']));
if(isset($data['website_url']))
$location->setWebsiteUrl(trim($data['website_url']));
if(isset($data['lng']))
$location->setLng(trim($data['lng']));
if(isset($data['lat']))
$location->setLat(trim($data['lat']));
if(isset($data['display_on_site']))
$location->setDisplayOnSite(boolval($data['display_on_site']));
if(isset($data['details_page']))
$location->setDetailsPage(boolval($data['details_page']));
if(isset($data['location_message']))
$location->setLocationMessage(trim($data['location_message']));
return $location;
}
/**
* @param SummitVenue $venue
* @param array $data
* @return SummitVenue
*/
public static function populateSummitVenue(SummitVenue $venue, array $data){
self::populateSummitGeoLocatedLocation
(
self::populateSummitAbstractLocation($venue, $data),
$data
);
if(isset($data['is_main']))
$venue->setIsMain(boolval($data['is_main']));
return $venue;
}
/**
* @param SummitExternalLocation $external_location
* @param array $data
* @return SummitExternalLocation
*/
public static function populateSummitExternalLocation(SummitExternalLocation $external_location, array $data){
self::populateSummitGeoLocatedLocation
(
self::populateSummitAbstractLocation($external_location, $data),
$data
);
if(isset($data['capacity']))
$external_location->setCapacity(intval($data['capacity']));
return $external_location;
}
/**
* @param SummitHotel $hotel
* @param array $data
* @return SummitHotel
*/
public static function populateSummitHotel(SummitHotel $hotel, array $data){
self::populateSummitExternalLocation
(
self::populateSummitGeoLocatedLocation
(
self::populateSummitAbstractLocation($hotel, $data),
$data
),
$data
);
if(isset($data['hotel_type']))
$hotel->setHotelType(trim($data['hotel_type']));
if(isset($data['sold_out']))
$hotel->setSoldOut(boolval($data['sold_out']));
if(isset($data['booking_link']))
$hotel->setBookingLink(trim($data['booking_link']));
return $hotel;
}
/**
* @param SummitAirport $airport
* @param array $data
* @return SummitAirport
*/
public static function populateSummitAirport(SummitAirport $airport, array $data){
self::populateSummitExternalLocation
(
self::populateSummitGeoLocatedLocation
(
self::populateSummitAbstractLocation($airport, $data),
$data
),
$data
);
if(isset($data['airport_type']))
$airport->setAirportType(trim($data['airport_type']));
return $airport;
}
/**
* @param SummitVenueRoom $room
* @param array $data
* @return SummitVenueRoom
*/
public static function populateSummitVenueRoom(SummitVenueRoom $room, array $data){
self::populateSummitAbstractLocation($room, $data);
if(isset($data['capacity']))
$room->setCapacity(intval($data['capacity']));
if(isset($data['override_blackouts']))
$room->setOverrideBlackouts(boolval($data['override_blackouts']));
return $room;
}
/**
* @param SummitBookableVenueRoom $room
* @param array $data
* @return SummitBookableVenueRoom
*/
public static function populateSummitVenueBookableRoom(SummitBookableVenueRoom $room, array $data){
self::populateSummitVenueRoom($room, $data);
if(isset($data['time_slot_cost']))
$room->setTimeSlotCost(intval($data['time_slot_cost']));
if(isset($data['currency']))
$room->setCurrency(trim($data['currency']));
return $room;
}
/**
* @param SummitAbstractLocation $location
* @param array $data
* @return SummitAbstractLocation
*/
public static function populate(SummitAbstractLocation $location, array $data){
if($location instanceof SummitVenue){
return self::populateSummitVenue($location, $data);
}
if($location instanceof SummitHotel){
return self::populateSummitHotel($location, $data);
}
if($location instanceof SummitAirport){
return self::populateSummitAirport($location, $data);
}
if($location instanceof SummitExternalLocation){
return self::populateSummitExternalLocation($location, $data);
}
if($location instanceof SummitBookableVenueRoom){
return self::populateSummitVenueBookableRoom($location, $data);
}
if($location instanceof SummitVenueRoom){
return self::populateSummitVenueRoom($location, $data);
}
return $location;
}
}