silverstripe-mapboxfield/src/MapboxField.php

80 lines
2.3 KiB
PHP
Raw Permalink Normal View History

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;
}
}