BasePage   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 142
Duplicated Lines 0 %

Importance

Changes 6
Bugs 0 Features 0
Metric Value
eloc 64
c 6
b 0
f 0
dl 0
loc 142
rs 10
wmc 9

5 Methods

Rating   Name   Duplication   Size   Complexity  
A getFooter() 0 3 1
A RelatedPagesTitle() 0 3 1
A getSelectedLanguage() 0 10 3
A getCMSFields() 0 47 3
A RelatedPages() 0 3 1
1
<?php
2
3
namespace CWP\CWP\PageTypes;
4
5
use CWP\CWP\Model\RelatedPageLink;
6
use SilverStripe\CMS\Model\SiteTree;
7
use SilverStripe\Forms\FieldList;
8
use SilverStripe\Forms\GridField\GridField;
9
use SilverStripe\Forms\GridField\GridFieldAddExistingAutocompleter;
10
use SilverStripe\Forms\GridField\GridFieldAddNewButton;
11
use SilverStripe\Forms\GridField\GridFieldConfig_RelationEditor;
12
use SilverStripe\Forms\GridField\GridFieldDataColumns;
13
use SilverStripe\Forms\GridField\GridFieldEditButton;
14
use SilverStripe\Forms\GridField\GridFieldFilterHeader;
15
use SilverStripe\Forms\TreeMultiselectField;
16
use SilverStripe\Taxonomy\TaxonomyTerm;
17
use SilverStripe\View\ArrayData;
18
use Symbiote\GridFieldExtensions\GridFieldOrderableRows;
19
use TractorCow\Fluent\Model\Locale;
0 ignored issues
show
Bug introduced by
The type TractorCow\Fluent\Model\Locale was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
20
use TractorCow\Fluent\State\FluentState;
0 ignored issues
show
Bug introduced by
The type TractorCow\Fluent\State\FluentState was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
21
22
/**
23
 * `BasePage` is a foundation page class which can be used for constructing your own page types. By default it is
24
 * hidden from the CMS - we rely on developers creating their own `Page` class in `mysite/code` which will extend
25
 * from `BasePage`.
26
 *
27
 * Please note: you should generally always extend `Page` with your custom page types. Refrain from subclassing
28
 * `BasePage` directly. Doing so will omit `Page` from your custom class's hierarchy, and this can have unintended
29
 * side effects where modules rely on modifying things on the `Page` class, as well as with templates and themes.
30
 */
