2018-11-29 18:38:20 +01:00
|
|
|
<?php
|
|
|
|
|
2019-09-07 01:50:52 +02:00
|
|
|
namespace A2nt\SilverStripeMapboxField;
|
2018-11-29 18:38:20 +01:00
|
|
|
|
|
|
|
use http\Exception\InvalidArgumentException;
|
2019-09-07 02:57:59 +02:00
|
|
|
use SilverStripe\Core\Config\Config;
|
2018-11-29 18:38:20 +01:00
|
|
|
use SilverStripe\Forms\CompositeField;
|
|
|
|
use SilverStripe\Forms\HiddenField;
|
2019-09-07 02:57:59 +02:00
|
|
|
use Symbiote\Addressable\MapboxGeocodeService;
|
2018-11-29 18:38:20 +01:00
|
|
|
|
|
|
|
class MapboxField extends CompositeField
|
|
|
|
{
|
2019-09-07 01:50:52 +02:00
|
|
|
private static $access_token = null;
|
|
|
|
private static $map_style = 'mapbox://styles/mapbox/basic-v9';
|
|
|
|
|
|
|
|
private static $api_css_url = 'https://api.tiles.mapbox.com/mapbox-gl-js/v0.51.0/mapbox-gl.css';
|
|
|
|
private static $api_javascript_url = 'https://api.tiles.mapbox.com/mapbox-gl-js/v0.51.0/mapbox-gl.js';
|
|
|
|
private static $geocoder_css_url = 'https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v2.3.0/mapbox-gl-geocoder.css';
|
|
|
|
private static $geocoder_javascript_url = 'https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v2.3.0/mapbox-gl-geocoder.min.js';
|
|
|
|
|
|
|
|
private $curr_style;
|
|
|
|
|
2019-09-07 02:57:59 +02:00
|
|
|
public static function getAccessToken()
|
|
|
|
{
|
|
|
|
$config = MapboxField::config();
|
|
|
|
|
|
|
|
return $config->access_token
|
|
|
|
?: Config::inst()->get(MapboxGeocodeService::class, 'mapbox_api_key');
|
|
|
|
}
|
|
|
|
|
2018-11-29 18:38:20 +01:00
|
|
|
/**
|
|
|
|
* @param string $name
|
|
|
|
* @param string $title
|
|
|
|
* @param string $latitudeField
|
|
|
|
* @param string $longitudeField
|
|
|
|
*/
|
|
|
|
public function __construct($name, $title, $latitudeField, $longitudeField)
|
|
|
|
{
|
2019-09-07 01:50:52 +02:00
|
|
|
$cfg = self::config();
|
|
|
|
// check access_token
|
2019-09-07 02:57:59 +02:00
|
|
|
if (!self::getAccessToken()) {
|
|
|
|
return user_error(self::class.': Please set Mapbox.com Access token');
|
2019-09-07 01:50:52 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
$this->curr_style = $cfg->get('map_style');
|
|
|
|
|
2018-11-29 18:38:20 +01:00
|
|
|
$children = [
|
|
|
|
HiddenField::create($latitudeField)
|
2019-09-07 01:50:52 +02:00
|
|
|
->setAttribute('data-mapbox-field', 'Lat'),
|
2018-11-29 18:38:20 +01:00
|
|
|
HiddenField::create($longitudeField)
|
2019-09-07 01:50:52 +02:00
|
|
|
->setAttribute('data-mapbox-field', 'Lng')
|
2018-11-29 18:38:20 +01:00
|
|
|
];
|
|
|
|
|
|
|
|
parent::__construct($children);
|
|
|
|
|
|
|
|
$this->setName($name);
|
|
|
|
$this->setTitle($title);
|
|
|
|
}
|
2019-09-07 01:50:52 +02:00
|
|
|
|
|
|
|
public function getAttributes()
|
|
|
|
{
|
|
|
|
$attrs = parent::getAttributes();
|
|
|
|
return array_merge($attrs, [
|
|
|
|
'class' => $attrs['class'].' stacked',
|
|
|
|
'data-style' => $this->getStyle(),
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getStyle()
|
|
|
|
{
|
|
|
|
return $this->curr_style;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setStyle($style)
|
|
|
|
{
|
|
|
|
$this->curr_style = $style;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
}
|