Вход Регистрация
Файл: sngine-v2.8/Script/includes/libs/Embed/Providers/Api/GoogleMaps.php
Строк: 83
<?php

namespace EmbedProvidersApi;

use 
EmbedAdaptersAdapter;
use 
EmbedProvidersProvider;
use 
EmbedHttpUrl;
use 
EmbedUtils;

/**
 * Provider to use the API of google.com
 */
class GoogleMaps extends Provider
{
    protected 
$mode;
    protected 
$config = [
        
'key' => null,
    ];

    
/**
     * {@inheritdoc}
     */
    
public function __construct(Adapter $adapter)
    {
        
parent::__construct($adapter);

        
$mode $adapter->getResponse()->getUrl()->getDirectoryPosition(1);

        
// Default is view (if mode is not mentioned in the url)
        
$this->mode 'view';

        switch (
$mode) {
            case 
'place':
            case 
'dir':
            case 
'search':
                
$this->mode $mode;
                break;
        }

        
// check streetview mode
        // simple check,- starts with @, ends with t
        
if ((substr($mode01) === '@') &&  (substr($mode, -1) === 't')) {
            
$this->mode 'streetview';
        }
    }

    
/**
     * {@inheritdoc}
     */
    
public function getTitle()
    {
        
$url $this->adapter->getResponse()->getUrl();

        if (
$this->mode === 'place') {
            return 
$url->getDirectoryPosition(2);
        }

        if (
$this->mode === 'dir') {
            return 
$url->getDirectoryPosition(2).' / '.$url->getDirectoryPosition(3);
        }
    }

    
/**
     * {@inheritdoc}
     */
    
public function getProviderName()
    {
        return 
'Google Maps';
    }

    
/**
     * {@inheritdoc}
     */
    
public function getCode()
    {
        
$url $this->adapter->getResponse()->getUrl();
        
$key $this->adapter->getConfig('google[key]');

        if (empty(
$key)) {
            return;
        }

        switch (
$this->mode) {
            case 
'view':
                
$pos self::getPosition($this->mode$url);

                return 
Utils::iframe($url
                    
->withPath('maps/embed/v1/'.$this->mode)
                    ->
withQueryParameters([
                        
'center' => $pos['coordinates'],
                        
'zoom' => $pos['zoom'],
                        
'key' => $key,
                    ]));

            case 
'streetview':
                
$pos self::getPosition($this->mode$url);

                return 
Utils::iframe($url
                    
->withPath('maps/embed/v1/'.$this->mode)
                    ->
withQueryParameters([
                        
'location' => $pos['coordinates'],
                        
'heading' => $pos['heading'],
                        
'pitch' =>  $pos['pitch'],
                        
'fov' =>  $pos['fov'],
                        
'key' => $key,
                    ]));

            case 
'place':
            case 
'search':
                return 
Utils::iframe($url
                    
->withPath('maps/embed/v1/'.$this->mode)
                    ->
withQueryParameters([
                        
'q' => $url->getDirectoryPosition(2),
                        
'key' => $key,
                    ]));

            case 
'dir':
                return 
Utils::iframe($url
                    
->withPath('maps/embed/v1/directions')
                    ->
withQueryParameters([
                        
'origin' => $url->getDirectoryPosition(2),
                        
'destination' => $url->getDirectoryPosition(3),
                        
'key' => $key,
                    ]));
        }
    }

    
/**
     * Returns parsed position data from url.
     *
     * @param  string $mode The url mode
     * @param  Url    $url
     *
     * @return array
     */
    
private static function getPosition($modeUrl $url)
    {
        
// Set defaults
        
$position = [
            
'coordinates' => '',
            
'zoom' => '4',
            
'heading' => '0',
            
'pitch' => '0',
            
'fov' => '90'
        
];

        if (
$mode === 'view') {
            
$pos explode(","$url->getDirectoryPosition(1));
            
$position['coordinates'] = str_replace('@'''$pos[0]).','.$pos[1];
            
$position['zoom'] = str_replace('z'""$pos[2]);
        }

        if (
$mode === 'streetview') {
            
$pos explode(","$url->getDirectoryPosition(1));
            
$position['coordinates'] = str_replace('@'''$pos[0]).','.$pos[1];
            
$position['zoom'] = str_replace('a'''$pos[2]); // seems not used by google (emulated by other params)
            
$position['heading'] = str_replace('h'''$pos[4]);
            
$position['fov'] = str_replace('y'''$pos[3]);
            
$pitch str_replace('t'''$pos[5]); // t is pitch but in 180% format
            
if (is_numeric($pitch)) {
                
$position['pitch'] = floatval($pitch) - 90;
            }
        }

        return 
$position;
    }
}
Онлайн: 1
Реклама