SiteConfigExtension::updateCMSFields()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 23
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 16
c 1
b 0
f 0
dl 0
loc 23
rs 9.7333
cc 1
nc 1
nop 1
1
<?php
2
3
namespace SilverCommerce\Discounts\Extensions;
4
5
use SilverStripe\Core\ClassInfo;
6
use SilverStripe\Forms\FieldList;
7
use SilverStripe\ORM\DataExtension;
8
use SilverStripe\Core\Config\Config;
9
use SilverStripe\Forms\LiteralField;
10
use SilverStripe\Forms\GridField\GridField;
11
use SilverCommerce\Discounts\Model\Discount;
12
use SilverStripe\Forms\ToggleCompositeField;
13
use SilverStripe\Forms\GridField\GridFieldAddNewButton;
14
use Symbiote\GridFieldExtensions\GridFieldAddNewMultiClass;
15
use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor;
16
17
/**
18
 * Add additional settings to the default siteconfig
19
 */
20
class SiteConfigExtension extends DataExtension
21
{
22
    private static $has_many = [
0 ignored issues
show
introduced by
The private property $has_many is not used, and could be removed.
Loading history...
23
        'Discounts' => Discount::class
24
    ];
25
    
26
    public function updateCMSFields(FieldList $fields)
27
    {
28
        // Setup add new button
29
        $add_button = new GridFieldAddNewMultiClass("buttons-before-left");
30
        $add_button->setClasses($this->get_subclasses(Discount::class));
31
32
        $config = GridFieldConfig_RecordEditor::create();
33
        $config->removeComponentsByType(GridFieldAddNewButton::class);
34
        $config->addComponent($add_button);
35
        
36
        // Add config sets
37
        $fields->addFieldToTab(
38
            'Root.Shop',
39
            ToggleCompositeField::create(
40
                'DiscountSettings',
41
                _t("Discounts.DiscountSettings", "Discount Settings"),
42
                [
43
                    LiteralField::create("DiscountPadding", "<br/>"),
44
                    GridField::create(
45
                        'Discounts',
46
                        '',
47
                        $this->owner->Discounts()
48
                    )->setConfig($config)
49
                ]
50
            )
51
        );
52
    }
53
54
    /**
55
     * Get a list of subclasses for the chosen type (either CatalogueProduct
56
     * or CatalogueCategory).
57
     *
58
     * @param  string $classname Classname of object we will get list for
59
     * @return array
60
     */
61
    protected function get_subclasses($classname)
62
    {
63
        // Get a list of available product classes
64
        $classnames = ClassInfo::subclassesFor($classname);
65
        array_shift($classnames);
66
        $return = [];
67
68
        foreach ($classnames as $classname) {
0 ignored issues
show
introduced by
$classname is overwriting one of the parameters of this function.
Loading history...
69
            $instance = singleton($classname);
70
            $description = Config::inst()->get($classname, 'description');
71
            $description = ($description) ? $instance->i18n_singular_name() . ': ' . $description : $instance->i18n_singular_name();
72
            
73
            $return[$classname] = $description;
74
        }
75
76
        asort($return);
77
        return $return;
78
    }
79
}
80