diff --git a/src/Elements/SliderElement.php b/src/Elements/SliderElement.php
index 0a0db94..bd87a00 100755
--- a/src/Elements/SliderElement.php
+++ b/src/Elements/SliderElement.php
@@ -81,7 +81,7 @@ class SliderElement extends ElementSlideshow
public function getSlideWidth()
{
- if($this->getField('ImageOriginalSize')){
+ if ($this->getField('ImageOriginalSize')) {
return null;
}
@@ -90,7 +90,7 @@ class SliderElement extends ElementSlideshow
public function getSlideHeight()
{
- if($this->getField('ImageOriginalSize')){
+ if ($this->getField('ImageOriginalSize')) {
return null;
}
@@ -123,12 +123,17 @@ class SliderElement extends ElementSlideshow
$grid = $fields->dataFieldByName('Slides');
if ($grid) {
+ $fields->insertBefore('Slides', LiteralField::create(
+ 'SlidesNote',
+ '
Note: to show hidden slide open slide item and uncheck "Hide" checkbox
'
+ ));
+
$config = $grid->getConfig();
$bulk = new BulkUploader('Image', SlideImage::class, false);
$bulk
->setUfSetup('setFolderName', 'Uploads/SlideImages');
- //->setUfSetup('getValidator.setAllowedExtensions', ['jpg', 'jpeg', 'png', 'gif']);
+ //->setUfSetup('getValidator.setAllowedExtensions', ['jpg', 'jpeg', 'png', 'gif']);
$config->addComponent($bulk);
$config->addComponent(new \Colymba\BulkManager\BulkManager());
diff --git a/src/Extensions/SlideImageEx.php b/src/Extensions/SlideImageEx.php
index bd87a00..8321250 100755
--- a/src/Extensions/SlideImageEx.php
+++ b/src/Extensions/SlideImageEx.php
@@ -2,183 +2,150 @@
/**
* Created by PhpStorm.
* User: tony
- * Date: 6/30/18
- * Time: 11:54 PM
+ * Date: 6/23/18
+ * Time: 1:23 PM
*/
-namespace A2nt\ElementalBasics\Elements;
+namespace A2nt\ElementalBasics\Extensions;
-use Colymba\BulkUpload\BulkUploader;
-use Dynamic\Elements\Flexslider\Elements\ElementSlideshow;
+use A2nt\ElementalBasics\Elements\SliderElement;
use Dynamic\FlexSlider\Model\SlideImage;
-use Dynamic\FlexSlider\ORM\FlexSlider;
-use SilverStripe\Assets\Image;
-use SilverStripe\Core\Injector\Injector;
+use LeKoala\FilePond\FilePondField;
+use SilverStripe\Assets\File;
+use SilverStripe\Core\Config\Config;
use SilverStripe\Forms\CheckboxField;
-use SilverStripe\Forms\LiteralField;
-use SilverStripe\Forms\NumericField;
-use SilverStripe\Forms\ReadonlyField;
-use Symbiote\GridFieldExtensions\GridFieldEditableColumns;
+use SilverStripe\Forms\DatetimeField;
+use SilverStripe\Forms\ToggleCompositeField;
+use SilverStripe\ORM\DataExtension;
+use SilverStripe\Forms\FieldList;
+use SilverStripe\ORM\ValidationResult;
/**
- * Class \A2nt\ElementalBasics\Elements\SliderElement
+ * Class \A2nt\ElementalBasics\Extensions\SlideImageEx
*
- * @property string $Animation
- * @property boolean $Loop
- * @property boolean $Animate
- * @property boolean $ThumbnailNav
- * @property boolean $SliderControlNav
- * @property boolean $SliderDirectionNav
- * @property boolean $CarouselControlNav
- * @property boolean $CarouselDirectionNav
- * @property int $CarouselThumbnailCt
- * @property float $FlexSliderSpeed
- * @property int $Interval
- * @property int $SlidesInRow
- * @property boolean $ImageOriginalSize
- * @method \SilverStripe\ORM\DataList|\Dynamic\FlexSlider\Model\SlideImage[] Slides()
- * @mixin \Dynamic\FlexSlider\ORM\FlexSlider
+ * @property \A2nt\ElementalBasics\Extensions\SlideImageEx $owner
+ * @property boolean $Hide
+ * @property string $DateOn
+ * @property string $DateOff
*/
-class SliderElement extends ElementSlideshow
+class SlideImageEx extends DataExtension
{
- private static $singular_name = 'Slider';
-
- private static $plural_name = 'Sliders';
-
- private static $description = 'Displays slide show';
-
- private static $table_name = 'SliderElement';
-
- private static $slide_width = 2140;
- private static $slide_height = 700;
-
private static $db = [
- 'Interval' => 'Int',
- 'SlidesInRow' => 'Int',
- 'ImageOriginalSize' => 'Boolean(0)',
+ 'Hide' => 'Boolean(0)',
+ 'DateOn' => 'Datetime',
+ 'DateOff' => 'Datetime',
];
- private static $extensions = [
- FlexSlider::class,
+ private static $has_one = [
+ 'VideoFile' => File::class,
];
private static $owns = [
- 'Slides',
+ 'VideoFile',
];
- private $items;
+ private $_cache = [
+ 'element' => [],
+ ];
- public function getType()
+ public function getElement()
{
- return self::$singular_name;
+ if (!isset($this->_cache['element'][$this->owner->ID])) {
+ $this->_cache['element'][$this->owner->ID] = $this->owner->SlideshowElement();
+ }
+
+ return $this->_cache['element'][$this->owner->ID];
}
- protected function ratioSize($size)
+
+ public function ImageURL()
{
- $count = $this->SlidesInRow;
- return ($count > 1) ? $size / $count : $size;
+ $el = $this->getElement();
+ $img = $this->owner->Image();
+
+ if (!$img) {
+ return null;
+ }
+
+ if ($el->getField('ImageOriginalSize')) {
+ return $img->Link();
+ }
+
+ return $img->FocusFill($this->getSlideWidth(), $this->getSlideHeight())->Link();
}
public function getSlideWidth()
{
- if ($this->getField('ImageOriginalSize')) {
- return null;
+ $element = $this->getElement();
+ if (!$element->ID) {
+ return SliderElement::config()->get('slide_width');
}
- return $this->ratioSize(self::config()->get('slide_width'));
+ return $element->getSlideWidth();
}
public function getSlideHeight()
{
- if ($this->getField('ImageOriginalSize')) {
- return null;
+ $element = $this->getElement();
+ if (!$element->ID) {
+ return SliderElement::config()->get('slide_height');
}
- return $this->ratioSize(self::config()->get('slide_height'));
+ return $element->getSlideHeight();
}
- public function getCMSFields()
+ public static function formatBytes($size, $precision = 2)
{
- $fields = parent::getCMSFields();
+ $base = log($size, 1024);
+ $suffixes = array('', 'K', 'M', 'G', 'T');
+
+ return round(pow(1024, $base - floor($base)), $precision) .' '. $suffixes[floor($base)];
+ }
+
+ public function updateCMSFields(FieldList $fields)
+ {
+ parent::updateCMSFields($fields);
- // remove in case you don't need to provide this functionality
$fields->removeByName([
- 'ConfigHD',
- 'Animation',
- 'Loop',
- 'Animate',
- 'ThumbnailNav',
- 'SliderControlNav',
- 'SliderDirectionNav',
- 'CarouselControlNav',
- 'CarouselDirectionNav',
- 'CarouselThumbnailCt',
+ 'PageLinkID',
+ 'Hide',
+ 'DateOn',
+ 'DateOff',
]);
- $fields->addFieldsToTab('Root.Settings', [
- CheckboxField::create('ImageOriginalSize', 'Use original image size'),
- NumericField::create('Interval', 'Auto-play Interval (sec)'),
- NumericField::create('SlidesInRow'),
+ $videoUpload = FilePondField::create('VideoFile')
+ ->setChunkUploads(true)
+ ->setAllowedExtensions(['mp4'])
+ ->setFolderName('Uploads/SlideVideos');
+
+ $validator = $videoUpload->getValidator();
+ $validator->setAllowedMaxFileSize(['mp4' => Config::inst()->get(SlideImage::class, 'max_video_size')]);
+
+ $maxFileSize = $validator->getAllowedMaxFileSize('mp4');
+ $videoUpload->setTitle('Video File (max size: '.self::formatBytes($maxFileSize).')');
+
+ $fields->insertAfter('Headline', $videoUpload);
+
+ $fields->dataFieldByName('Image')
+ ->setTitle('Image ('.$this->getSlideWidth().' x '.$this->getSlideHeight().' px)');
+
+ $fields->addFieldsToTab('Root.Main', [
+ CheckboxField::create('Hide', 'Hide this slide? (That will hide the slide regardless of start/end fields)'),
+ ToggleCompositeField::create(
+ 'ConfigHD',
+ 'Slide Date Settings',
+ [
+ DatetimeField::create('DateOn', 'When would you like to start showing the slide?'),
+ DatetimeField::create('DateOff', 'When would you like to stop showing the slide?'),
+ ]
+ )
]);
-
- $grid = $fields->dataFieldByName('Slides');
- if ($grid) {
- $fields->insertBefore('Slides', LiteralField::create(
- 'SlidesNote',
- 'Note: to show hidden slide open slide item and uncheck "Hide" checkbox
'
- ));
-
- $config = $grid->getConfig();
-
- $bulk = new BulkUploader('Image', SlideImage::class, false);
- $bulk
- ->setUfSetup('setFolderName', 'Uploads/SlideImages');
- //->setUfSetup('getValidator.setAllowedExtensions', ['jpg', 'jpeg', 'png', 'gif']);
- $config->addComponent($bulk);
- $config->addComponent(new \Colymba\BulkManager\BulkManager());
-
- $columns = new GridFieldEditableColumns();
- $columns->setDisplayFields([
- 'Hide' => [
- 'title' => 'Hide it?',
- 'field' => CheckboxField::class,
- ],
- ]);
-
- $config->addComponent($columns);
- }
-
- return $fields;
}
- /**
- * @return mixed
- */
- public function getSlideShow()
+ public function validate(ValidationResult $validationResult)
{
- if ($this->items) {
- return $this->items;
- }
-
- $date = date('Y-m-d H:i:s');
- $this->items = $this->Slides()->filter([
- 'Hide' => '0',
- ])->filterByCallback(static function ($item, $list) use ($date) {
- $on = $item->getField('DateOn');
- $off = $item->getField('DateOff');
-
- return ($on <= $date) && (!$off || $off > $date);
- })->sort('SortOrder');
-
- return $this->items;
- }
-
- public function onBeforeWrite()
- {
- parent::onBeforeWrite();
-
- if (!$this->getField('Interval')) {
- $this->setField('Interval', 5000);
+ if (!$this->owner->Name) {
+ $this->owner->Name = rand();
}
}
}