31
32
class BasePage extends SiteTree
33
{
34
    /**
35
     * Hide this page type from the CMS. hide_ancestor is slightly misnamed, should really be just "hide"
36
     *
37
     * {@inheritDoc}
38
     */
39
    private static $hide_ancestor = BasePage::class;
0 ignored issues
show
introduced by
The private property $hide_ancestor is not used, and could be removed.
Loading history...
40
41
    private static $api_access = [
0 ignored issues
show
introduced by
The private property $api_access is not used, and could be removed.
Loading history...
42
        'view' => [
43
            'Locale', 'URLSegment', 'Title', 'MenuTitle', 'Content', 'MetaDescription',
44
            'ExtraMenu', 'Sort', 'Version', 'ParentID', 'ID'
45
        ],
46
        'edit' => [
47
            'Locale', 'URLSegment', 'Title', 'MenuTitle', 'Content', 'MetaDescription',
48
            'ExtraMenu', 'Sort', 'Version', 'ParentID', 'ID'
49
        ],
50
    ];
51
52
    private static $table_name = 'BasePage';
0 ignored issues
show
introduced by
The private property $table_name is not used, and could be removed.
Loading history...
53
54
    /**
55
     * @config
56
     * @var string
57
     */
58
    private static $related_pages_title = 'Related pages';
0 ignored issues
show
introduced by
The private property $related_pages_title is not used, and could be removed.
Loading history...
59
60
    private static $many_many = [
0 ignored issues
show
introduced by
The private property $many_many is not used, and could be removed.
Loading history...
61
        'Terms' => TaxonomyTerm::class,
62
        'RelatedPagesThrough' => [
63
            'through' => RelatedPageLink::class,
64
            'from' => 'BasePage',
65
            'to' => 'Child',
66
        ]
67
    ];
68
69
    private static $owns = [
0 ignored issues
show
introduced by
The private property $owns is not used, and could be removed.
Loading history...
70
        'RelatedPagesThrough',
71
    ];
72
73
    private static $belongs_many_many = [
0 ignored issues
show
introduced by
The private property $belongs_many_many is not used, and could be removed.
Loading history...
74
        'SimilarPages' => BasePage::class
75
    ];
76
77
    /**
78
     * @var array
79
     * @config
80
     */
81
    private static $many_many_extraFields = [
0 ignored issues
show
introduced by
The private property $many_many_extraFields is not used, and could be removed.
Loading history...
82
        'RelatedPages' => [
83
            'SortOrder' => 'Int',
84
        ],
85
    ];
86
87
    private static $plural_name = 'Base Pages';
0 ignored issues
show
introduced by
The private property $plural_name is not used, and could be removed.
Loading history...
88
89
    /**
90
     * Get the footer holder.
91
     */
92
    public function getFooter()
93
    {
94
        return FooterHolder::get_one(FooterHolder::class);
95
    }
96
97
    /**
98
     * @deprecated 2.2.0:3.0.0 Please use RelatedPagesThrough() instead
99
     */
100
    public function RelatedPages()
101
    {
102
        return $this->getManyManyComponents('RelatedPagesThrough');
103
    }
104
105
    public function RelatedPagesTitle()
106
    {
107
        return $this->config()->get('related_pages_title');
108
    }
109
110
    public function getCMSFields()
111
    {
112
        $this->beforeUpdateCMSFields(function (FieldList $fields) {
113
            // Related Pages
114
            $components = GridFieldConfig_RelationEditor::create();
115
            $components->removeComponentsByType(GridFieldAddNewButton::class);
116
            $components->removeComponentsByType(GridFieldEditButton::class);
117
            $components->removeComponentsByType(GridFieldFilterHeader::class);
118
            $components->addComponent(new GridFieldOrderableRows('SortOrder'));
119
120
            /** @var GridFieldDataColumns $dataColumns */
121
            $dataColumns = $components->getComponentByType(GridFieldDataColumns::class);
122
            $dataColumns->setDisplayFields([
123
                'Title' => _t(__CLASS__ . '.ColumnTitle', 'Title'),
124
                'ClassName' => _t(__CLASS__ . '.ColumnPageType', 'Page Type')
125
            ]);
126
127
            $fields->findOrMakeTab(
128
                'Root.RelatedPages',
129
                _t(__CLASS__ . '.RelatedPages', 'Related pages')
130
            );
131
            $fields->addFieldToTab(
132
                'Root.RelatedPages',
133
                GridField::create(
134
                    'RelatedPages',
135
                    _t(__CLASS__ . '.RelatedPages', 'Related pages'),
136
                    $this->RelatedPagesThrough(),
0 ignored issues
show
Bug introduced by
The method RelatedPagesThrough() does not exist on CWP\CWP\PageTypes\BasePage. Since you implemented __call, consider adding a @method annotation. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

136
                    $this->/** @scrutinizer ignore-call */ 
137
                           RelatedPagesThrough(),
Loading history...
137
                    $components
138
                )
139
            );
140
141
            // Taxonomies - Unless they have their own 'Tags' field (such as in Blog, etc)
142
            $hasMany = $this->hasMany();
143
            $manyMany = $this->manyMany();
144
            if (!isset($hasMany['Tags']) && !isset($manyMany['Tags'])) {
145
                $fields->findOrMakeTab('Root.Tags', _t(__CLASS__ . '.TagsTabTitle', 'Tags'));
146
                $fields->addFieldToTab(
147
                    'Root.Tags',
148
                    TreeMultiselectField::create(
149
                        'Terms',
150
                        _t(__CLASS__ . '.Terms', 'Terms'),
151
                        TaxonomyTerm::class
152
                    )->setDescription(_t(__CLASS__ . '.TermsDescription', 'Click to search for additional terms'))
153
                );
154
            }
155
        });
156
        return parent::getCMSFields();
157
    }
158
159
    /**
160
     * Returns the native language name for the selected locale/language, empty string if Fluent is not available
161
     *
162
     * @return string
163
     */
164
    public function getSelectedLanguage()
165
    {
166
        if (!class_exists(Locale::class) || !$this->hasMethod('Locales')) {
167
            return '';
168
        }
169
170
        /** @var ArrayData $information */
171
        $information = $this->LocaleInformation(FluentState::singleton()->getLocale());
0 ignored issues
show
Bug introduced by
The method LocaleInformation() does not exist on CWP\CWP\PageTypes\BasePage. Since you implemented __call, consider adding a @method annotation. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

171
        /** @scrutinizer ignore-call */ 
172
        $information = $this->LocaleInformation(FluentState::singleton()->getLocale());
Loading history...
172
173
        return $information->LanguageNative;
174
    }
175
}
176