Completed
Push — master ( 86c16b...d765f6 )
by Robbie
7s
created

CarouselPageExtension::updateCMSFields()   B

Complexity

Conditions 2
Paths 2

Size

Total Lines 32
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 23
c 0
b 0
f 0
nc 2
nop 1
dl 0
loc 32
rs 8.8571
1
<?php
2
3
namespace CWP\AgencyExtensions\Extensions;
4
5
use CWP\AgencyExtensions\Model\CarouselItem;
6
use SilverStripe\ORM\DataExtension;
7
use SilverStripe\Forms\FieldList;
8
use SilverStripe\Forms\GridField\GridFieldConfig_RelationEditor;
9
use SilverStripe\Forms\GridField\GridField;
10
use SilverStripe\Forms\GridField\GridFieldAddNewButton;
11
use SilverStripe\Forms\GridField\GridFieldAddExistingAutocompleter;
12
use SilverStripe\Forms\GridField\GridFieldDeleteAction;
13
use SilverStripe\Forms\GridField\GridFieldSortableHeader;
14
use UndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
15
use SilverStripe\Forms\GridField\GridFieldVersionedState;
16
use SilverStripe\Forms\LiteralField;
17
18
class CarouselPageExtension extends DataExtension
19
{
20
    private static $has_many = [
21
        'CarouselItems' => CarouselItem::class
22
    ];
23
24
    private static $owns = [
25
        'CarouselItems'
26
    ];
27
28
    /**
29
     * @return DataList
30
     */
31
    public function getCarouselItems()
32
    {
33
        return $this->owner->getComponents('CarouselItems')->sort('SortOrder');
34
    }
35
36
    /**
37
     * @return DataList
38
     */
39
    public function getVisibleCarouselItems()
40
    {
41
        return $this->getCarouselItems()->filter('Archived', false);
42
    }
43
44
    /**
45
     * Add the carousel management GridField to the Page's CMS fields
46
     *
47
     * @param FieldList $fields
48
     */
49
    public function updateCMSFields(FieldList $fields)
50
    {
51
        $gridField = GridField::create(
52
            'CarouselItems',
53
            _t(__CLASS__ . 'TITLE', 'Hero/Carousel'),
54
            $this->getCarouselItems(),
55
            GridFieldConfig_RelationEditor::create()
56
        );
57
        $gridField->setDescription(_t(
58
            __CLASS__ . 'NOTE',
59
            'NOTE: Carousel functionality will automatically be loaded when 2 or more items are added below'
60
        ));
61
        $gridConfig = $gridField->getConfig();
62
        $gridConfig->getComponentByType(GridFieldAddNewButton::class)->setButtonName(
63
            _t(__CLASS__ . 'ADDNEW', 'Add new')
64
        );
65
        $gridConfig->removeComponentsByType(GridFieldAddExistingAutocompleter::class);
66
        $gridConfig->removeComponentsByType(GridFieldDeleteAction::class);
67
        $gridConfig->addComponent(new GridFieldDeleteAction());
68
        $gridConfig->addComponent(new GridFieldVersionedState());
69
        if (class_exists(GridFieldSortableRows::class)) {
70
            $gridConfig->addComponent(new GridFieldSortableRows('SortOrder'));
71
        }
72
        $gridConfig->removeComponentsByType(GridFieldSortableHeader::class);
73
        $gridField->setModelClass(CarouselItem::class);
74
75
        $fields->findOrMakeTab(
76
            'Root.Carousel',
77
            _t(__CLASS__ . 'TITLE', 'Hero/Carousel')
78
        );
79
80
        $fields->addFieldToTab('Root.Carousel', $gridField);
81
    }
82
}
83