silverstripe-webpack/app/src/Extensions/SiteConfigExtension.php

140 lines
4.5 KiB
PHP
Raw Normal View History

2018-03-24 11:45:31 +01:00
<?php
2021-03-14 21:45:35 +01:00
namespace App\Extensions;
2018-04-21 06:29:32 +02:00
use A2nt\SilverStripeMapboxField\MapboxField;
2018-09-15 00:55:42 +02:00
use Innoweb\Sitemap\Pages\SitemapPage;
2018-08-26 12:46:03 +02:00
use SilverStripe\AssetAdmin\Forms\UploadField;
use SilverStripe\Assets\Image;
2019-05-23 13:02:32 +02:00
use SilverStripe\Blog\Model\BlogPost;
2019-11-07 19:26:33 +01:00
use SilverStripe\Forms\LiteralField;
use SilverStripe\Forms\TextareaField;
2018-08-26 12:46:03 +02:00
use SilverStripe\Forms\TextField;
2018-03-24 11:45:31 +01:00
use SilverStripe\ORM\DataExtension;
use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\TreeMultiselectField;
2019-04-11 00:15:29 +02:00
use SilverStripe\Forms\DropdownField;
//use BetterBrief\GoogleMapField;
2018-03-24 11:45:31 +01:00
class SiteConfigExtension extends DataExtension
{
private static $db = [
'ExtraCode' => 'Text',
'Longitude' => 'Decimal(10, 8)',
'Latitude' => 'Decimal(11, 8)',
2018-08-26 12:46:03 +02:00
'MapZoom' => 'Int',
//'MapAPIKey' => 'Varchar(255)',
2019-05-23 13:02:32 +02:00
'Description' => 'Varchar(255)',
2019-11-07 19:26:33 +01:00
'Address' => 'Varchar(255)',
'Suburb' => 'Varchar(255)',
'State' => 'Varchar(255)',
'ZipCode' => 'Varchar(6)',
2018-08-06 13:46:54 +02:00
];
2018-09-15 00:55:42 +02:00
private static $has_one = [
'PrivacyPolicy' => SiteTree::class,
'Sitemap' => SiteTree::class,
];
2018-03-24 11:45:31 +01:00
private static $many_many = [
'Navigation' => SiteTree::class,
2018-03-24 11:45:31 +01:00
];
public function updateCMSFields(FieldList $fields)
{
2020-07-26 13:28:54 +02:00
$img = Image::get()->filter([
'ParentID' => 0,
'FileFilename' => 'qrcode.png',
])->first();
if ($img) {
$fields->addFieldsToTab('Root.Main', [
LiteralField::create('QRCode', '<img src="'.$img->Link().'" alt="QR code" width="200" style="float:left" />'),
]);
}
$fields->addFieldsToTab('Root.Main', [
TreeMultiselectField::create(
'Navigation',
'Navigation',
SiteTree::class
)->setDisableFunction(static function ($el) {
return $el->getField('ParentID') !== 0;
}),
TextareaField::create('Description', 'Website Description'),
TextareaField::create('ExtraCode', 'Extra site-wide HTML code'),
DropdownField::create(
'PrivacyPolicyID',
'Privacy Policy Page',
SiteTree::get()->map()->toArray()
2019-12-17 21:43:28 +01:00
)->setEmptyString('(Select one)'),
DropdownField::create(
'SitemapID',
'Sitemap Page',
SitemapPage::get()->map()->toArray()
2019-12-17 21:43:28 +01:00
)->setEmptyString('(Select one)'),
]);
2018-03-24 11:45:31 +01:00
$mapTab = $fields->findOrMakeTab('Root.Maps');
2019-11-07 19:26:33 +01:00
$mapTab->setTitle('Address / Map');
$fields->addFieldsToTab('Root.Maps', [
2019-11-07 19:26:33 +01:00
TextField::create('Address'),
TextField::create('Suburb', 'City'),
TextField::create('State'),
TextField::create('ZipCode'),
]);
2019-11-07 19:26:33 +01:00
if (MapboxField::getAccessToken()) {
$fields->addFieldsToTab('Root.Maps', [
//TextField::create('MapAPIKey'),
TextField::create('MapZoom'),
MapboxField::create('Map', 'Choose a location', 'Latitude', 'Longitude'),
]);
} else {
$fields->addFieldsToTab('Root.Maps', [
LiteralField::create('MapNotice', '<p class="alert alert-info">No Map API keys specified.</p>')
]);
}
/*GoogleMapField::create(
2018-08-26 12:46:03 +02:00
$this->owner,
2019-05-23 13:02:32 +02:00
'Location',
[
'show_search_box' => true,
]
)*/
}
public function MapAPIKey()
{
return MapboxField::config()->get('access_token');
}
public function MapStyle()
{
return MapboxField::config()->get('map_style');
2018-08-26 12:46:03 +02:00
}
public function getGeoJSON()
{
return '{"type": "MarkerCollection","features": [{"type": "Feature","icon": "<i class=\'fas fa-map-marker-alt\'></i>",'
.'"properties": {"content": "'.$this->owner->getTitle().'"},"geometry": {"type": "Point",'
.'"coordinates": ['.$this->owner->getField('Longitude').','.$this->owner->getField('Latitude').']}}]}';
}
public function DirectionsLink()
{
return '<a href="https://www.google.com/maps/dir/Current+Location/'
.$this->owner->getField('Latitude').','
.$this->owner->getField('Longitude').'" class="btn btn-primary btn-directions" target="_blank">'
.'<i class="fas fa-road"></i> Get Directions</a>';
2018-03-24 11:45:31 +01:00
}
2019-05-23 13:02:32 +02:00
public function getLatestBlogPosts()
{
return BlogPost::get()->sort('PublishDate DESC');
}
2018-03-24 11:45:31 +01:00
}