'handleIndex', ); /** * @var IQueryHandler */ protected $clouds_services_query; /** * @var ICloudsDataCenterLocationsQueryHandler */ protected $clouds_locations_query; /** * @return string */ abstract function getCloudTypeForJS(); /** * @return IOpenStackImplementationRepository */ abstract function buildCloudRepository(); /** * @param IEntityRepository $repository * @param IEntityRepository $video_type_repository * @param IMarketplaceTypeRepository $marketplace_type_repository * @param IEntityRepository $guest_os_repository * @param IEntityRepository $hypervisor_type_repository * @param IOpenStackApiVersionRepository $api_version_repository * @param IOpenStackComponentRepository $component_repository * @param IOpenStackReleaseRepository $release_repository * @param IEntityRepository $region_repository * @param IEntityRepository $support_channel_type_repository * @param IOpenStackReleaseSupportedApiVersionRepository $supported_version_repository * @param IMarketPlaceTypeAddPolicy $add_policy * @param ICompanyServiceCanAddResourcePolicy $add_resource_policy * @param ICompanyServiceCanAddVideoPolicy $add_video_policy * @param ICloudFactory $factory * @param IMarketplaceFactory $marketplace_factory * @param IValidatorFactory $validator_factory * @param IOpenStackApiFactory $api_factory * @param IGeoCodingService $geo_coding_service * @param IMarketPlaceTypeCanShowInstancePolicy $show_policy * @param ICacheService $cache_service * @param ITransactionManager $tx_manager * @return CloudManager */ abstract function buildCloudManager(IEntityRepository $repository, IEntityRepository $video_type_repository, IMarketplaceTypeRepository $marketplace_type_repository, IEntityRepository $guest_os_repository, IEntityRepository $hypervisor_type_repository, IOpenStackApiVersionRepository $api_version_repository, IOpenStackComponentRepository $component_repository, IOpenStackReleaseRepository $release_repository, IEntityRepository $region_repository, IEntityRepository $support_channel_type_repository, IOpenStackReleaseSupportedApiVersionRepository $supported_version_repository, //policies IMarketPlaceTypeAddPolicy $add_policy, ICompanyServiceCanAddResourcePolicy $add_resource_policy, ICompanyServiceCanAddVideoPolicy $add_video_policy, //factories ICloudFactory $factory, IMarketplaceFactory $marketplace_factory, IValidatorFactory $validator_factory, IOpenStackApiFactory $api_factory, IGeoCodingService $geo_coding_service, IMarketPlaceTypeCanShowInstancePolicy $show_policy, ICacheService $cache_service, ITransactionManager $tx_manager); /** * @return ICloudFactory */ abstract function buildCloudFactory(); /** * @return IMarketPlaceTypeAddPolicy */ abstract function buildCloudAddPolicy(); /** * @return ICloudsDataCenterLocationsQueryHandler */ abstract function buildCloudLocationsQuery(); /** * @return IQueryHandler */ abstract function buildCloudServicesQuery(); function init() { parent::init(); $cloud_type = $this->getCloudTypeForJS(); Requirements::css(THIRDPARTY_DIR . '/jquery-ui-themes/smoothness/jquery-ui.css'); Requirements::javascript(THIRDPARTY_DIR . '/jquery-ui/jquery-ui.js'); Requirements::customScript(" var cloud_type = '{$cloud_type}' jQuery(document).ready(function($) { $('#{$cloud_type}','.marketplace-nav').addClass('current'); });"); Requirements::css("themes/openstack/css/chosen.css", "screen,projection"); Requirements::javascript(Director::protocol()."maps.googleapis.com/maps/api/js?sensor=false"); Requirements::javascript("marketplace/code/ui/admin/js/utils.js"); Requirements::javascript("marketplace/code/ui/frontend/js/markerclusterer.js"); Requirements::javascript("marketplace/code/ui/frontend/js/oms.min.js"); Requirements::javascript("marketplace/code/ui/frontend/js/infobubble-compiled.js"); Requirements::javascript("marketplace/code/ui/frontend/js/google.maps.jquery.js"); Requirements::javascript("themes/openstack/javascript/chosen.jquery.min.js"); Requirements::javascript("marketplace/code/ui/frontend/js/clouds.directory.page.js"); Requirements::customScript($this->GATrackingCode()); $this->cloud_repository = $this->buildCloudRepository(); $this->pricing_schema_repository = new SapphirePricingSchemaRepository; //google geo coding settings $google_geo_coding_api_key = null; $google_geo_coding_client_id = null; $google_geo_coding_private_key = null; if(defined('GOOGLE_GEO_CODING_API_KEY')){ $google_geo_coding_api_key = GOOGLE_GEO_CODING_API_KEY; } else if (defined('GOOGLE_GEO_CODING_CLIENT_ID') && defined('GOOGLE_GEO_CODING_PRIVATE_KEY')){ $google_geo_coding_client_id = GOOGLE_GEO_CODING_CLIENT_ID; $google_geo_coding_private_key = GOOGLE_GEO_CODING_PRIVATE_KEY; } $this->manager = $this->buildCloudManager( $this->cloud_repository, new SapphireMarketPlaceVideoTypeRepository, new SapphireMarketPlaceTypeRepository, new SapphireGuestOSTypeRepository, new SapphireHyperVisorTypeRepository, new SapphireOpenStackApiVersionRepository, new SapphireOpenStackComponentRepository, new SapphireOpenStackReleaseRepository, new SapphireRegionRepository, new SapphireSupportChannelTypeRepository, new SapphireOpenStackReleaseSupportedApiVersionRepository, $this->buildCloudAddPolicy(), new CompanyServiceCanAddResourcePolicy, new CompanyServiceCanAddVideoPolicy, $this->buildCloudFactory(), new MarketplaceFactory, new ValidatorFactory, new OpenStackApiFactory, new GoogleGeoCodingService( new SapphireGeoCodingQueryRepository, new UtilFactory, SapphireTransactionManager::getInstance(), $google_geo_coding_api_key, $google_geo_coding_client_id, $google_geo_coding_private_key), null, new SessionCacheService, SapphireTransactionManager::getInstance() ); $this->clouds_locations_query = $this->buildCloudLocationsQuery(); $this->clouds_services_query = $this->buildCloudServicesQuery(); } public function handleIndex() { $params = $this->request->allParams(); if(isset($params["Company"]) && isset($params["Slug"])){ //render instance ... return $this->renderCloud(); } } abstract function renderCloud(); public function getClouds(){ return new ArrayList($this->manager->getActives()); } public function getDataCenterLocationsJson(){ $locations = array(); $query = new QueryObject; $query->addAddCondition(QueryCriteria::equal("Active",true)); list($list,$size) = $this->cloud_repository->getAll($query,0,1000); foreach($list as $cloud){ foreach($cloud->getDataCentersLocations() as $location){ $json_data = array(); $json_data['color'] = $location->getDataCenterRegion()->getColor(); $json_data['country'] = Geoip::countryCode2name($location->getCountry()); $json_data['city'] = $location->getCity(); $json_data['lat'] = $location->getLat(); $json_data['lng'] = $location->getLng(); $json_data['product_name'] = $cloud->getName(); $json_data['product_url'] = $this->Link().$cloud->getCompany()->URLSegment.'/'. strtolower(trim(preg_replace('/[^A-Za-z0-9-]+/', '-', $cloud->getName()))); $json_data['owner'] = $cloud->getCompany()->getName(); array_push($locations,$json_data); } } return json_encode($locations); } public function getCurrentDataCenterLocationsJson(){ $params = $this->request->allParams(); $company_url_segment = Convert::raw2sql($params["Company"]); $slug = Convert::raw2sql($params["Slug"]); $query = new QueryObject(); $query->addAddCondition(QueryCriteria::equal('Slug',$slug)); $cloud = $this->cloud_repository->getBy($query); if(!$cloud) throw new NotFoundEntityException('',''); if($cloud->getCompany()->URLSegment != $company_url_segment) throw new NotFoundEntityException('',''); return CloudViewModel::getDataCenterLocationsJson($cloud); } public function getPricingSchemas(){ return CloudViewModel::getPricingSchemas(); } public function getEnabledPricingSchemas(){ $params = $this->request->allParams(); $company_url_segment = Convert::raw2sql($params["Company"]); $slug = Convert::raw2sql($params["Slug"]); $query = new QueryObject(); $query->addAddCondition(QueryCriteria::equal('Slug',$slug)); $cloud = $this->cloud_repository->getBy($query); if(!$cloud) throw new NotFoundEntityException('',''); if($cloud->getCompany()->URLSegment != $company_url_segment) throw new NotFoundEntityException('',''); return CloudViewModel::getEnabledPricingSchemas($cloud); } public function ServicesCombo(){ $source = array(); $result = $this->clouds_services_query->handle(new OpenStackImplementationNamesQuerySpecification('')); foreach($result->getResult() as $dto){ $source[$dto->getValue()] = $dto->getValue(); } $ddl = new DropdownField('service-term"',$title=null,$source,$value=''); $ddl->setEmptyString('-- Show All --'); return $ddl; } public function LocationCombo(){ $source = array(); $result = $this->clouds_locations_query->handle(new OpenStackImplementationNamesQuerySpecification('')); foreach($result->getResult() as $dto){ $source[$dto->getValue()] = $dto->getValue(); } $ddl = new DropdownField('location-term"',$title = null,$source,$value=''); $ddl->setEmptyString('-- Show All --'); return $ddl; } }