UserDefinedFormExtension   A
last analyzed

Complexity

Total Complexity 1

Size/Duplication

Total Lines 75
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 1
lcom 1
cbo 6
dl 0
loc 75
ccs 36
cts 36
cp 1
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
A updateCMSFields() 0 54 1
1
<?php
2
3
namespace Firesphere\PartialUserforms\Extensions;
4
5
use Firesphere\PartialUserforms\Models\PartialFormSubmission;
6
use SilverStripe\Forms\CheckboxField;
7
use SilverStripe\Forms\FieldList;
8
use SilverStripe\Forms\GridField\GridField;
9
use SilverStripe\Forms\GridField\GridFieldAddNewButton;
10
use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor;
11
use SilverStripe\Forms\Tab;
12
use SilverStripe\ORM\DataExtension;
13
use SilverStripe\ORM\DataList;
14
use SilverStripe\UserForms\Model\UserDefinedForm;
15
16
/**
17
 * Class UserDefinedFormExtension
18
 *
19
 * @package Firesphere\PartialUserforms\Extensions
20
 * @property UserDefinedForm|UserDefinedFormExtension $owner
21
 * @property boolean $ExportPartialSubmissions
22
 * @property boolean $PasswordProtected
23
 * @method DataList|PartialFormSubmission[] PartialSubmissions()
24
 */
25
class UserDefinedFormExtension extends DataExtension
26
{
27
    /**
28
     * @var array
29
     */
30
    private static $db = [
31
        'ExportPartialSubmissions' => 'Boolean(true)',
32
        'PasswordProtected'        => 'Boolean(false)'
33
    ];
34
35
    /**
36
     * @var array
37
     */
38
    private static $has_many = [
39
        'PartialSubmissions' => PartialFormSubmission::class
40
    ];
41
42
    /**
43
     * @param FieldList $fields
44
     */
45 1
    public function updateCMSFields(FieldList $fields)
46
    {
47
        /** @var GridField $submissionField */
48 1
        $submissionField = $fields->dataFieldByName('Submissions');
49 1
        $list = $submissionField->getList()->exclude(['ClassName' => PartialFormSubmission::class]);
50 1
        $submissionField->setList($list);
51
52 1
        $fields->removeByName('PartialSubmissions');
53
        /** @var GridFieldConfig_RecordEditor $gridfieldConfig */
54 1
        $gridfieldConfig = GridFieldConfig_RecordEditor::create();
55 1
        $gridfieldConfig->removeComponentsByType(GridFieldAddNewButton::class);
56
57
        // We need to manually add the tab
58 1
        $fields->addFieldToTab(
59 1
            'Root',
60 1
            Tab::create('PartialSubmissions', _t(__CLASS__ . '.PartialSubmission', 'Partial submissions'))
61
        );
62
63 1
        $fields->addFieldToTab(
64 1
            'Root.PartialSubmissions',
65 1
            GridField::create(
66 1
                'PartialSubmissions',
67 1
                _t(__CLASS__ . '.PartialSubmission', 'Partial submissions'),
68 1
                $this->owner->PartialSubmissions(),
0 ignored issues
show
Bug introduced by
The method PartialSubmissions does only exist in Firesphere\PartialUserfo...serDefinedFormExtension, but not in SilverStripe\UserForms\Model\UserDefinedForm.

It seems like the method you are trying to call exists only in some of the possible types.

Let’s take a look at an example:

class A
{
    public function foo() { }
}

class B extends A
{
    public function bar() { }
}

/**
 * @param A|B $x
 */
function someFunction($x)
{
    $x->foo(); // This call is fine as the method exists in A and B.
    $x->bar(); // This method only exists in B and might cause an error.
}

Available Fixes

  1. Add an additional type-check:

    /**
     * @param A|B $x
     */
    function someFunction($x)
    {
        $x->foo();
    
        if ($x instanceof B) {
            $x->bar();
        }
    }
    
  2. Only allow a single type to be passed if the variable comes from a parameter:

    function someFunction(B $x) { /** ... */ }
    
Loading history...
69 1
                $gridfieldConfig
70
            )
71
        );
72
73 1
        $fields->insertBefore(
74 1
            'DisableSaveSubmissions',
75 1
            $pwdCheckbox = CheckboxField::create(
76 1
                'PasswordProtected',
77 1
                _t(__CLASS__ . 'PasswordProtected', 'Password protect resuming partial submissions')
78
            )
79
        );
80 1
        $pwdDescription = _t(
81 1
            __CLASS__ . '.PasswordProtectDescription',
82 1
            'When resuming a partial submission, require the user to enter a password'
83
        );
84 1
        $pwdCheckbox->setDescription($pwdDescription);
85
86 1
        $fields->insertAfter(
87 1
            'DisableSaveSubmissions',
88 1
            $partialCheckbox = CheckboxField::create(
89 1
                'ExportPartialSubmissions',
90 1
                _t(__CLASS__ . '.partialCheckboxLabel', 'Send partial submissions')
91
            )
92
        );
93 1
        $description = _t(
94 1
            __CLASS__ . '.partialCheckboxDescription',
95 1
            'The configuration and global export configuration can be set in the site Settings'
96
        );
97 1
        $partialCheckbox->setDescription($description);
98 1
    }
99
}
100