diff --git a/app/_config/extensions.yml b/app/_config/extensions.yml index d1b6168..3933ef9 100644 --- a/app/_config/extensions.yml +++ b/app/_config/extensions.yml @@ -11,6 +11,10 @@ SilverStripe\Blog\Model\BlogPost: extensions: - Site\Extensions\BlogPostExtension +Dynamic\FlexSlider\Model\SlideImage: + extensions: + - Site\Extensions\SlideImageExtension + SilverStripe\Core\Injector\Injector: SilverStripe\UserForms\Model\UserDefinedForm: class: Site\Extensions\CMSMain_HiddenClass diff --git a/app/src/Elements/SliderElement.php b/app/src/Elements/SliderElement.php index f6975f3..75e3eb1 100644 --- a/app/src/Elements/SliderElement.php +++ b/app/src/Elements/SliderElement.php @@ -9,7 +9,13 @@ namespace Site\Elements; use Dynamic\Elements\Flexslider\Elements\ElementSlideshow; +use Dynamic\FlexSlider\Model\SlideImage; use Dynamic\FlexSlider\ORM\FlexSlider; +use SilverStripe\Core\Injector\Injector; +use SilverStripe\Forms\CheckboxField; +use SilverStripe\Forms\LiteralField; +use SilverStripe\Forms\ReadonlyField; +use Symbiote\GridFieldExtensions\GridFieldEditableColumns; class SliderElement extends ElementSlideshow { @@ -25,8 +31,70 @@ class SliderElement extends ElementSlideshow FlexSlider::class, ]; + private static $owns = [ + 'Slides', + ]; + + private $items; + public function getType() { return self::$singular_name; } + + public function getCMSFields() + { + $fields = parent::getCMSFields(); + + // remove in case you don't need to provide this functionality + $fields->removeByName([ + 'ConfigHD', + 'Animation', + 'Loop', + 'Animate', + 'ThumbnailNav', + 'SliderControlNav', + 'SliderDirectionNav', + 'CarouselControlNav', + 'CarouselDirectionNav', + 'CarouselThumbnailCt', + ]); + + $grid = $fields->dataFieldByName('Slides'); + $config = $grid->getConfig(); + + $columns = new GridFieldEditableColumns(); + $columns->setDisplayFields([ + 'Hide' => [ + 'title' => 'Hide it?', + 'field' => CheckboxField::class, + ], + ]); + + $config->addComponent($columns); + + return $fields; + } + + /** + * @return mixed + */ + public function getSlideShow() + { + if($this->items) { + return $this->items; + } + + $date = date('Y-m-d H:i:s'); + $this->items = $this->Slides()->filter([ + 'Hide' => '0', + ])->filterByCallback(function($item, $list) use ($date) { + $on = $item->getField('DateOn'); + $off = $item->getField('DateOff'); + + return ($on <= $date) && (!$off || $off > $date); + })->sort('SortOrder'); + + return $this->items; + } } diff --git a/app/src/Extensions/SlideImageExtension.php b/app/src/Extensions/SlideImageExtension.php new file mode 100644 index 0000000..32f10ea --- /dev/null +++ b/app/src/Extensions/SlideImageExtension.php @@ -0,0 +1,48 @@ + 'Boolean(0)', + 'DateOn' => 'Datetime', + 'DateOff' => 'Datetime', + ]; + + public function updateCMSFields(FieldList $fields) + { + parent::updateCMSFields($fields); + + $fields->removeByName([ + 'PageLinkID', + 'Hide', + 'DateOn', + 'DateOff', + ]); + + $fields->addFieldToTab('Root.Main', ToggleCompositeField::create( + 'ConfigHD', + 'Slide Settings', [ + CheckboxField::create('Hide', 'Hide this slide? (That will hide the slide regardless of start/end fields)'), + DatetimeField::create('DateOn', 'When would you like to start showing the slide?'), + DatetimeField::create('DateOff', 'When would you like to stop showing the slide?'), + ] + )); + } +}