PageExtension::filterBlockClasses()   A
last analyzed

Complexity

Conditions 5
Paths 3

Size

Total Lines 17
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 5
eloc 9
c 1
b 0
f 0
nc 3
nop 1
dl 0
loc 17
rs 9.6111
1
<?php
2
3
namespace Cita\Modular\Extension;
4
5
use SilverStripe\Forms\FieldList;
6
use SilverStripe\ORM\DataExtension;
7
use Cita\Modular\Model\Block;
8
use Cita\Modular\Traits\ModularCommonTrait;
9
10
class PageExtension extends DataExtension
11
{
12
    use ModularCommonTrait;
13
    /**
14
     * Many_many relationship
15
     * @var array
16
     */
17
    private static $many_many = [
18
        'ModularBlocks' => Block::class,
19
    ];
20
21
    /**
22
     * Defines Database fields for the Many_many bridging table
23
     *  @var array
24
     */
25
    private static $many_many_extraFields = [
26
        'ModularBlocks' => [
27
            'SortOrder' => 'Int',
28
        ]
29
    ];
30
31
    /**
32
     * Update Fields
33
     * @return FieldList
34
     */
35
    public function updateCMSFields(FieldList $fields)
36
    {
37
        if ($this->owner->config()->modulated) {
38
            $fields->removeByName([
39
                'Content',
40
            ]);
41
42
            $this->makeGridField($fields);
43
        }
44
45
        return $fields;
46
    }
47
48
    private function filterBlockClasses($classes)
49
    {
50
        if (!empty($this->owner->config()->allowed_modulars)) {
51
            $classes = [];
52
53
            foreach ($this->owner->config()->allowed_modulars as $modular) {
54
                $classes[strtolower($modular)] = $modular;
55
            }
56
        } elseif (!empty($this->owner->config()->disallowed_modulars)) {
57
            foreach ($this->owner->config()->disallowed_modulars as $modular) {
58
                unset($classes[strtolower($modular)]);
59
            }
60
        }
61
62
        unset($classes[strtolower(Block::class)]);
63
64
        return $classes;
65
    }
66
67
    /**
68
     * Event handler called before writing to the database.
69
     *
70
     * @uses DataExtension->onAfterWrite()
71
     */
72
    public function onBeforeWrite()
73
    {
74
        parent::onBeforeWrite();
75
        $list = $this->owner->ModularBlocks()->filterByCallback(function($item) {
76
            return $item->isPublished();
77
        });
78
79
        $this->owner->Content = '';
80
81
        foreach ($list as $module) {
82
            $this->owner->Content .= $module->Plain . "\n";
83
        }
84
    }
85
}
86